07-Lec.ppt
- Количество слайдов: 35
4 Выборка данных из нескольких таблиц Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы • • Использование внешних соединений для просмотра данных, не удовлетворяющих обычным условиям соединения. • 4 -2 Команды SELECT для выборки данных из нескольких таблиц, с помощью эквисоединений и прочих видов соединений. Соединение таблицы с собой. Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка данных из нескольких таблиц EMPLOYEES 4 -3 DEPARTMENTS Copyright © Oracle Corporation, 2001. All rights reserved.
Декартово произведение • Декартово произведение образуется , если: – опущено условие соединения; – условие соединения недействительно; – все строки первой таблицы соединяются со всеми строками второй таблицы. • 4 -4 Во избежание получения декартова произведения предложение WHERE всегда должно включать правильное условие соединения. Copyright © Oracle Corporation, 2001. All rights reserved.
Получение декартова произведения EMPLOYEES (20 строк) DEPARTMENTS (8 строк) Декартово произведение: 20 x 8=160 строк 4 -5 Copyright © Oracle Corporation, 2001. All rights reserved.
Виды соединений SQL: 1999 Различные типы соединений: Разработанные Oracle соединения (версии • Перекрестные до 8 i включительно): • • Эквисоединение соединения 4 -6 Внешнее соединение Соединение таблицы с собой • • • Натуральные соединения • Не-эквисоединение Произвольные условия соединения для внешнего соединения опция USING Полное или двухстороннее внешнее соединение Copyright © Oracle Corporation, 2001. All rights reserved.
Соединение таблиц с использованием синтаксиса, разработанного Oracle Соединение используется для выборки данных из нескольких таблиц. SELECT FROM WHERE таблица 1. столбец, таблица 2. столбец таблица 1, таблица 2 таблица 1. столбец1 = таблица 2. столбец2; • • 4 -7 Условие соединения указывается в предложении WHERE. Если одно и то же имя столбца присутствует более, чем в одной таблице, к имени столбца добавляется имя таблицы в виде префикса. Copyright © Oracle Corporation, 2001. All rights reserved.
Что такое эквисоединение? EMPLOYEES DEPARTMENTS Внешний ключ 4 -8 Главный ключ Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с помощью эквисоединений SELECT employees. employee_id, employees. last_name, employees. department_id, departments. location_id FROM employees, departments WHERE employees. department_id = departments. department_id; 4 -9 Copyright © Oracle Corporation, 2001. All rights reserved.
Дополнительные условия поиска с оператором AND EMPLOYEES 4 -10 DEPARTMENTS Copyright © Oracle Corporation, 2001. All rights reserved.
Различение столбцов с одинаковыми именами • Для различения одноименных столбцов из разных таблиц используются префиксы в виде имен таблиц. • Использование префиксов в виде имен таблиц увеличивает производительность. • Одноименные столбцы из разных таблиц можно различать по их псевдонимам. 4 -11 Copyright © Oracle Corporation, 2001. All rights reserved.
Использование псевдонимов таблиц • • Упрощает запросы Повышает производительность SELECT e. employee_id, e. last_name, e. department_id, d. location_id FROM employees e, departments d WHERE e. department_id = d. department_id; 4 -12 Copyright © Oracle Corporation, 2001. All rights reserved.
Соединение более, чем двух таблиц EMPLOYEES DEPARTMENTS LOCATIONS Для соединения n таблиц требуется, по крайней мере, (n-1) условий соединения. Следовательно, для соединения трех таблиц требуются, по крайней мере, два условия. 4 -13 Copyright © Oracle Corporation, 2001. All rights reserved.
Не-эквисоединения EMPLOYEES JOB_GRADES Оклад в таблице EMPLOYEES находится между нижней и верхней границами окладов в таблице JOB_GRADES 4 -14 Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с помощью -эквисоединений не SELECT e. last_name, e. salary, j. grade_level FROM employees e, job_grades j WHERE e. salary BETWEEN j. lowest_sal AND j. highest_sal; 4 -15 Copyright © Oracle Corporation, 2001. All rights reserved.
Внешние соединения DEPARTMENTS EMPLOYEES В отделе 190 нет служащих. 4 -16 Copyright © Oracle Corporation, 2001. All rights reserved.
Синтаксис внешнего соединения • Внешнее соединение используется для выборки строк, не удовлетворяющих обычным условиям соединения. • Оператором внешнего соединения является знак плюс (+). SELECT таблица 1. столбец, таблица 2. столбец FROM таблица 1, таблица 2 WHERE таблица 1. столбец(+) = таблица 2. столбец; SELECT таблица 1. столбец, таблица 2. столбец FROM таблица 1, таблица 2 WHERE таблица 1. столбец = таблица 2. столбец(+); 4 -17 Copyright © Oracle Corporation, 2001. All rights reserved.
Использование внешних соединений SELECT e. last_name, e. department_id, d. department_name FROM employees e, departments d WHERE e. department_id(+) = d. department_id; 4 -18 Copyright © Oracle Corporation, 2001. All rights reserved.
Соединение таблицы с собой EMPLOYEES (WORKER) EMPLOYEES (MANAGER) MANAGER_ID в таблице WORKER равен EMPLOYEE_ID в таблице MANAGER. 4 -19 Copyright © Oracle Corporation, 2001. All rights reserved.
Соединение таблицы с собой SELECT w. last_name || ' works for ' || m. last_name FROM employees w, employees m WHERE w. manager_id = m. employee_id; 4 -20 Copyright © Oracle Corporation, 2001. All rights reserved.
Обзор практического занятия 4, часть 1 Эта часть практикума содержит задания по написанию запросов, в которых используется синтаксис условий соединения, разработанный Oracle. 4 -21 Copyright © Oracle Corporation, 2001. All rights reserved.
Соединение таблиц с использованием синтаксиса стандарта SQL: 1999 Используйте соединение для запроса информации из нескольких таблиц SELECT таблица 1. столбец, таблица 2. столбец FROM таблица 1 [CROSS JOIN таблица 2] | [NATURAL JOIN таблица 2] | [JOIN таблица 2 USING (имя_столбца)] | [JOIN таблица 2 ON(таблица 1. имя_столбца = таблица 2. имя_столбца)] | [LEFT|RIGHT|FULL OUTER JOIN таблица 2 ON (таблица 1. имя_столбца = таблица 2. имя_столбца)]; 4 -22 Copyright © Oracle Corporation, 2001. All rights reserved.
Создание перекрестных соединений • Предложение CROSS JOIN используется для получения векторного произведения двух таблиц. • Это то же самое, что и декартово произведение двух таблиц. SELECT last_name, department_name FROM employees CROSS JOIN departments; 4 -23 Copyright © Oracle Corporation, 2001. All rights reserved.
Создание натуральных соединений • • Выбираются строки из двух таблиц, которые имеют одинаковые значения во всех соответствующих столбцах. • 4 -24 Предложение NATURAL JOIN основывается на всех столбцах двух таблиц, имеющих одинаковые имена. Если столбцы с одинаковыми именами имеют разные типы данных, возвращается сообщение об ошибке. Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с помощью натуральных соединений SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations; 4 -25 Copyright © Oracle Corporation, 2001. All rights reserved.
Создание соединений с использованием предложения USING • Если несколько столбцов имеют одинаковые имена, но разные типы данных, предложение NATURAL JOIN может быть заменено на предложения USING , в котором можно явно указать столбцы, по которым нужно производить соединение. • Имена таблиц и псевдонимы не указываются в ссылках на столбцы. Предложения NATURAL JOIN и USING – взаимно исключают друга. • 4 -26 Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с использованием предложения USING SELECT e. employee_id, e. last_name, d. location_id FROM employees e JOIN departments d USING (department_id); 4 -27 Copyright © Oracle Corporation, 2001. All rights reserved.
Создание соединений с помощью предложения ON • • 4 -28 В основе натурального соединения лежит эквисоединение всех столбцов с одинаковыми именами. Предложение ON используется для определения произвольных соединений или столбцов, участвующих в соединении. Отделяются условия соединения от условий ограничения. Предложение ON делает код более легким для понимания. Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с использованием предложения ON SELECT e. employee_id, e. last_name, e. department_id, d. location_id FROM employees e JOIN departments d ON (e. department_id = d. department_id); 4 -29 Copyright © Oracle Corporation, 2001. All rights reserved.
Создание трехсторонних соединений при помощи предложения ON SELECT FROM JOIN ON 4 -30 employee_id, city, department_name employees e departments d d. department_id = e. department_id locations l d. location_id = l. location_id; Copyright © Oracle Corporation, 2001. All rights reserved.
Сравнение внутреннего (INNER) и внешнего (OUTER) соединений • • Соединение двух таблиц, возвращающее как строки внутреннего соединения, так и несоотвествующие строки левой (правой) таблицы, – это левое ( правое) внешнее соединение. • 4 -31 В соответствие со стандартом SQL: 1999 внутреннее соединение – это соединение двух таблиц, возвращающее только строки, соответствующие условию соединения. Полное внешнее соединение возвращает результаты внутреннего соединения, а также левого и правого внешнего соединений. Copyright © Oracle Corporation, 2001. All rights reserved.
Левое внешнее соединение SELECT e. last_name, e. department_id, d. department_name FROM employees e LEFT OUTER JOIN departments d ON (e. department_id = d. department_id); 4 -32 Copyright © Oracle Corporation, 2001. All rights reserved.
Правое внешнее соединение SELECT e. last_name, e. department_id, d. department_name FROM employees e RIGHT OUTER JOIN departments d ON (e. department_id = d. department_id); 4 -33 Copyright © Oracle Corporation, 2001. All rights reserved.
Полное внешнее соединение SELECT e. last_name, e. department_id, d. department_name FROM employees e FULL OUTER JOIN departments d ON (e. department_id = d. department_id); 4 -34 Copyright © Oracle Corporation, 2001. All rights reserved.
Дополнительные условия SELECT e. employee_id, e. last_name, e. department_id, d. location_id FROM employees e JOIN departments d ON (e. department_id = d. department_id) AND e. manager_id = 149; 4 -35 Copyright © Oracle Corporation, 2001. All rights reserved.
07-Lec.ppt