SlideShare une entreprise Scribd logo
1  sur  42
Манипулирование большими наборами данных
Рассматриваемые вопросы ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Использование подзапросов при манипулировании данными ,[object Object],[object Object],[object Object],[object Object],[object Object]
Копирование строк из другой таблицы ,[object Object],[object Object],[object Object],INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM  employees WHERE  job_id LIKE '%REP%'; 33 rows created.
Использование целевого подзапроса в команде   INSERT ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Использование целевого подзапроса в команде   INSERT ,[object Object],SELECT employee_id, last_name, email, hire_date,  job_id, salary, department_id FROM  employees WHERE  department_id = 50; …
Выборка данных с помощью подзапроса-источника SELECT  a.last_name, a.salary,  a.department_id, b.salavg FROM  employees a, (SELECT  department_id,  AVG(salary) salavg FROM  employees GROUP BY department_id) b WHERE  a.department_id = b.department_id AND  a.salary > b.salavg; …
Обновление двух столбцов с помощью подзапроса ,[object Object],UPDATE  empl3 SET  job_id  = (SELECT  job_id  FROM  employees  WHERE  employee_id = 205),  salary  = (SELECT  salary  FROM  employees  WHERE  employee_id = 168) WHERE  employee_id  =  114; 1 row updated.
Обновление строк на основе  значений из другой таблицы ,[object Object],UPDATE  empl3 SET  department_id  = (SELECT department_id FROM employees WHERE employee_id = 100) WHERE  job_id  = (SELECT job_id FROM employees WHERE employee_id = 200); 1 row updated.
Удаление строк на основе значений из другой таблицы ,[object Object],DELETE FROM empl3 WHERE  department_id = (SELECT department_id FROM  departments WHERE  department_name  LIKE '%Public%'); 1 row deleted.
Использование параметра  WITH CHECK OPTION   в командах  DML ,[object Object],[object Object],INSERT INTO  (SELECT employee_id, last_name, email, hire_date, job_id, salary FROM  empl3  WHERE  department_id = 50    WITH CHECK OPTION ) VALUES (99998, 'Smith', 'JSMITH', TO_DATE('07-JUN-99', 'DD-MON-RR'),  'ST_CLERK', 5000); INSERT INTO * ERROR at line 1: ORA-01402: view WITH CHECK OPTION where-clause violation
Обзор возможности явного задания ключевого слова  Default ,[object Object],[object Object],[object Object],[object Object]
Использование возможности явного задания значения с помощью ключевого слова  Default ,[object Object],[object Object],INSERT INTO deptm3 (department_id, department_name, manager_id)  VALUES (300, 'Engineering',  DEFAULT ); UPDATE deptm3 SET manager_id =  DEFAULT   WHERE department_id = 10;
Обзор многотабличной команды  INSERT   INSERT  ALL   INTO table_a VALUES(…,…,…)   INTO table_b VALUES(…,…,…)   INTO table_c VALUES(…,…,…)   SELECT …  FROM  sourcetab  WHERE …; Table_a Table_b Table_c
Обзор многотабличной команды  INSERT ,[object Object],[object Object],[object Object],[object Object],[object Object]
Типы многотабличных команд  INSERT ,[object Object],[object Object],[object Object],[object Object]
Многотабличные команды   INSERT ,[object Object],[object Object],INSERT [ALL] [ предложение _ условий _ вставки ] [ предложение_вставки   предложение _ значений ] ( подзапрос ) [ALL] [FIRST] [WHEN  условие  THEN] [ предложение_вставки  предложение _ значений ] [ELSE] [ предложение_вставки   предложение _ значений ]
 
