MySQL Theory
MySQL Theory
MySQL...................................................................................................................................................2
Create Table..........................................................................................................................................2
Create columns..................................................................................................................................3
create rows........................................................................................................................................4
Select.....................................................................................................................................................6
update and delete.................................................................................................................................7
Alter usage.............................................................................................................................................9
Autocommit, Commit, Rollback.............................................................................................................9
Current_time(), current_date(), date_format(date, format)...............................................................10
Unique.................................................................................................................................................10
Not null................................................................................................................................................11
check...................................................................................................................................................12
default.................................................................................................................................................13
Primary key..........................................................................................................................................14
Auto increment...................................................................................................................................15
Foreign key..........................................................................................................................................16
on delete.............................................................................................................................................17
Joins.....................................................................................................................................................20
Functions.............................................................................................................................................26
logical operators(and, or, not).............................................................................................................26
wild cards............................................................................................................................................27
order by...............................................................................................................................................28
limit.....................................................................................................................................................28
Union...................................................................................................................................................29
Views...................................................................................................................................................32
Indexes................................................................................................................................................32
Subquery.............................................................................................................................................32
Grouped by..........................................................................................................................................33
rollup...................................................................................................................................................34
stored procedures...............................................................................................................................35
triggers................................................................................................................................................37
Case.....................................................................................................................................................40
Aliansing..............................................................................................................................................42
Partition By..........................................................................................................................................43
CTE.......................................................................................................................................................44
TempTable...........................................................................................................................................45
String Functions...................................................................................................................................46
MySQL
1. Create database name; - მონაცემთა ბაზის შექმნა.
2. Use database name; - მოხდება მხოლოდ ის რომ ჩამოიშლება მონაცემთა ბაზა.
3. Drop database „name“ ; - წაიშლება მონაცემთა ბაზა.
USE [Data Analyst Bootcamp];
4. Alter database “name” read only = 1; - კითხვის მოდზეა და მასზე ზემოქმედება
შეუძლებელია. არც წაშლა შეიძლება.
ALTER DATABASE [Data Analyst Bootcamp] SET READ_ONLY;
ALTER DATABASE [Data Analyst Bootcamp] SET READ_WRITE;
Create Table
Syntax:
CREATE TABLE [database_name.][schema_name.]table_name (
column_definition1,
column_definition2,
........,
table_constraints
);
employee_id int,
first_name varchar(50),
last_name varchar(50),
hire_date date
);
Create columns
create rows
Syntax:
1. ვამატებთ სტრიქონს.
Name VARCHAR(100),
Gender CHAR(1),
Marks DECIMAL(5, 2)
);
Name VARCHAR(100),
Gender CHAR(1),
Marks DECIMAL(5, 2)
);
VALUES
-- Execute the INSERT INTO SELECT statement to copy data from Student to Student_info
INSERT INTO Student_info (StudentID, Name, Gender, Marks)
FROM Student;
Select
Syntax:
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column_name
HAVING condition
ORDER BY column_name ASC|DESC;
Functions
1. Min
3. Sum
4. Count
5. Avg
SELECT COUNT(expression)
FROM table_name(s)
[WHERE conditions];
SELECT
AVG(ALL revenue) AS average_revenue_all,
AVG(DISTINCT revenue) AS average_revenue_distinct
FROM
sales
WHERE
revenue > 1000;
comparison symbols
Server operators
1. Intersect:
-- Creating sample tables
CREATE TABLE employees (
employee_id INT,
employee_name VARCHAR(50)
);
INTERSECT
Wildcard Explanation
[^] It is used to match on any character not in the [^] brackets (for example,
[^abc] would match on any character that is not a, b, or c characters)
%:
select * from employees
SELECT *
FROM [javatpoint].[dbo].[Student]
WHERE name NOT LIKE 'A%';
_ABC_
select * from employees
[ABC]
SELECT *
FROM [javatpoint].[dbo].[Student]
WHERE name LIKE 'Aj[ie]et%';
8. EXISTS:
-- Creating sample tables
CREATE TABLE customers (
customer_id INT,
customer_name VARCHAR(50)
);
UPDATE workers
WHERE employee_id = 6
limit 1;
UPDATE workers
WHERE employee_id = 6
limit 1;
UPDATE workers
WHERE employee_id = 6;
We can do this without actual script an with SQL. Clicking right button of mouse and search script
table as and then we find what we need and get script. Only one thing needed is to replace our new
data and execute.
where employee_id = 6;
TOP (top_value): It is used to delete the top number of rows in the result
set based on top_value. For example, TOP(10) would delete the top 10
rows matching the delete criteria.
Alter usage
ALTER TABLE Student ALTER COLUMN Age VARCHAR (10) NOT NULL;
Current_time(), current_date(),
date_format(date, format)
CREATE TABLE test (
current_date_column DATE,
current_time_column TIME,
current_datetime_column DATETIME
);
values(current_date(), current_time(),now());
FROM orders;
Unique
1. პირველი გზა, თუ როგორ მივანიჭოთ უნიკალური ხარისხი შექმნისას.
product_id int,
price decimal(4, 2)
);
add constraint
unique(price);
product_id INT,
product_name VARCHAR(25),
);
გზა 2:
check
CREATE TABLE employees (
employee_id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE
);
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
);
employee_id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
);
default
1. Default - ად დადების გზა.
product_id int,
product_name varchar(25),
price decimal(4, 2) default 2);
Primary key
ძირითადი გასაღების სვეტები არ შეიძლება შეიცავდეს NULL მნიშვნელობებს .
თითოეულ მწკრივს უნდა ჰქონდეს უნიკალური, არა null მნიშვნელობა პირველადი
გასაღების სვეტებში.
amount decimal(5, 2)
);
add constraint
primary key(transaction_id);
column1 data_type,
column2 data_type,
);
Auto increment
როცა დაემატება ახალი სტრიქონი, ერთით გაიზრდება იმ სვეტში სადაცდადებულია ეს
მოთხოვნა.
amount decimal(5, 2)
);
CREATE TABLE transactions (
transactions_id int IDENTITY(1,1) PRIMARY KEY,
amount decimal(5, 2)
);
AUTO_INCREMENT = 100;
Auto_increment = 100; ნიშნავს რომ 100 იქნება პირველი წევრი, და აქედან გაიზრდება
ერთით.
Foreign key
შევქმენით ერთი ცხრილი და შევიტანეთ მონაცემები.
first_name varchar(50),
last_name varchar(50)
);
customer_id int,
auto_increment = 1000;
on delete
ON DELETE CASCADE:
When a foreign key relationship is defined with ON DELETE
CASCADE, it means that if a record in the parent table is deleted,
all corresponding records in the child table will also be deleted
automatically. In other words, the deletion of a parent record
cascades down to the child records, ensuring referential
integrity.
Here's an example:
Suppose you have two tables, authors and books, where books has
a foreign key referencing the authors table:
If you have a record in the authors table and corresponding
records in the books table, and you delete the author record, all
related book records for that author will be automatically
deleted as well.
Table A Table B
Table A Table B
SELECT *
FROM Salaries
left JOIN Employees ON Salaries.EmployeeID = Employees.EmployeeID;
Salaries are writtern because of firstly it is given and then employees are
accomodated.
Table A Table B
SELECT *
FROM Salaries
right outer JOIN Employees ON Salaries.EmployeeID =
Employees.EmployeeID;
Here first employees are written because this is at the right side and the
salaries are accommodated.
4. Full outer join:
Table A Table B
SELECT
Employees.EmployeeID,
Employees.FirstName,
Employees.LastName,
Employees.Department,
Employees.Position,
Salaries.Salary
FROM
Employees
FULL OUTER JOIN
Salaries ON Employees.EmployeeID = Salaries.EmployeeID;
Here all is written, does not matter which one is taken first.
5. Cross join:
SELECT
FROM
Employees
cross JOIN
Salaries;
6. Self join:
name VARCHAR(255),
supervisor_id INT
);
VALUES
SELECT *
FROM employee AS e1
ON e1.supervisor_id = e2.employee_id;
Case study:
SELECT Employees.FirstName, AVG(Salaries.Salary) AS Average_salary
FROM [Data Analyst Bootcamp].[dbo].Employees
LEFT JOIN [Data Analyst Bootcamp].[dbo].[Salaries]
ON Employees.EmployeeID = Salaries.EmployeeID
WHERE Employees.FirstName != 'Bob'
GROUP BY Employees.FirstName
ORDER BY Average_salary DESC;
Here David is 2 in company and because they are
grouped there is one David and there average.
Functions
რამდენი სტრიქონია.
select count(amount)
from transactions;
from customers;
logical operators(and, or, not)
select * from employees
where not hire_date < "2023-01-5" and not job = "asst. manager";
order by
select * from employees
limit
select * from customers
limit 6;
limit 2, 1;
Union
Syntax:
UNION combines the results of multiple SELECT queries into a single result set, removing
duplicates.
UNION ALL also combines the results of multiple SELECT queries into a single result set, but
it retains all rows, including duplicates.
Example 1:
-- Create CourseA table
CREATE TABLE CourseA (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
CourseName VARCHAR(50)
);
Example 3:
-- Create TableA
CREATE TABLE TableA (
ID INT,
Name VARCHAR(50)
);
-- Create TableB
CREATE TABLE TableB (
ID INT,
Name VARCHAR(50)
);
-- UNION
SELECT * FROM TableA
UNION
SELECT * FROM TableB;
-- UNION ALL
SELECT * FROM TableA
UNION ALL
SELECT * FROM TableB;
Main thing with union is that column numbers must be same and type
must be also same(name is not needed to be the same).
Views
create view employee_attandance as
Indexes
მონაცემის ძებნის პროცესი მიმდინარეობს ჯერ იწყებს პირველი სტრიქონიდან და
ჩადის ბოლოში. ინდექსით კი მხოლოდ ერთ სვეტს ამოწმებს. ეს კარგია როცა დიდი
მონაცემი გვაქვს.
Subquery
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
Example 1:
SELECT FirstName, LastName, Department
FROM Employees
WHERE Department IN (
SELECT Department
FROM Employees
GROUP BY Department
HAVING COUNT(*) > 2
);
Grouped by
ვთქვათ გვაქვს ეს ცხრილი და გვაინტერესებს რა
იყო ჩვენი შემოსავალი თითოეულ თვეს.
მოცემული გვაქვს იანვრის, თებერვლის და
მარტის მონაცემები. იმისთვის რომ ეს
დავთვალოთ უნდა გამოვიყენოთ:
from transactions
group by order_date;
from transactions
group by customer_id;
from transactions
group by customer_id
rollup
select sum(amount), order_date
from transactions
from transactions
stored procedures
Example 1:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
INSERT INTO Employees (EmployeeID, FirstName, LastName,
Department)
VALUES
(1, 'John', 'Doe', 'IT'),
(2, 'Jane', 'Smith', 'HR'),
(3, 'Michael', 'Johnson', 'Finance'),
(4, 'Emily', 'Williams', 'Marketing'),
(5, 'William', 'Brown', 'IT'),
(6, 'Emma', 'Jones', 'Finance'),
(7, 'Olivia', 'Garcia', 'Marketing'),
(8, 'James', 'Martinez', 'HR');
Example 2:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY identity(100,1),
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
INSERT INTO Employees (FirstName, LastName, Department)
VALUES
('John', 'Doe', 'IT'),
('Jane', 'Smith', 'HR'),
('Michael', 'Johnson', 'Finance'),
('Emily', 'Williams', 'Marketing'),
('William', 'Brown', 'IT'),
('Emma', 'Jones', 'Finance'),
('Olivia', 'Garcia', 'Marketing'),
('James', 'Martinez', 'HR');
EXEC InsertEmployee
@FirstName = 'nick',
@LastName = 'kordzakhia',
@Department = 'data science';
Example 3:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
EXEC InsertEmployee
@FirstName = 'Nick',
@LastName = 'Kordzakhia',
@Department = 'Data Science';
triggers
CREATE TABLE employees (
first_name VARCHAR(50),
last_name VARCHAR(50),
annual_salary DECIMAL(10, 2)
);
update employees
ამის შემდეგ მე მინდა რომ როცა შეიცვლება ერთი სვეტის ერთი უჯრა ავტომატურად
შეიცვალოს შედეგი. ანუ თუ შევცვლი annual_salary-ს უნდა შეიცვალოს daily_pay.
update employees
where employee_id = 8;
update employees
update expanses
update expanses
update expenses
update expanses
Case
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50),
Salary DECIMAL(10, 2)
);
SELECT *,
CASE
WHEN Salary >= 60000.00 THEN 'High Salary'
WHEN Salary >= 55000.00 THEN 'Medium Salary'
ELSE 'Low Salary'
END AS SalaryCategory,
CASE
WHEN Department = 'HR' THEN 'Human Resources'
WHEN Department = 'Marketing' THEN 'Marketing Department'
WHEN Department = 'Finance' THEN 'Financial Department'
WHEN Department = 'IT' THEN 'Information Technology'
ELSE 'Other Department'
END AS DepartmentName,
CASE
WHEN FirstName = 'John' THEN 'Senior Employee'
WHEN FirstName = 'Jane' THEN 'Experienced Employee'
ELSE 'New Employee'
END AS EmployeeType
FROM Employees;
SELECT
*,
Salary * 0.1 AS Bonus, -- Assuming bonus is 10% of the salary
CASE
WHEN Salary >= 60000.00 THEN Salary * 0.3 -- 30% tax for high earners
WHEN Salary >= 55000.00 THEN Salary * 0.25 -- 25% tax for medium
earners
ELSE Salary * 0.2 -- 20% tax for low earners
END AS TaxDeduction,
Salary + (Salary * 0.1) -
CASE
WHEN Salary >= 60000.00 THEN Salary * 0.3
WHEN Salary >= 55000.00 THEN Salary * 0.25
ELSE Salary * 0.2
END AS NetSalary
FROM Employees;
Aliansing
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
Gender NVARCHAR(10),
DateOfBirth DATE,
Address NVARCHAR(100),
PhoneNumber NVARCHAR(15),
Email NVARCHAR(100),
JobTitle NVARCHAR(50)
);
CREATE TABLE Salaries (
SalaryID INT PRIMARY KEY,
EmployeeID INT FOREIGN KEY REFERENCES Employees(EmployeeID),
Salary DECIMAL(10, 2),
EffectiveDate DATE
);
-- Inserting data into Employees table
INSERT INTO Employees (EmployeeID, FirstName, LastName, Gender,
DateOfBirth, Address, PhoneNumber, Email, JobTitle)
VALUES
(1, 'John', 'Doe', 'Male', '1990-05-15', '123 Main St, Anytown, USA', '123-
456-7890', 'john.doe@example.com', 'Manager'),
(2, 'Jane', 'Smith', 'Female', '1995-08-25', '456 Elm St, Anytown, USA',
'987-654-3210', 'jane.smith@example.com', 'Software Engineer'),
(3, 'Michael', 'Johnson', 'Male', '1987-12-10', '789 Oak St, Anytown, USA',
'555-123-4567', 'michael.johnson@example.com', 'HR Specialist'),
(4, 'Emily', 'Brown', 'Female', '1992-03-20', '101 Pine St, Anytown, USA',
'111-222-3333', 'emily.brown@example.com', 'Accountant'),
(5, 'David', 'Wilson', 'Male', '1985-06-30', '202 Cedar St, Anytown, USA',
'444-555-6666', 'david.wilson@example.com', 'Marketing Specialist'),
(6, 'Jessica', 'Taylor', 'Female', '1993-09-05', '303 Maple St, Anytown,
USA', '777-888-9999', 'jessica.taylor@example.com', 'Sales Manager'),
(7, 'Christopher', 'Anderson', 'Male', '1989-11-12', '404 Birch St,
Anytown, USA', '666-777-8888', 'christopher.anderson@example.com', 'Data
Analyst'),
(8, 'Amanda', 'Martinez', 'Female', '1991-04-18', '505 Walnut St, Anytown,
USA', '222-333-4444', 'amanda.martinez@example.com', 'Customer Service
Representative'),
(9, 'Matthew', 'Hernandez', 'Male', '1986-07-25', '606 Pineapple St,
Anytown, USA', '999-111-2222', 'matthew.hernandez@example.com', 'Project
Manager'),
(10, 'Samantha', 'Garcia', 'Female', '1994-10-08', '707 Peach St, Anytown,
USA', '888-999-0000', 'samantha.garcia@example.com', 'Quality Assurance
Tester');
Partition By
select a.Gender,
Count(Gender)
from Employees as a
join Salaries as b
on a.EmployeeID =
b.EmployeeID
group by Gender
CTE
with CTE as
(SELECT
*,
CASE
WHEN Exit_Date IS NOT NULL THEN DATEDIFF(YEAR, Hire_Date, Exit_Date)
ELSE DATEDIFF(YEAR, Hire_Date, GETDATE())
END AS SPAN
--CASE
-- WHEN SPAN BETWEEN 0 AND (MAX(SPAN) - MIN(SPAN)) / 3 THEN 'NEW'
-- WHEN SPAN Between (MAX(SPAN) - MIN(SPAN))/3 and (MAX(SPAN) -
MIN(SPAN))/3*2 then 'EXPERIENCED'
-- WHEN SPAN between (MAX(SPAN) - MIN(SPAN))/3*2 and max(SPAN) THEN
'VETERAN'
-- end as status
FROM
[Case Study].[dbo].[Employee Sample Data])
select *,
CASE
WHEN SPAN BETWEEN 0 AND (select(MAX(SPAN) - MIN(SPAN))from CTE) /
3 THEN 'NEW'
WHEN SPAN Between (select(MAX(SPAN) - MIN(SPAN))from CTE)/3 and
(select(MAX(SPAN) - MIN(SPAN))from CTE)/3*2 then 'EXPERIENCED'
WHEN SPAN between (select(MAX(SPAN) - MIN(SPAN))from CTE)/3*2 and
(SELECT max(SPAN) from CTE) THEN 'VETERAN'
end as status
from CTE
Here what we are selecting is imaginary and when we create imaginary columns we can not
use them. What is in comment is usage of imaginary column “SPAN”, so it is mistake.
With statement gives us opportunity to use imaginary columns and what is created under
“with” is not saved in disk but is method of using imaginary columns.
TempTable
drop table if exists ##Emp_Sal
create table ##Emp_Sal (
Full_Name varchar(50),
Annual_Salary varchar(50)
)
insert into ##Emp_Sal
select Full_Name, Annual_Salary from [Employee Sample Data]