-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathhw_10.sql
More file actions
307 lines (225 loc) · 7.54 KB
/
Copy pathhw_10.sql
File metadata and controls
307 lines (225 loc) · 7.54 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
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
/* ---------- TASK 1 ---------- */
CREATE TABLE locations2 AS (SELECT * FROM locations WHERE 1=2);
SELECT * FROM locations2;
/* ---------- TASK 2 ---------- */
INSERT INTO locations2 (location_id, street_address, city, country_id) (
SELECT location_id, street_address, city, country_id FROM locations
WHERE country_id = (
SELECT country_id FROM countries
WHERE country_name = 'Italy'
)
);
ROLLBACK;
INSERT INTO locations2 (location_id, street_address, city, country_id)
VALUES (3300, '1314 Sezam', 'Milan', 'IT');
INSERT INTO locations2 (location_id, street_address, city, country_id)
VALUES (3400, '1516 Pushkin', 'Turin', 'IT');
/* ---------- TASK 3 ---------- */
COMMIT;
/* ---------- TASK 4 ---------- */
INSERT INTO locations2
VALUES (3500, '1718 De Golle', 12345, INITCAP('paris'),
'Some province 1', UPPER('fr'));
INSERT INTO locations2
VALUES (3600, '1920 Jules Verne', 67890, INITCAP('lion'),
'Some province 2', UPPER('fr'));
/* ---------- TASK 5 ---------- */
COMMIT;
/* ---------- TASK 6 ---------- */
INSERT INTO locations2
(SELECT * FROM locations WHERE LENGTH(state_province) > 9);
/* ---------- TASK 7 ---------- */
COMMIT;
/* ---------- TASK 8 ---------- */
CREATE TABLE locations4europe AS (SELECT * FROM locations WHERE 1=2);
SELECT * FROM locations4europe;
/* ---------- TASK 9 ---------- */
INSERT ALL
WHEN 1=1 THEN
INTO locations2
VALUES (location_id, street_address, postal_code,
city, state_province, country_id)
WHEN country_id IN (
SELECT country_id FROM countries
WHERE region_id = (
SELECT region_id FROM regions
WHERE region_name = 'Europe'
)
) THEN
INTO locations4europe (location_id, street_address, city, country_id)
VALUES (location_id, street_address, city, country_id)
SELECT * FROM locations;
/* ---------- TASK 10 ---------- */
COMMIT;
/* ---------- TASK 11 ---------- */
UPDATE locations2 SET postal_code = 77777
WHERE postal_code IS NULL;
SELECT * FROM locations2 WHERE postal_code IS NULL;
SELECT * FROM locations2;
/* ---------- TASK 12 ---------- */
ROLLBACK;
/* ---------- TASK 13 ---------- */
UPDATE locations2 SET postal_code =
(SELECT postal_code FROM locations WHERE location_id = 2600)
WHERE postal_code IS NULL;
/* ---------- TASK 14 ---------- */
COMMIT;
/* ---------- TASK 15 ---------- */
DELETE FROM locations2 WHERE country_id = 'IT';
/* ---------- TASK 16 ---------- */
SAVEPOINT sp1;
/* ---------- TASK 17 ---------- */
UPDATE locations2 SET street_address = 'Sezam st. 18'
WHERE location_id > 2500;
/* ---------- TASK 18 ---------- */
SAVEPOINT sp2;
/* ---------- TASK 19 ---------- */
DELETE FROM locations2 WHERE street_address = 'Sezam st. 18';
/* ---------- TASK 20 ---------- */
ROLLBACK TO SAVEPOINT sp1;
/* ---------- TASK 21 ---------- */
COMMIT;
/* -------------------------------------------------------------------------- */
SELECT * FROM employees;
SELECT * FROM countries;
INSERT INTO countries VALUES('SE', 'Sweden', 1);
INSERT INTO countries (region_id, country_name, country_id)
VALUES(1, 'Greece', 'GR');
INSERT INTO countries (country_id, country_name, region_id)
VALUES('NO', 'Norway', 1);
INSERT INTO countries (country_id, country_name)
VALUES('PO', 'Portugal');
INSERT INTO countries (country_id, country_name, region_id)
VALUES('NO', 'Norway', 1);
INSERT INTO countries (country_id, country_name, region_id)
VALUES('FI', 'Finland', null);
INSERT INTO countries (country_id, country_name, region_id)
VALUES('HR', 'Croatia', 5);
SELECT * FROM employees;
INSERT INTO employees (employee_id, last_name, email, hire_date, job_id)
VALUES (210, 'Radionov', 'RADIONOV', '29-APR-2023', 'IT_PROG');
INSERT INTO employees (employee_id, last_name, email, hire_date, job_id)
VALUES (
211,
INITCAP('radionov'),
UPPER('radionov1'),
TO_DATE('29-APR-2023', 'DD-MON-YYYY'),
UPPER('it_prog')
);
INSERT INTO employees (employee_id, last_name, email, hire_date, job_id)
VALUES (
200 + 12,
INITCAP('radionov'),
UPPER('radionov2'),
SYSDATE,
UPPER('it_prog')
);
CREATE TABLE new_emps (
emp_id integer,
name varchar2(20),
start_date date,
job varchar2(10)
);
SELECT * FROM new_emps;
INSERT INTO new_emps (emp_id, name, start_date)
(SELECT employee_id, first_name, hire_date FROM employees
WHERE employee_id > 200);
INSERT INTO new_emps
(SELECT employee_id, first_name, hire_date, job_id FROM employees
WHERE employee_id > 200);
CREATE TABLE emps_with_high_salary (
name varchar2(20),
salary integer
);
CREATE TABLE emps_with_dep_100 (
name varchar2(20),
salary integer
);
CREATE TABLE some_emps (
name varchar2(20),
salary integer
);
INSERT ALL
WHEN department_id = 100 THEN
INTO emps_with_dep_100 VALUES (first_name, salary)
WHEN salary > 15000 THEN
INTO emps_with_high_salary (name) VALUES (last_name)
WHEN 5 = 5 THEN
INTO some_emps (name, salary) VALUES (first_name, salary)
SELECT first_name, last_name, salary, department_id
FROM employees WHERE LENGTH(first_name) > 5;
SELECT * FROM emps_with_dep_100;
SELECT * FROM emps_with_high_salary;
SELECT * FROM some_emps;
SELECT * FROM employees;
UPDATE employees SET salary = 10000 WHERE employee_id = 100;
UPDATE employees SET salary = salary * 2 WHERE employee_id = 100;
UPDATE employees SET salary = 24000, job_id = 'AD_PRES' WHERE employee_id = 100;
UPDATE employees SET salary = 27000, job_id = 'IT_PROG' WHERE employee_id = 100;
UPDATE employees SET salary = 8000 WHERE employee_id < 105;
UPDATE employees SET salary = 100;
UPDATE employees SET salary = 5000 WHERE department_id = (
SELECT department_id FROM departments
WHERE department_name = 'Marketing'
);
UPDATE employees SET salary = (SELECT MAX(salary) FROM employees),
hire_date = (SELECT MIN(start_date) FROM job_history)
WHERE employee_id = 180;
SELECT * FROM new_emps;
DELETE FROM new_emps;
INSERT INTO new_emps
(SELECT employee_id, first_name, hire_date, job_id FROM employees);
DELETE FROM new_emps WHERE emp_id = 210;
DELETE FROM new_emps WHERE job LIKE '%CLERK%' OR name IS NULL;
DELETE FROM new_emps WHERE job IN (
SELECT DISTINCT job_id FROM employees
WHERE department_id IN (
SELECT department_id FROM departments
WHERE manager_id = 100
)
);
SELECT * FROM new_emps;
SELECT * FROM employees;
INSERT INTO new_emps (
SELECT employee_id, first_name, hire_date, job_id
FROM employees
WHERE employee_id < 110
);
MERGE INTO new_emps ne
USING employees e
ON (ne.emp_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET ne.start_date = SYSDATE
DELETE WHERE ne.job LIKE '%IT%'
WHEN NOT MATCHED THEN
INSERT (emp_id, name, start_date, job)
VALUES (employee_id, first_name, hire_date, job_id);
COMMIT;
DELETE FROM new_emps;
INSERT INTO new_emps
(SELECT employee_id, last_name, hire_date, job_id FROM employees);
COMMIT;
SELECT * FROM new_emps;
DELETE FROM new_emps WHERE name = 'Radionov';
ROLLBACK;
INSERT INTO new_emps VALUES (1000, 'Igor', sysdate, 'IT_PROG');
UPDATE new_emps SET emp_id = 300 WHERE emp_id = 100;
DELETE FROM new_emps WHERE emp_id = 101;
ROLLBACK;
INSERT INTO new_emps VALUES (1000, 'Igor', sysdate, 'IT_PROG');
SAVEPOINT s1;
UPDATE new_emps SET emp_id = 300 WHERE emp_id = 100;
SAVEPOINT s2;
DELETE FROM new_emps WHERE emp_id = 101;
ROLLBACK TO SAVEPOINT s2;
ROLLBACK TO SAVEPOINT s1;
SELECT * FROM new_emps FOR UPDATE;
UPDATE new_emps SET emp_id = 1500 WHERE emp_id = 104;
COMMIT;
SELECT * FROM new_emps WHERE emp_id > 900;
SELECT * FROM new_emps;
UPDATE new_emps SET emp_id = 400 WHERE emp_id = 106;
COMMIT;
UPDATE new_emps SET emp_id = 250 WHERE name = 'Igor';
COMMIT;
/* -------------------------------------------------------------------------- */