Безусловная команда   INSERT   ALL ,[object Object],[object Object],INSERT  ALL   INTO sal_history VALUES(EMPID,HIREDATE,SAL)   INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID, hire_date HIREDATE,    salary SAL, manager_id MGR  FROM  employees   WHERE employee_id > 200; 12 rows created.
Условная команда   INSERT ALL ,[object Object],[object Object],[object Object]
Условная команда   INSERT   ALL INSERT ALL   WHEN SAL > 10000 THEN   INTO sal_history VALUES(EMPID,HIREDATE,SAL)   WHEN MGR > 200  THEN    INTO mgr_history VALUES(EMPID,MGR,SAL)   SELECT employee_id EMPID,hire_date HIREDATE,  salary SAL, manager_id MGR  FROM  employees   WHERE  employee_id > 200; 4 rows created.
Условная команда   FIRST INSERT ,[object Object],[object Object],[object Object],[object Object]
Условная команда   INSERT FIRST INSERT FIRST   WHEN SAL  > 25000  THEN   INTO special_sal VALUES(DEPTID, SAL)   WHEN HIREDATE like ('%00%') THEN   INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)   WHEN HIREDATE like ('%99%') THEN   INTO   hiredate_history_99   VALUES(DEPTID,   HIREDATE)   ELSE   INTO hiredate_history VALUES(DEPTID, HIREDATE) SELECT department_id DEPTID, SUM(salary) SAL,   MAX(hire_date) HIREDATE   FROM  employees GROUP BY department_id; 12 rows created.
Преобразующая команда   INSERT ,[object Object],[object Object],[object Object],[object Object],[object Object]
Преобразующая команда   INSERT INSERT ALL   INTO sales_info VALUES (employee_id,week_id,sales_MON)   INTO sales_info VALUES (employee_id,week_id,sales_TUE)   INTO sales_info VALUES (employee_id,week_id,sales_WED)   INTO sales_info VALUES (employee_id,week_id,sales_THUR)   INTO sales_info VALUES (employee_id,week_id, sales_FRI)   SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,   sales_WED, sales_THUR,sales_FRI    FROM sales_source_data; 5 rows created.
 
Команда   MERGE ,[object Object],[object Object],[object Object],[object Object],[object Object]
Синтаксис команды   MERGE ,[object Object],[object Object],MERGE INTO  имя _ таблицы   псевдоним _ таблицы USING ( таблица | представление | подзапрос )  псевдоним ON ( условие_соединения ) WHEN MATCHED THEN UPDATE SET  столбец 1 =  значение _ столбца 1, столбец 2 =  значение _ столбца2 WHEN NOT MATCHED THEN INSERT ( список _ столбцов ) VALUES ( список _ столбцов );
Слияние строк ,[object Object],[object Object],[object Object],MERGE INTO empl3  c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name  = e.first_name, c.last_name  = e.last_name, ... c.department_id  = e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, e.email, e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id,  e.department_id);
Слияние строк MERGE INTO empl3 c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT VALUES...; TRUNCATE TABLE empl3; SELECT *  FROM empl3; no rows selected SELECT *  FROM empl3; 107 rows selected.
Отслеживание изменений в данных Версии выбираемых строк SELECT …
Пример  Flashback Version Query SELECT salary FROM employees3  WHERE  employee_id = 107; UPDATE employees3 SET salary = salary * 1.30 WHERE  employee_id = 107; COMMIT; SELECT salary FROM employees3 VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE  employee_id = 107; 1 2 3
Notes Only
Предложение   VERSIONS BETWEEN SELECT versions_starttime "START_DATE",    versions_endtime  "END_DATE",  salary  FROM  employees   VERSIONS BETWEEN SCN MINVALUE  AND MAXVALUE  WHERE  last_name = 'Lorentz';
Итоги ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Обзор   практического занятия  3 ,[object Object],[object Object],[object Object]
 
 
 
 
 
 

Contenu connexe

Similaire à Les03

0045
00450045
0045JIuc
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8Technopark
 
0042
00420042
0042JIuc
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 

Similaire à Les03 (9)

лабраб 3
лабраб 3лабраб 3
лабраб 3
 
0045
00450045
0045
 
Triggers для Mysql
Triggers для MysqlTriggers для Mysql
Triggers для Mysql
 
лекц17
лекц17лекц17
лекц17
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8
 
0042
00420042
0042
 
My sql 0
My sql 0My sql 0
My sql 0
 
Access 04
Access 04Access 04
Access 04
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 

Plus de Michael Karpov

EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...Michael Karpov
 
