-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathT10.sql
More file actions
230 lines (173 loc) · 6.74 KB
/
T10.sql
File metadata and controls
230 lines (173 loc) · 6.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
DROP TABLE IF EXISTS Employee;
DROP TABLE IF EXISTS Departments;
-- jak to
-- DAta Definition Language DDL
-- CREATE, ALTER DROP
-- KEYS
-- BUSINESS RULES - CONSTRAAINTS, UNIQUE , CHECK
CREATE TABLE Departments
(
departmentId INT NOT NULL AUTO_INCREMENT,
depName VARCHAR(100) ,
city VARCHAR(200) ,
PRIMARY KEY (departmentId),
UNIQUE (depName, city)
);
-- we use UNIQUE every time is AK
CREATE TABLE Employee(
employeeId INT NOT NULL AUTO_INCREMENT,
departmentId INT,
bossId INT ,
empName VARCHAR(100) NOT NULL UNIQUE ,
salary DECIMAL(6,2) DEFAULT 2000.00,
startDate DATE ,
endDate DATE ,
commission DOUBLE ,
PRIMARY KEY (employeeId),
FOREIGN KEY (departmentId) REFERENCES Departments(departmentId) ON DELETE CASCADE ,
FOREIGN KEY (bossId) REFERENCES Employee(employeeId) ON DELETE CASCADE ,
CONSTRAINT Check_Dates CHECK ( startDate < Employee.endDate ),
CHECK ( commission BETWEEN 0 and 1)
);
-- DML Data Modification Languafe
-- INSERT INTO
INSERT INTO Departments(depName, city) VALUES ('History', NULL);
INSERT INTO Departments(depName, city) VALUES ('Computers', 'Sevilla');
INSERT INTO Departments(depName, city) VALUES ('Arts', 'Cadiz');
/*DUplicated Values */
# to nie ma bledu
INSERT INTO Departments (depName, city) VALUES ('History', NULL);
-- to ma, bo jest zduplikowane i depName i city
-- INSERT INTO Departments(depName, city) VALUES ('Computers', 'Sevilla');
/* Inserts into employees */
INSERT INTO Employee(departmentId, bossId, empName, salary, startDate, endDate, commission)
VALUES (1, NULL, 'Pedro', 2300.00, '2017-09-15', NULL, 0.2);
/* José at History*/
INSERT INTO Employee(departmentId, bossId, empName, salary, startDate, endDate, commission)
VALUES (1, NULL, 'José', 2500.00, '2018-08-15', NULL, 0.5);
/* Lola at Computers */
INSERT INTO Employee(departmentId, bossId, empName, salary, startDate, endDate, commission)
VALUES (2, NULL, 'Lola', 2300.00, '2018-08-15', NULL, 0.3);
/* Luis worked for Pedro for 3 months */
INSERT INTO Employee(departmentId, bossId, empName, salary, startDate, endDate, commission)
VALUES (1, 1, 'Luis', 1300.00, '2018-08-15', '2018-11-15', 0);
INSERT INTO Employee(departmentId, bossId, empName, salary, startDate, endDate, commission)
VALUES (1, 1, 'Ana', 1300.00, '2018-08-15', '2018-11-15', 0);
/*MISTAKES */
-- Mamy aktualnie 4 rozne departments wiec przyps żeby uzyc piątego
/*
INSERT INTO Employee(departmentId, bossId, empName, salary, startDate, endDate, commission)
VALUES (5, null, 'Manuel', 2300.00, '2017-08-15', NULL, 0.6)
*/
-- UPDATE
UPDATE Employee SET salary = '2500.00' WHERE employeeId = 1;
UPDATE Employee SET endDate = '2019-08-15' WHERE employeeId = 2;
UPDATE Departments SET depName = 'History' WHERE departmentId = 1;
UPDATE Departments SET city = 'Cadiz' WHERE departmentId = 4;
-- UPDATE Departments SET city = 'Sevilla' WHERE departmentId = 4;
-- DELETE
-- DELETE FROM Departments WHERE departmentId = 1;
/* ON DELETE SET NULL */
-- Mamy ustawione na
-- FOREIGN KEY (departmentId) REFERENCES Departments(departmentId) ON DELETE SET NULL ,
-- bez tego nie da sie usunąc
-- teraz usunelo z Departments department 1
-- ale w employy ustawilo nulle tam gdzie byla 1
/* ON DELETE CASCADE */
-- USUWA WSZYSTKO
-- musi być ON DELETE ustawione dla wszystkiego co będzie
-- dotyczyć
-- co robi cascade i czemu nie da sie usunac gdzie jest history = NULL
-- MUSI być ustawione ON DELETE CASCADE dla
-- dla FK(departmentId) i (bossId)
--
-- Data Query Language
-- SELECT
--
-- SELECT
-- kolumny empName, salary , gdy salary <2000 - wszystko z jednej table
SELECT empName, salary FROM Employee WHERE salary <2000;
-- wyswietla wszystkie kolumny z danej table
SELECT * FROM Employee WHERE salary <2000;
-- SELECT ALL & DISTINCT
-- distinct nie daje powtorek
SELECT ALL startDate,endDate FROM Employee;
SELECT DISTINCT startDate, endDate FROM Employee;
-- Between
SELECT DISTINCT empName, salary FROM Employee WHERE salary >= 2000 AND salary <= 3000;
SELECT DISTINCT empName, salary FROM Employee WHERE salary BETWEEN 2000 AND 3000;
-- SELECT IN
SELECT DISTINCT empName, salary FROM Employee WHERE salary IN (1000,2300, 3000);
-- SELECT LIKE
-- '_o' - konczy sie na o
-- % - represents 0 or more character
-- _ - represents single character
-- [ab] a or b
-- [^ab] not a i not b
-- [a-b] range from a to b
-- # any single nr
-- a%, %a %or% '_r%' (ssecond posoition) 'a___%' - has at least 3 charakters after a
SELECT * FROM Employee WHERE empName LIKE '_o%' OR bossId IS NULL;
-- SELECT ORDER BY
SELECT * FROM Employee ORDER BY departmentId, empName;
-- SELECT (cartensian product)
-- every possible combintaation of involved relations
SELECT * FROM Employee, Departments;
-- SELECT (NATURAL JOIN )
-- jaakby czesc wspolna
SELECT empName, salary, startDate, depName FROM Employee E, Departments D
WHERE E.departmentId = D.departmentId;
SELECT empName, salary, startDate, depName FROM Employee NATURAL JOIN Departments;
UPDATE Employee SET departmentId= NULL WHERE employeeId= 5;
SELECT empName, salary, startDate, depName
FROM Employee E RIGHT JOIN Departments D ON E.departmentId = D.departmentId;
-- SELECT UNION - łączy
SELECT * From Employee E LEFT JOIN Departments D ON E.departmentId = D.departmentId
UNION
SELECT * FROM Employee E RIGHT JOIN Departments D on D.departmentId = E.departmentId ;
-- SELECT WHERE NOT EXST
SELECT * FROM Departments D WHERE NOT EXISTS(
SELECT * FROM Employee E
WHERE D.departmentId = E.departmentId
);
SELECT * FROM Departments D WHERE EXISTS(
SELECT * FROM Employee E
WHERE D.departmentId = E.departmentId
);
-- COMPLEX QUIERIES
-- COUNT
-- number of rowes or values specidien
SELECT COUNT(*), MIN(salary), MAX(salary), AVG(salary), SUM(salary) FROM Employee;
-- GROUP BY
SELECT departmentId, COUNT (*) , AVG(salary) salaryMedio,
AVG(salary * (1+commission)) salaryConcomision,
SUM(salary) sumasalary
FROM Employee
GROUP BY departmentId;
-- HAVING
SELECT departmentId, COUNT(*),
AVG(salary) salaryMedio, AVG(salary * (1+commission)) salaryConcommission, SUM(salary) gastosalarys
FROM Employee
GROUP BY departmentId HAVING COUNT(*)>1;
-- ALL ANY
SELECT departmentId FROM Employee
GROUP BY departmentId HAVING COUNT(*)>= ALL
( SELECT COUNT(*)
FROM Employee
GROUP BY departmentId );
/* Option 2 */
SELECT departmentId FROM Employee GROUP BY departmentId HAVING COUNT(*) =
( SELECT MAX(total) FROM
( SELECT COUNT(*) AS total
FROM Employee
GROUP BY departmentId ) NumEmployees );
-- VIEWS
CREATE OR REPLACE VIEW EmployeeStats AS
SELECT departmentId,
COUNT(*) AS numEmployess,
AVG(salary) salaryMedio,
AVG(salary * (1+ commission)) salaryConCommission,
SUM(salary) suma
FROM Employee
GROUP BY departmentId;
SELECT MAX(numEmployess) FROM EmployeeStats;