Les03

  • 769 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
769
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
10
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Манипулирование большими наборами данных
  • 2. Рассматриваемые вопросы
      • Манипулирование данными с использованием подзапросов
      • Описание возможностей вставки данных в несколько таблиц
      • Использование следующих типов вставки в несколько таблиц
        • Безусловная команда INSERT
        • Преобразующая команда INSERT
        • Условная команда ALL INSERT
        • Условная команда FIRST INSERT
      • Слияние строк в таблице
      • Отслеживание изменений данных в течение периода времени
  • 3. Использование подзапросов при манипулировании данными
    • В команда DML можно использовать подзапросы :
      • Копирование данных из одной таблицы в другую
      • Выборка данных из вложенного представления
      • Изменение данных в одной таблице на основе значений в другой таблице
      • Удаление данных в одной таблице на основе значений в другой таблице
  • 4. Копирование строк из другой таблицы
      • Команда INSERT должна включать подзапрос .
      • Предложение VALUES не используется.
      • Количество столбцов, указанных в предложении INSERT , должно совпадать с количеством столбцов в подзапросе .
    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.
  • 5. Использование целевого подзапроса в команде INSERT
    • INSERT INTO
    • (SELECT employee_id, last_name,
    • email, hire_date, job_id, salary,
    • department_id
    • FROM empl3
    • WHERE department_id = 50)
    • VALUES (99999, 'Taylor', 'DTAYLOR',
    • TO_DATE('07-JUN-99', 'DD-MON-RR'),
    • 'ST_CLERK', 5000, 50);
    • 1 row created.
  • 6. Использование целевого подзапроса в команде INSERT
    • Проверка результатов .
    SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees WHERE department_id = 50; …
  • 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. Обновление двух столбцов с помощью подзапроса
    • Изменение должности и оклада служащего под номером 114, чтобы должность стала такой же, как у служащего под номером 205, а оклад – как у служащего под номером 168.
    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.
  • 9. Обновление строк на основе значений из другой таблицы
    • Для изменения строк таблицы на основе значений из другой таблицы используйте подзапросы в командах UPDATE .
    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.
  • 10. Удаление строк на основе значений из другой таблицы
    • Для удаления строк на основе значений из другой таблицы используйте подзапросы в командах DELETE
    DELETE FROM empl3 WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%'); 1 row deleted.
  • 11. Использование параметра WITH CHECK OPTION в командах DML
      • Подзапрос определяет таблицу и столбцы для команды DML.
      • Параметр WITH CHECK OPTION препятствует изменению строки , в результате которого нарушаются условия подзапроса .
    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
  • 12. Обзор возможности явного задания ключевого слова Default
      • При использовании значений по умолчанию, можно задавать ключевое слово DEFAULT в качестве устанавливаемого значения столбца .
      • Эта возможность соответствует стандарту SQL: 1999.
      • Пользователю предоставляется возможность самому решать , где и когда следует использовать значение по умолчанию .
      • Ключевое слово DEFAULT можно указывать в командах INSERT и UPDATE .
  • 13. Использование возможности явного задания значения с помощью ключевого слова Default
      • DEFAULT в команде INSERT :
      • DEFAULT в команде UPDATE :
    INSERT INTO deptm3 (department_id, department_name, manager_id) VALUES (300, 'Engineering', DEFAULT ); UPDATE deptm3 SET manager_id = DEFAULT WHERE department_id = 10;
  • 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. Обзор многотабличной команды INSERT
      • Команда INSERT...SELECT может быть использована для вставки в несколько таблиц с помощью одной команды DML.
      • Многотабличные команды INSERT могут использоваться в системах поддержки хранилищ данных для передачи информации из одного или более источников данных в набор целевых таблиц .
      • Такие команды обеспечивают существенное повышение производительности за счет :
        • использования одной команды DML вместо нескольких команд INSERT ... SELECT ;
        • использования одной команды DML вместо процедуры , в которой выполняются вставки при условии ( IF...THEN ) .
  • 16. Типы многотабличных команд INSERT
      • Безусловная команда INSERT
      • Условная команда INSERT ALL
      • Условная команда INSERT FIRST
      • Преобразующая команда INSERT
  • 17. Многотабличные команды INSERT
      • Синтаксис
      • предложение _ условий _ вставки
    INSERT [ALL] [ предложение _ условий _ вставки ] [ предложение_вставки предложение _ значений ] ( подзапрос ) [ALL] [FIRST] [WHEN условие THEN] [ предложение_вставки предложение _ значений ] [ELSE] [ предложение_вставки предложение _ значений ]
  • 18.  
  • 19. Безусловная команда INSERT ALL
      • Выборка значений столбцов EMPLOYEE_ID , HIRE_DATE , SALARY и MANAGER_ID из таблицы EMPLOYEES для сотрудников , номер которых ( EMPLOYEE_ID ) больше 200.
      • Вставка этих значений в таблицы SAL_HISTORY и MGR_HISTORY с использованием многотабличной команды INSERT .
    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.
  • 20. Условная команда INSERT ALL
      • Выборка значений столбцов EMPLOYEE_ID , HIRE_DATE , SALARY и MANAGER_ID из таблицы EMPLOYEES для сотрудников , номер которых ( EMPLOYEE_ID ) больше 200.
      • Если оклад SALARY больше $10000, тогда выполнить вставку этих значений в таблицу SAL_HISTORY , используя условную многотабличную команду INSERT .
      • Если номер менеджера ( MANAGER_ID ) больше 200, выполнить вставку этих значений в таблицу MGR_HISTORY , используя условную многотабличную команду INSERT .
  • 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. Условная команда FIRST INSERT
      • Выборка столбца DEPARTMENT_ID , а также значений функций SUM(SALARY) и MAX(HIRE_DATE) из таблицы EMPLOYEES .
      • Если SUM(SALARY) больше $25000, тогда выполнить вставку этих значений в таблицу SPECIAL_SAL , используя условную многотабличную команду FIRST INSERT .
      • Если выражение в первом предложении WHEN верно , последующие предложения WHEN следует пропустить .
      • Строки , которые не удовлетворяют условию в первом предложении WHEN , вставить в таблицы HIREDATE_HISTORY _ 00 , HIREDATE_HISTORY _ 99 или HIREDATE_HISTORY , учитывая при этом значение столбца HIRE_DATE . Использовать условную многотабличную команду INSERT .
  • 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. Преобразующая команда INSERT
      • SALES_TUE , SALES_WED , SALES_THUR , SALES_FRI Предположим из нереляционных таблиц был получен набор записей о продажах SALES_SOURCE_DATA в следующем формате :
    • EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE, SALES_WED, SALES_THUR, SALES_FRI
      • Необходимо сохранить эти записи в таблице SALES_INFO в более типовом реляционном формате :
      • EMPLOYEE_ID, WEEK, SALES
      • Набор записей из таблицы нереляционной БД преобразуется в реляционный формат с помощью преобразующей команды INSERT .
  • 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. Команда MERGE
      • Предоставляет возможность при определенных условиях изменять или вставлять данные в таблицу базы данных .
      • Выполняет изменение ( UPDATE ) , если строка существует и вставку ( INSERT ) для новой строки :
        • Позволяет избежать внесения отдельных изменений .
        • Повышает производительность и упрощает использование .
        • Эффективна для приложений , работающих с хранилищами данных .
  • 28. Синтаксис команды MERGE
    • Команда MERGE позволяет вставлять или изменять
    • строки при определенных условиях .
    MERGE INTO имя _ таблицы псевдоним _ таблицы USING ( таблица | представление | подзапрос ) псевдоним ON ( условие_соединения ) WHEN MATCHED THEN UPDATE SET столбец 1 = значение _ столбца 1, столбец 2 = значение _ столбца2 WHEN NOT MATCHED THEN INSERT ( список _ столбцов ) VALUES ( список _ столбцов );
  • 29. Слияние строк
    • Вставка или изменение строк таблицы EMPL3
    • для установления соответствия с значениями
    • таблицы EMPLOYEES .
    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);
  • 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
  • 33. Notes Only
  • 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. Итоги
      • Использование операций DML и команд управления транзакциями
      • Описание возможностей вставки данных в несколько таблиц
      • Использование следующих типов вставки в несколько таблиц
        • Безусловная команда INSERT
        • Преобразующая команда INSERT
        • Условная команда ALL INSERT
        • Условная команда FIRST INSERT
      • Слияние строк в таблице
      • Использование подзапросов при манипулировании данными
      • Отслеживание изменений данных в течение периода времени
  • 36. Обзор практического занятия 3
      • Выполнение команд многотабличной вставки
      • Выполнения операций MERGE
      • Отслеживание версий строк
  • 37.  
  • 38.  
  • 39.  
  • 40.  
  • 41.  
  • 42.