Movement to business goals: Data, Team, Users (4C Conference)
Movement to business goals: Data, Team, Users (4C Conference)Movement to business goals: Data, Team, Users (4C Conference)
Movement to business goals: Data, Team, Users (4C Conference)Michael Karpov
 
Save Africa: NASA hackathon 2016
Save Africa: NASA hackathon 2016 Save Africa: NASA hackathon 2016
Save Africa: NASA hackathon 2016 Michael Karpov
 
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014) Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014) Michael Karpov
 
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...Michael Karpov
 
Поговорим про ошибки (Sumit)
Поговорим про ошибки (Sumit)Поговорим про ошибки (Sumit)
Поговорим про ошибки (Sumit)Michael Karpov
 
(2niversity) проектная работа tips&tricks
(2niversity) проектная работа   tips&tricks(2niversity) проектная работа   tips&tricks
(2niversity) проектная работа tips&tricksMichael Karpov
 
"Пользователи: сигнал из космоса". CodeFest mini 2012
"Пользователи: сигнал из космоса". CodeFest mini 2012"Пользователи: сигнал из космоса". CodeFest mini 2012
"Пользователи: сигнал из космоса". CodeFest mini 2012Michael Karpov
 
(Analyst days2012) Как мы готовим продукты - вклад аналитиков
(Analyst days2012) Как мы готовим продукты - вклад аналитиков(Analyst days2012) Как мы готовим продукты - вклад аналитиков
(Analyst days2012) Как мы готовим продукты - вклад аналитиковMichael Karpov
 
Как сделать команде приятное - Михаил Карпов (Яндекс)
Как сделать команде приятное - Михаил Карпов (Яндекс)Как сделать команде приятное - Михаил Карпов (Яндекс)
Как сделать команде приятное - Михаил Карпов (Яндекс)Michael Karpov
 
Как мы готовим продукты
Как мы готовим продуктыКак мы готовим продукты
Как мы готовим продуктыMichael Karpov
 
Hpc Visualization with WebGL
Hpc Visualization with WebGLHpc Visualization with WebGL
Hpc Visualization with WebGLMichael Karpov
 
Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)Michael Karpov
 
сбор требований с помощью Innovation games
сбор требований с помощью Innovation gamesсбор требований с помощью Innovation games
сбор требований с помощью Innovation gamesMichael Karpov
 
Зачем нам Это? или Как продать agile команде
Зачем нам Это? или Как продать agile командеЗачем нам Это? или Как продать agile команде
Зачем нам Это? или Как продать agile командеMichael Karpov
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile командеMichael Karpov
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile командеMichael Karpov
 
Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010Michael Karpov
 

Plus de Michael Karpov (20)

EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
 
Movement to business goals: Data, Team, Users (4C Conference)
Movement to business goals: Data, Team, Users (4C Conference)Movement to business goals: Data, Team, Users (4C Conference)
Movement to business goals: Data, Team, Users (4C Conference)
 
Save Africa: NASA hackathon 2016
Save Africa: NASA hackathon 2016 Save Africa: NASA hackathon 2016
Save Africa: NASA hackathon 2016
 
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014) Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
 
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
 
Поговорим про ошибки (Sumit)
Поговорим про ошибки (Sumit)Поговорим про ошибки (Sumit)
Поговорим про ошибки (Sumit)
 
(2niversity) проектная работа tips&tricks
(2niversity) проектная работа   tips&tricks(2niversity) проектная работа   tips&tricks
(2niversity) проектная работа tips&tricks
 
"Пользователи: сигнал из космоса". CodeFest mini 2012
"Пользователи: сигнал из космоса". CodeFest mini 2012"Пользователи: сигнал из космоса". CodeFest mini 2012
"Пользователи: сигнал из космоса". CodeFest mini 2012
 
(Analyst days2012) Как мы готовим продукты - вклад аналитиков
(Analyst days2012) Как мы готовим продукты - вклад аналитиков(Analyst days2012) Как мы готовим продукты - вклад аналитиков
(Analyst days2012) Как мы готовим продукты - вклад аналитиков
 
Как сделать команде приятное - Михаил Карпов (Яндекс)
Как сделать команде приятное - Михаил Карпов (Яндекс)Как сделать команде приятное - Михаил Карпов (Яндекс)
Как сделать команде приятное - Михаил Карпов (Яндекс)
 
Как мы готовим продукты
Как мы готовим продуктыКак мы готовим продукты
Как мы готовим продукты
 
Hpc Visualization with WebGL
Hpc Visualization with WebGLHpc Visualization with WebGL
Hpc Visualization with WebGL
 
Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)
 
сбор требований с помощью Innovation games
сбор требований с помощью Innovation gamesсбор требований с помощью Innovation games
сбор требований с помощью Innovation games
 
Зачем нам Это? или Как продать agile команде
Зачем нам Это? или Как продать agile командеЗачем нам Это? или Как продать agile команде
Зачем нам Это? или Как продать agile команде
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде
 
HPC Visualization
HPC VisualizationHPC Visualization
HPC Visualization
 
Hpc Visualization
Hpc VisualizationHpc Visualization
Hpc Visualization
 
Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010
 

Les03

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. Выборка данных с помощью подзапроса-источника SELECT a.last_name, a.salary, a.department_id, b.salavg FROM employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) b WHERE a.department_id = b.department_id AND a.salary > b.salavg; …
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. Обзор многотабличной команды INSERT INSERT ALL INTO table_a VALUES(…,…,…) INTO table_b VALUES(…,…,…) INTO table_c VALUES(…,…,…) SELECT … FROM sourcetab WHERE …; Table_a Table_b Table_c
  • 15.
  • 16.
  • 17.
  • 18.  
  • 19.
  • 20.
  • 21. Условная команда INSERT ALL INSERT ALL WHEN SAL > 10000 THEN INTO sal_history VALUES(EMPID,HIREDATE,SAL) WHEN MGR > 200 THEN INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID,hire_date HIREDATE, salary SAL, manager_id MGR FROM employees WHERE employee_id > 200; 4 rows created.
  • 22.
  • 23. Условная команда INSERT FIRST INSERT FIRST WHEN SAL > 25000 THEN INTO special_sal VALUES(DEPTID, SAL) WHEN HIREDATE like ('%00%') THEN INTO hiredate_history_00 VALUES(DEPTID,HIREDATE) WHEN HIREDATE like ('%99%') THEN INTO hiredate_history_99 VALUES(DEPTID, HIREDATE) ELSE INTO hiredate_history VALUES(DEPTID, HIREDATE) SELECT department_id DEPTID, SUM(salary) SAL, MAX(hire_date) HIREDATE FROM employees GROUP BY department_id; 12 rows created.
  • 24.
  • 25. Преобразующая команда INSERT INSERT ALL INTO sales_info VALUES (employee_id,week_id,sales_MON) INTO sales_info VALUES (employee_id,week_id,sales_TUE) INTO sales_info VALUES (employee_id,week_id,sales_WED) INTO sales_info VALUES (employee_id,week_id,sales_THUR) INTO sales_info VALUES (employee_id,week_id, sales_FRI) SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE, sales_WED, sales_THUR,sales_FRI FROM sales_source_data; 5 rows created.
  • 26.  
  • 27.
  • 28.
  • 29.
  • 30. Слияние строк MERGE INTO empl3 c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT VALUES...; TRUNCATE TABLE empl3; SELECT * FROM empl3; no rows selected SELECT * FROM empl3; 107 rows selected.
  • 31. Отслеживание изменений в данных Версии выбираемых строк SELECT …
  • 32. Пример Flashback Version Query SELECT salary FROM employees3 WHERE employee_id = 107; UPDATE employees3 SET salary = salary * 1.30 WHERE employee_id = 107; COMMIT; SELECT salary FROM employees3 VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE employee_id = 107; 1 2 3
  • 34. Предложение VERSIONS BETWEEN SELECT versions_starttime "START_DATE", versions_endtime "END_DATE", salary FROM employees VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE last_name = 'Lorentz';
  • 35.
  • 36.
  • 37.  
  • 38.  
  • 39.  
  • 40.  
  • 41.  
  • 42.  

Notes de l'éditeur