Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ALTER TABLE Employee MODIFY (EMP_ID NULL)
  2.  
  3. ALTER TABLE department ADD CONSTRAINT dep_chief_dep_id_FK Foreign KEY (dep_chief_dep_id) references department (dep_id)
  4.  
  5. ALTER TABLE employee ADD CONSTRAINT dep_id_FK Foreign KEY (emp_dep_id) references department (dep_id)
  6.  
  7. ALTER TABLE department ADD CONSTRAINT emp_manager_id_FK Foreign KEY (dep_manager_id) references employee (emp_id)
  8.  
  9. ALTER TABLE employee ADD CONSTRAINT salary_ck1 CHECK (EMP_SALARY > 14000)
  10.  
  11. DESC employee
  12. EMP_ID, EMP_FIRST_NAME, EMP_LAST_NAME,  EMP_SALARY, EMP_POSITION, EMP_BIRTH_DATE, EMP_JOIN_DATE, EMP_DEP_ID
  13. DESC department
  14.  
  15. CREATE TABLE department
  16. (dep_id NUMBER PRIMARY KEY,
  17. dep_name VARCHAR2(50) NOT NULL,
  18. dep_manager_id NUMBER,
  19. dep_chief_dep_id NUMBER
  20. references department (dep_id)
  21. )
  22. SELECT constraint_name, table_name FROM user_constraints WHERE table_name = 'EMPLOYEE' OR table_name = 'DEPARTMENT'
  23.  
  24. CREATE TABLE Employee
  25. (
  26. emp_id NUMBER PRIMARY KEY,
  27. emp_first_name VARCHAR2(50) NOT NULL,
  28. emp_last_name VARCHAR2(50) NOT NULL,
  29. emp_salary NUMBER,
  30. emp_position VARCHAR2(50),
  31. emp_birth_date DATE NOT NULL,
  32. emp_join_date DATE,
  33. emp_dep_id NUMBER,
  34. CONSTRAINT salary_ck1
  35. CHECK (emp_salary>14000)
  36. )
  37.  
  38.  
  39. CREATE TABLE Project
  40. (
  41. prj_id NUMBER PRIMARY KEY,
  42. prj_name VARCHAR2(50) NOT NULL,
  43. prj_start_date DATE,
  44. prj_finish_date DATE,
  45. prj_manager_id NUMBER
  46. references Employee (emp_id)
  47. )
  48. ALTER TABLE Project MODIFY (PRJ_NAME VARCHAR2(50))
  49.  
  50. CREATE TABLE rel_prj_emp
  51. (
  52. rel_emp_id NUMBER references Employee (emp_id),
  53. rel_prj_id NUMBER references Project (prj_id),
  54. PRIMARY KEY (rel_emp_id, rel_prj_id)
  55. )
  56.  
  57. DESC rel_prj_emp
  58. DESC project
  59. PRJ_ID, PRJ_NAME, PRJ_START_DATE, PRJ_FINISH_DATE, PRJ_MANAGER_ID
  60.  
  61. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (01, 'Администрация', NULL, NULL);
  62. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (01, 'Администрация', NULL, NULL);
  63. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (03, 'Разработки', NULL, 1);
  64. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (05, 'Бухгалтерия', NULL, 1);
  65. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (02, 'Отдел кадров', NULL, 5);
  66. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (04, 'Тестирования', NULL, 3);
  67.  
  68. SELECT * FROM Department
  69.  
  70. UPDATE Department SET DEP_MANAGER_ID = 1 WHERE dep_id = 1;
  71. UPDATE Department SET DEP_MANAGER_ID = 5 WHERE dep_id = 2;
  72. UPDATE Department SET DEP_MANAGER_ID = 4 WHERE dep_id = 3;
  73. UPDATE Department SET DEP_MANAGER_ID = 3 WHERE dep_id = 4;
  74. UPDATE Department SET DEP_MANAGER_ID = 17 WHERE dep_id = 5;
  75.  
  76. SELECT constraint_name, table_name FROM user_constraints WHERE table_name = 'EMPLOYEE' OR table_name = 'DEPARTMENT' AND constraint_type <> 'P'
  77. SELECT constraint_name, table_name, constraint_type FROM user_constraints WHERE table_name = 'EMPLOYEE' AND constraint_type <> 'P' OR table_name = 'DEPARTMENT' AND constraint_type <> 'P'
  78.  
  79. SELECT * FROM PROJECT
  80. DESC project
  81. SELECT * FROM department
  82. SELECT * FROM employee
  83.  
  84. UPDATE Department SET dep_manager_id = 1 WHERE DEP_ID = 1;
  85.  
  86. SELECT *
  87. FROM
  88. WHERE
  89. GROUP BY - группировка
  90. HAVING - групповое условие
  91. ORDER BY - группировка
  92.  
  93. SELECT DISTINCT EMP_FIRST_NAME, EMP_LAST_NAME FROM Employee
  94.  
  95. SELECT emp_salary*0.1, emp_first_name, emp_last_name FROM Employee
  96. SELECT emp_salary*0.1 AS Премия, emp_first_name, emp_last_name FROM Employee WHERE emp_position = 'менеджер'
  97.  
  98. ---------------------------
  99. ----18 октября-------------
  100. ---------------------------
  101.  
  102. SELECT emp_first_name, emp_last_name, 'Получит ', emp_salary*0.25 AS Бонус FROM employee
  103. SELECT emp_first_name || ' ' || emp_last_name || ' получит ' || emp_salary*0.25 AS Бонус FROM employee
  104.  
  105. --Всех с зп больше 70 тысяч местных единиц
  106. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_salary FROM employee WHERE emp_salary > 70000
  107.  
  108. --Вывод менеджеров и бухгалтеров
  109. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position = 'менеджер' OR emp_position = 'бухгалтер'
  110.  
  111. --Вывод менеджеров с зп больше 60 тыс. местных единиц
  112. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность, emp_salary AS Зарплата FROM employee WHERE emp_position = 'менеджер' AND emp_salary > 60000
  113.  
  114. --Вывод сотрудников, дата поступления на который позже 1 января 2015 года
  115. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, EMP_JOIN_DATE AS дата_на_работу FROM Employee WHERE TO_CHAR(EMP_JOIN_DATE, 'YYYY') >= 2015
  116. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, EMP_JOIN_DATE AS дата_на_работу FROM Employee WHERE EMP_JOIN_DATE >= '1/1/2015'
  117.  
  118. --Вывод сотрудников с зп от 50 тыс. до 80 тыс. местных единиц
  119. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_salary FROM employee WHERE emp_salary > 50000 AND emp_salary < 80000
  120. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_salary FROM employee WHERE emp_salary BETWEEN 50000 AND 80000
  121.  
  122. --Вывод отдела, которые подчиняются не одному отделу
  123. SELECT DEP_NAME FROM Department WHERE DEP_CHIEF_DEP_ID IS NULL
  124.  
  125. --Сотрудники, менеджеры, программисты и бухгалтеры
  126. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position = 'менеджер' OR emp_position = 'бухгалтер' OR emp_position = 'программист'
  127. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position IN ('менеджер', 'бухгалтер', 'программист')
  128.  
  129. --Не забываем про главбуха
  130. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position IN ('менеджер', 'программист') OR emp_position LIKE '%бухгалтер'
  131. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position LIKE '%бухгалтер'
  132.  
  133. --Фамилии на -ОВ
  134. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_last_name LIKE '%ов'
  135.  
  136. -Есть Р и на -ОВ Фамилии
  137. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_last_name LIKE '%р%ов'
  138.  
  139. -Есть Р и на -ОВ Фамилии
  140.  
  141. --Есть "Иван" подтекст в фамилии и имени
  142. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_last_name LIKE '%Иван%' OR emp_first_name LIKE '%Иван%' OR emp_last_name LIKE '%иван%' OR emp_first_name LIKE '%иван%'
  143.  
  144. ------------------------
  145. --25 октября 2019-------
  146. ------------------------
  147.  
  148. --МНОГОТАБЛИЧНЫЕ ЗАПРОСЫ
  149. --Имя сотрудника и их отделы, где работают
  150. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee, Department WHERE emp_dep_id = dep_id;
  151.  
  152. --Имя отдела и их руководителей
  153. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee, Department WHERE emp_id = dep_manager_id;
  154. SELECT dep_name AS Отдел, emp_first_name||' '||emp_last_name AS Фамилия_Имя_Руководителя FROM Employee, Department WHERE emp_id = dep_manager_id;
  155.  
  156. --Имя проекта и их участники
  157. SELECT PRJ_NAME AS Проект, emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника FROM Project, Employee, REL_PRJ_EMP WHERE EMP_ID = REL_EMP_ID AND REL_PRJ_ID = PRJ_ID;
  158.  
  159. SELECT dep_name AS НАЗВАНИЕ_ОТДЕЛА, dep_name AS НАЗВ_ПОДЧИН_ОТДЕЛА FROM department WHERE НАЗВАНИЕ_ОТДЕЛА IN (SELECT dep_name FROM department WHERE dep_id IN (SELECT DEP_ID FROM department)) AND НАЗВ_ПОДЧИН_ОТДЕЛА IN
  160. (SELECT dep_name FROM department WHERE dep_id IN (SELECT DEP_chief_dep_id FROM department))
  161.  
  162. --Имя отдела и его подчинение
  163. SELECT D1.dep_name, D2.dep_name FROM department D1, department D2 WHERE D1.dep_chief_dep_id = d2.dep_id (+)
  164.  
  165. --Через джоины
  166.  
  167. SELECT t1.dep_name AS Назв_отдела, t2.dep_name AS назв_подч_отдела
  168. FROM department t1
  169. left join
  170. department t2 ON (t1.dep_chief_dep_id  = t2.dep_id)
  171.  
  172. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee inner join Department ON emp_dep_id = dep_id;
  173.  
  174. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee inner join Department ON (emp_id = dep_manager_id);
  175.  
  176. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee inner join Department ON emp_id = dep_manager_id;
  177.  
  178. -----------------------------
  179. --01 ноября 2019 года -------
  180. -----------------------------
  181.  
  182. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника, PRJ_NAME AS Проект FROM Project inner join REL_PRJ_EMP ON REL_PRJ_ID = PRJ_ID inner join Employee ON EMP_ID = REL_EMP_ID;
  183.  
  184. ALTER TABLE Employee MODIFY (EMP_ID NULL)
  185.  
  186. ALTER TABLE department ADD CONSTRAINT dep_chief_dep_id_FK Foreign KEY (dep_chief_dep_id) references department (dep_id)
  187.  
  188. ALTER TABLE employee ADD CONSTRAINT dep_id_FK Foreign KEY (emp_dep_id) references department (dep_id)
  189.  
  190. ALTER TABLE department ADD CONSTRAINT emp_manager_id_FK Foreign KEY (dep_manager_id) references employee (emp_id)
  191.  
  192. ALTER TABLE employee ADD CONSTRAINT salary_ck1 CHECK (EMP_SALARY > 14000)
  193.  
  194. DESC employee
  195. EMP_ID, EMP_FIRST_NAME, EMP_LAST_NAME,  EMP_SALARY, EMP_POSITION, EMP_BIRTH_DATE, EMP_JOIN_DATE, EMP_DEP_ID
  196. DESC department
  197.  
  198. CREATE TABLE department
  199. (dep_id NUMBER PRIMARY KEY,
  200. dep_name VARCHAR2(50) NOT NULL,
  201. dep_manager_id NUMBER,
  202. dep_chief_dep_id NUMBER
  203. references department (dep_id)
  204. )
  205. SELECT constraint_name, table_name FROM user_constraints WHERE table_name = 'EMPLOYEE' OR table_name = 'DEPARTMENT'
  206.  
  207. CREATE TABLE Employee
  208. (
  209. emp_id NUMBER PRIMARY KEY,
  210. emp_first_name VARCHAR2(50) NOT NULL,
  211. emp_last_name VARCHAR2(50) NOT NULL,
  212. emp_salary NUMBER,
  213. emp_position VARCHAR2(50),
  214. emp_birth_date DATE NOT NULL,
  215. emp_join_date DATE,
  216. emp_dep_id NUMBER,
  217. CONSTRAINT salary_ck1
  218. CHECK (emp_salary>14000)
  219. )
  220.  
  221.  
  222. CREATE TABLE Project
  223. (
  224. prj_id NUMBER PRIMARY KEY,
  225. prj_name VARCHAR2(50) NOT NULL,
  226. prj_start_date DATE,
  227. prj_finish_date DATE,
  228. prj_manager_id NUMBER
  229. references Employee (emp_id)
  230. )
  231. ALTER TABLE Project MODIFY (PRJ_NAME VARCHAR2(50))
  232.  
  233. CREATE TABLE rel_prj_emp
  234. (
  235. rel_emp_id NUMBER references Employee (emp_id),
  236. rel_prj_id NUMBER references Project (prj_id),
  237. PRIMARY KEY (rel_emp_id, rel_prj_id)
  238. )
  239.  
  240. DESC rel_prj_emp
  241. DESC project
  242. PRJ_ID, PRJ_NAME, PRJ_START_DATE, PRJ_FINISH_DATE, PRJ_MANAGER_ID
  243.  
  244. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (01, 'Администрация', NULL, NULL);
  245. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (01, 'Администрация', NULL, NULL);
  246. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (03, 'Разработки', NULL, 1);
  247. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (05, 'Бухгалтерия', NULL, 1);
  248. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (02, 'Отдел кадров', NULL, 5);
  249. INSERT INTO Department(dep_id, dep_name, dep_manager_id, dep_chief_dep_id) VALUES (04, 'Тестирования', NULL, 3);
  250.  
  251. SELECT * FROM Department
  252.  
  253. UPDATE Department SET DEP_MANAGER_ID = 1 WHERE dep_id = 1;
  254. UPDATE Department SET DEP_MANAGER_ID = 5 WHERE dep_id = 2;
  255. UPDATE Department SET DEP_MANAGER_ID = 4 WHERE dep_id = 3;
  256. UPDATE Department SET DEP_MANAGER_ID = 3 WHERE dep_id = 4;
  257. UPDATE Department SET DEP_MANAGER_ID = 17 WHERE dep_id = 5;
  258.  
  259. SELECT constraint_name, table_name FROM user_constraints WHERE table_name = 'EMPLOYEE' OR table_name = 'DEPARTMENT' AND constraint_type <> 'P'
  260. SELECT constraint_name, table_name, constraint_type FROM user_constraints WHERE table_name = 'EMPLOYEE' AND constraint_type <> 'P' OR table_name = 'DEPARTMENT' AND constraint_type <> 'P'
  261.  
  262. SELECT * FROM PROJECT
  263. DESC project
  264. SELECT * FROM department
  265. SELECT * FROM employee
  266.  
  267. UPDATE Department SET dep_manager_id = 1 WHERE DEP_ID = 1;
  268.  
  269. SELECT *
  270. FROM
  271. WHERE
  272. GROUP BY - группировка
  273. HAVING - групповое условие
  274. ORDER BY - группировка
  275.  
  276. SELECT DISTINCT EMP_FIRST_NAME, EMP_LAST_NAME FROM Employee
  277.  
  278. SELECT emp_salary*0.1, emp_first_name, emp_last_name FROM Employee
  279. SELECT emp_salary*0.1 AS Премия, emp_first_name, emp_last_name FROM Employee WHERE emp_position = 'менеджер'
  280.  
  281. ---------------------------
  282. ----18 октября-------------
  283. ---------------------------
  284.  
  285. SELECT emp_first_name, emp_last_name, 'Получит ', emp_salary*0.25 AS Бонус FROM employee
  286. SELECT emp_first_name || ' ' || emp_last_name || ' получит ' || emp_salary*0.25 AS Бонус FROM employee
  287.  
  288. --Всех с зп больше 70 тысяч местных единиц
  289. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_salary FROM employee WHERE emp_salary > 70000
  290.  
  291. --Вывод менеджеров и бухгалтеров
  292. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position = 'менеджер' OR emp_position = 'бухгалтер'
  293.  
  294. --Вывод менеджеров с зп больше 60 тыс. местных единиц
  295. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность, emp_salary AS Зарплата FROM employee WHERE emp_position = 'менеджер' AND emp_salary > 60000
  296.  
  297. --Вывод сотрудников, дата поступления на который позже 1 января 2015 года
  298. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, EMP_JOIN_DATE AS дата_на_работу FROM Employee WHERE TO_CHAR(EMP_JOIN_DATE, 'YYYY') >= 2015
  299. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, EMP_JOIN_DATE AS дата_на_работу FROM Employee WHERE EMP_JOIN_DATE >= '1/1/2015'
  300.  
  301. --Вывод сотрудников с зп от 50 тыс. до 80 тыс. местных единиц
  302. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_salary FROM employee WHERE emp_salary > 50000 AND emp_salary < 80000
  303. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_salary FROM employee WHERE emp_salary BETWEEN 50000 AND 80000
  304.  
  305. --Вывод отдела, которые подчиняются не одному отделу
  306. SELECT DEP_NAME FROM Department WHERE DEP_CHIEF_DEP_ID IS NULL
  307.  
  308. --Сотрудники, менеджеры, программисты и бухгалтеры
  309. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position = 'менеджер' OR emp_position = 'бухгалтер' OR emp_position = 'программист'
  310. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position IN ('менеджер', 'бухгалтер', 'программист')
  311.  
  312. --Не забываем про главбуха
  313. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position IN ('менеджер', 'программист') OR emp_position LIKE '%бухгалтер'
  314. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_position LIKE '%бухгалтер'
  315.  
  316. --Фамилии на -ОВ
  317. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_last_name LIKE '%ов'
  318.  
  319. -Есть Р и на -ОВ Фамилии
  320. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_last_name LIKE '%р%ов'
  321.  
  322. -Есть Р и на -ОВ Фамилии
  323.  
  324. --Есть "Иван" подтекст в фамилии и имени
  325. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, emp_position AS Должность FROM employee WHERE emp_last_name LIKE '%Иван%' OR emp_first_name LIKE '%Иван%' OR emp_last_name LIKE '%иван%' OR emp_first_name LIKE '%иван%'
  326.  
  327. ------------------------
  328. --25 октября 2019-------
  329. ------------------------
  330.  
  331. --МНОГОТАБЛИЧНЫЕ ЗАПРОСЫ
  332. --Имя сотрудника и их отделы, где работают
  333. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee, Department WHERE emp_dep_id = dep_id;
  334.  
  335. --Имя отдела и их руководителей
  336. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee, Department WHERE emp_id = dep_manager_id;
  337. SELECT dep_name AS Отдел, emp_first_name||' '||emp_last_name AS Фамилия_Имя_Руководителя FROM Employee, Department WHERE emp_id = dep_manager_id;
  338.  
  339. --Имя проекта и их участники
  340. SELECT PRJ_NAME AS Проект, emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника FROM Project, Employee, REL_PRJ_EMP WHERE EMP_ID = REL_EMP_ID AND REL_PRJ_ID = PRJ_ID;
  341.  
  342. SELECT dep_name AS НАЗВАНИЕ_ОТДЕЛА, dep_name AS НАЗВ_ПОДЧИН_ОТДЕЛА FROM department WHERE НАЗВАНИЕ_ОТДЕЛА IN (SELECT dep_name FROM department WHERE dep_id IN (SELECT DEP_ID FROM department)) AND НАЗВ_ПОДЧИН_ОТДЕЛА IN
  343. (SELECT dep_name FROM department WHERE dep_id IN (SELECT DEP_chief_dep_id FROM department))
  344.  
  345. --Имя отдела и его подчинение
  346. SELECT D1.dep_name, D2.dep_name FROM department D1, department D2 WHERE D1.dep_chief_dep_id = d2.dep_id (+)
  347.  
  348. --Через джоины
  349.  
  350. SELECT t1.dep_name AS Назв_отдела, t2.dep_name AS назв_подч_отдела
  351. FROM department t1
  352. left join
  353. department t2 ON (t1.dep_chief_dep_id  = t2.dep_id)
  354.  
  355. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee inner join Department ON emp_dep_id = dep_id;
  356.  
  357. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee inner join Department ON (emp_id = dep_manager_id);
  358.  
  359. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee inner join Department ON emp_id = dep_manager_id;
  360.  
  361. -----------------------------
  362. --01 ноября 2019 года--------
  363. -----------------------------
  364.  
  365. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника, PRJ_NAME AS Проект FROM Project inner join REL_PRJ_EMP ON REL_PRJ_ID = PRJ_ID inner join Employee ON EMP_ID = REL_EMP_ID;
  366.  
  367. SELECT t1.dep_name AS Назв_отдела, t2.dep_name AS назв_подч_отдела FROM department t1 left join department t2 ON (t1.dep_chief_dep_id  = t2.dep_id)
  368.  
  369. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника, dep_name AS Отделы FROM Employee inner join Department ON emp_dep_id = dep_id WHERE dep_name LIKE '%Разработк%'
  370.  
  371. --Однострочные функции--
  372. --lower--upper----------
  373.  
  374. SELECT LOWER(emp_first_name||' '||emp_last_name) AS Фамилия_Имя_Сотрудника FROM employee
  375.  
  376. SELECT LOWER(emp_last_name) AS Фамилия FROM employee
  377.  
  378. ---------------------------
  379. --08 ноября 2019 года------
  380. ---------------------------
  381.  
  382. --substr--
  383. SELECT SUBSTR('Кошка Машка любит кашку', 10, 6) AS Строка FROM dual;
  384. SELECT SUBSTR('Кошка Машка любит кашку', -10, 6) AS Строка FROM dual;
  385. SELECT SUBSTR('Ехал Грека через реку', 6, 5) AS Строка FROM dual;
  386.  
  387. --instr--
  388. SELECT INSTR('Кошка Машка любит кашку', 'шк', 11) AS Строка FROM dual;
  389.  
  390. --Replace-- (исх. строка, строка, замены)---
  391. SELECT REPLACE('Кошка на окошке', 'ка') FROM dual;
  392.  
  393. SELECT REPLACE('Кошка на окошке', 'шк', 'шечк') AS Строка FROM dual;
  394.  
  395. --ABS
  396. SELECT ABS(-6) FROM dual;
  397. --ln
  398. SELECT LN(8) FROM dual;
  399. --exp
  400. SELECT EXP(8) FROM dual;
  401. --Power
  402. SELECT POWER(8, 2) FROM dual;
  403. --sqrt
  404. SELECT SQRT(64) FROM dual;
  405. --MOD
  406. SELECT MOD(15, 4) FROM dual;
  407. --ROUND
  408. SELECT ROUND(15.7) FROM dual;
  409. SELECT ROUND(15.4) FROM dual;
  410. --Ceil (до верхней границы)
  411. SELECT CEIL(14.3) FROM dual;
  412. --floor (до нижней границы)
  413. SELECT FLOOR(-14.3) FROM dual;
  414. --TIME_FUNC
  415. SELECT SYSDATE FROM dual;
  416. SELECT SYSDATE+15 FROM dual;
  417.  
  418. SELECT ADD_MONTHS(SYSDATE, 3) FROM dual;
  419.  
  420. SELECT LAST_DAY(SYSDATE) - SYSDATE FROM dual;
  421.  
  422. SELECT MONTHS_BETWEEN(SYSDATE, '12/31/2019') FROM dual;
  423.  
  424. SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('31.12.19', 'dd.mm.yy')) FROM dual;
  425.  
  426. SELECT TO_DATE('31.12.19', 'dd.mm.yy') - SYSDATE FROM dual;
  427.  
  428. --to_char
  429. SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd') FROM dual;
  430.  
  431. SELECT TO_CHAR(SYSDATE, 'yy-mm-dd') FROM dual;
  432.  
  433. SELECT TO_CHAR(SYSDATE, 'yy-mon-dd') FROM dual;
  434.  
  435. SELECT TO_CHAR(SYSDATE, 'yy-month-dd') FROM dual;
  436.  
  437. SELECT TO_CHAR(SYSDATE, 'yyyy-mon-dd,d') FROM dual;
  438.  
  439. SELECT TO_CHAR(SYSDATE, 'yyyy-mon-dd,d hh24:mi:ss') FROM dual;
  440.  
  441. SELECT TO_CHAR(SYSDATE, 'yyyy-mon-dd,d hh24:mi:ss') FROM dual;
  442.  
  443. SELECT TO_CHAR(SYSDATE, 'yyyy-mon-dd,d') FROM dual;
  444.  
  445. ----------------------
  446. --15-ноя-2019---------
  447. ----------------------
  448.  
  449. --Агрегатные функции
  450. --Count
  451.  
  452. SELECT COUNT(*) FROM
  453. --Сколько сотрудников
  454. SELECT COUNT(*) FROM Employee
  455.  
  456. INSERT INTO Employee(emp_id, emp_first_name, emp_last_name, emp_birth_date, emp_join_date) VALUES(21, 'Иванов', 'Бездомный', TO_DATE('21.05.1990', 'dd.mm.yyyy'), SYSDATE)
  457. UPDATE Employee SET emp_birth_date = TO_DATE('21.05.1990', 'dd.mm.yyyy') WHERE emp_id = 21
  458.  
  459. DESC Employee
  460.  
  461. --Сотрудники, количество, отдела, по отделам
  462. SELECT COUNT(emp_dep_id) FROM Employee
  463.  
  464. SELECT emp_first_name AS ИМЯ, emp_last_name AS Фамилия, dep_name AS Отделы FROM Employee, Department WHERE emp_dep_id = dep_id;
  465.  
  466. --Количество должностей
  467. SELECT COUNT(DISTINCT emp_position) AS Количество_Должностей FROM Employee
  468.  
  469. --Количество сотрудников в отделе разработки
  470. SELECT COUNT(*) FROM Employee inner join Department ON emp_dep_id = dep_id AND dep_name LIKE '%работки%';
  471.  
  472. SELECT emp_first_name||' '||emp_last_name, dep_name FROM Employee, Department WHERE emp_dep_id = dep_id AND dep_name = 'Разработки';
  473. SELECT * FROM department
  474.  
  475. SELECT emp_first_name||' '||emp_last_name, dep_name FROM Employee inner join Department ON emp_dep_id = dep_id AND dep_name LIKE '%работки%';
  476.  
  477. --Организации. Сумма зарплат
  478. SELECT SUM(emp_salary) FROM employee
  479.  
  480. --Самый свежий в поступлении
  481. SELECT MAX(emp_join_date) FROM employee
  482.  
  483. --Самый старый  по поступлению из БД
  484. SELECT MIN(emp_join_date) FROM employee
  485.  
  486. --Разница ЗП (МАКС-МИН)
  487. SELECT MAX(emp_salary) - MIN(emp_salary) AS Разница FROM employee
  488.  
  489. --Среднее значение ЗП
  490. SELECT AVG(emp_salary) FROM employee WHERE emp_position LIKE '_енеджер'
  491.  
  492. --Group by
  493. SELECT AVG(emp_salary) AS Ср_ЗП, emp_position AS Должность FROM employee GROUP BY emp_position
  494.  
  495. --Среднее ЗП по должностям, где зп более 40к
  496. SELECT AVG(emp_salary) AS Ср_ЗП, emp_position AS Должность FROM employee WHERE emp_salary > 40000 GROUP BY emp_position
  497.  
  498. --Сколько представителей каждой должности
  499. SELECT emp_position AS Должность, COUNT(*) AS Количество FROM employee GROUP BY emp_position
  500.  
  501. --Сумма зп по отделам
  502. SELECT AVG(emp_salary) AS Ср_ЗП, dep_name AS Отдел FROM employee, department WHERE emp_dep_id = dep_id GROUP BY dep_name
  503.  
  504. --Сколько сотрудников над каждым проектом
  505. --Select count(*) as Кол_во_Работников, prj_name as имя_проекта from employee, rel_prj_emp, project where emp_id = rel_emp_id and rel_prj_id = prj_id group by prj_name
  506.  
  507. SELECT COUNT(*) AS Кол_во_Работников, prj_name AS имя_проекта FROM rel_prj_emp, project WHERE rel_prj_id = prj_id GROUP BY prj_name
  508.  
  509. -------------------------
  510. --22-ноя-2019------------
  511. -------------------------
  512.  
  513. --Количество сотрудников по отделам и их должностям
  514. SELECT dep_name AS Назв_отдела, emp_position AS Должности,  COUNT(emp_id) AS количество FROM Department, Employee WHERE emp_dep_id = dep_id GROUP BY dep_name, emp_position ORDER BY dep_name, emp_position
  515. DESC employee
  516.  
  517. --Сумма ЗП по отделам
  518. SELECT dep_name AS Отдел, emp_position AS Должность, SUM(emp_salary) AS Всего_ЗП FROM employee, department WHERE emp_dep_id = dep_id GROUP BY dep_name, emp_position
  519.  
  520. --Сумма ЗП по отделам среди менеджеров
  521. SELECT dep_name AS Отдел, emp_position AS Должность, SUM(emp_salary) AS Всего_ЗП FROM employee, department WHERE emp_position LIKE '_енеджер' AND emp_dep_id = dep_id GROUP BY dep_name, emp_position
  522.  
  523. --Сумма ЗП по отделам среди менеджеров, с суммой их зп по отделам больше 70000
  524. SELECT dep_name AS Отдел, emp_position AS Должность, SUM(emp_salary) AS Всего_ЗП FROM employee, department WHERE emp_position LIKE '_енеджер' AND emp_dep_id = dep_id GROUP BY dep_name, emp_position HAVING SUM(emp_salary) > 70000
  525.  
  526. --Найти максимальную сумму ЗП по отделам среди менеджеров
  527. SELECT dep_name AS Отдел, SUM(emp_salary) AS Всего_ЗП FROM employee, department WHERE emp_dep_id = dep_id AND emp_position LIKE '_енеджер' GROUP BY dep_name, emp_position HAVING SUM(emp_salary)
  528. IN (SELECT MAX(SUM(emp_salary)) FROM employee, department WHERE emp_dep_id = dep_id AND emp_position LIKE '_енеджер' GROUP BY dep_name, emp_position)
  529.  
  530. --Найти максимальную сумму по отделам
  531. SELECT MAX(SUM(emp_salary)) AS ZP FROM employee, department WHERE emp_dep_id = dep_id GROUP BY dep_name, emp_position
  532.  
  533. --Подзапросы
  534. --Вывести список людей с макс. ЗП
  535. SELECT emp_first_name||' '||emp_last_name AS Фам_Имя, emp_salary FROM employee WHERE emp_salary = (SELECT MAX(emp_salary) FROM employee)
  536.  
  537. --Зарплаты плюс минус 10 процентов
  538. --Список людей, у которых зарплата в пределах 10процентов от средней
  539. SELECT emp_first_name||' '||emp_last_name AS Фам_Имя, emp_salary FROM employee WHERE emp_salary BETWEEN (SELECT (AVG(emp_salary)*0.9) FROM employee) AND (SELECT (AVG(emp_salary)*1.1) FROM employee)
  540.  
  541. --Фамилия сотрудников, которые участвуют в 3 процетах
  542. SELECT emp_last_name AS Фамилии FROM employee, rel_prj_emp WHERE emp_id = rel_emp_id GROUP BY emp_last_name HAVING COUNT(emp_id) = 3
  543.  
  544. -------------------
  545. --06-декабря-2019--
  546. -------------------
  547.  
  548. --Кто является менеджером отдела, в которой работает программист
  549. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника FROM Employee, Department WHERE Emp_id = dep_manager_id AND Dep_name IN (SELECT DISTINCT dep_name FROM Employee, Department WHERE Dep_id = Emp_dep_id AND EMP_position LIKE '_рограммист')
  550.  
  551. --Список сотрудников, и над какими количествами проектов они работают.
  552. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника, (SELECT COUNT(*) FROM REL_PRJ_EMP  WHERE rel_emp_id = emp_id) FROM employee
  553.  
  554. --Список сотрудников, которые работают над 2 проектами
  555. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника FROM Employee, REL_PRJ_EMP WHERE EMP_ID = REL_EMP_ID GROUP BY emp_first_name||' '||emp_last_name HAVING COUNT(REL_PRJ_ID) = 2
  556.  
  557. --Список сотрудников, которые работают над 2 проектами (коррелирующий подзапрос)
  558. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника, (SELECT COUNT(*) FROM REL_PRJ_EMP WHERE rel_emp_id = emp_id) Количество FROM employee WHERE (SELECT COUNT(*) FROM REL_PRJ_EMP WHERE rel_emp_id = emp_id) = 2
  559.  
  560. --Список сотрудников с самой высокой ЗП в своём отделе
  561. --Нерабочий прототип
  562. SELECT emp_first_name||' '||emp_last_name, dep_name, emp_salary AS Фамилия_Имя_Сотрудника FROM Employee, department WHERE dep_id = emp_dep_id AND emp_salary IN (SELECT MAX(emp_salary) FROM Employee, department WHERE dep_id = emp_dep_id GROUP BY dep_id)
  563.  
  564. --Рабочий вариант
  565. SELECT emp_first_name||' '||emp_last_name AS Фамилия_Имя_Сотрудника, EMP_SALARY FROM Employee E, (SELECT MAX(emp_salary) S, emp_dep_id FROM Employee GROUP BY emp_dep_id) T WHERE E.emp_salary = T.S AND T.emp_dep_id = E.EMP_DEP_ID
  566.  
  567. --Вывести названия отдела, сумма зарплат которой максимальная
  568.  
  569. --Вывести список сотрудников и их ЗП, их сумма ЗП которая максимальная
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement