Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OraLessons-I / Les-05-Displaying Data from Multiple Tables.doc
Скачиваний:
20
Добавлен:
20.03.2015
Размер:
153.6 Кб
Скачать

2.3 Создание соединений с использованием предложения using.

Правила:

  1. Если в натуральном соединении используются все столбцы с согласованными именами и типами данных, то в предложении USINGмогут быть указаны только те столбцы, которые следует использовать в соединении.

  2. Столбцы, на которые делаются ссылки в предложении USING, не должны включать квалификаторы (имя таблицы или ее псевдоним), которые применяются в любом другом месте команды SQL.

Пример 1.

SELECT employees.employee_id,

employees.last_name,

departments.location_id,

department_id

FROM employees JOIN departments

USING (department_id) ;

Пример 2.

SELECT departments.department_id,

Departments.department_name,

location_id,

locations.city

FROM departments JOIN locations

USING (location_id)

WHERE location_id = 1400 ;

Пример 3 (неправильное использование).

SELECTemployees.employee_id,

employees.last_name,

departments.location_id,

department_id

FROM employees JOIN departments

USING ( departments.department_id );

Пример 4 (неправильное использование).

SELECTemployees.employee_id,

employees.last_name,

departments.location_id,

department_id

FROM employees JOIN departments

USING (department_id)

WHERE departments.department_id in (20, 50);

2.4 Использование псевдонимов таблиц.

Использование псевдонимов таблиц позволяет:

  1. упрощать вид запросов;

  2. увеличивать производительность запросов.

Пример 1.

SELECT e.employee_id, e.last_name,

d.location_id, department_id

FROM employees e JOIN departments d

USING (department_id);

2.5 Различение столбцов с одинаковыми именами.

  1. Для различения одноимённых столбцов из разных таблиц используются префиксы в виде имён таблиц (либо их псевдонимов);

  2. Использование префиксов в виде имён таблиц (или их псевдонимов) увеличивает производительность запросов;

  3. Одноимённые столбцы из разных таблиц можно различать по их псевдонимам.

2.6 Создание соединений с помощью предложения on.

Использование предложения ON позволяет:

  1. задавать произвольных условия соединений;

  2. отделять условия соединения от условий ограничения;

  3. делать код более легким для понимания.

Пример 1.

SELECT e.employee_id, e.last_name, e.department_id,

d.department_id, d.location_id

FROM employees e JOIN departments d

ON (e.department_id = d.department_id) ;

Примечание: Предложение ON может быть также использовано для соединения при помощи столбцов с разными иенами.

Пример 2.

SELECT e.last_name emp, m.last_name mgr

FROM employees e JOIN employees m

ON (e.manager_id = m.employee_id) ;

В данном примере таблица EMPLOYEES соединяется с собой. Для имитации двух таблиц используются два псевдонима одной и той же таблицы, а именно eиm. Такой тип соединений называетсясоединение с собой(self-join).

Пример 3.

SELECT e.employee_id, e.last_name, e.department_id,

d.department_id, d.location_id

FROM employees e JOIN departments d

ON (e.department_id = d.department_id)

AND e.manager_id = 149 ;

2.7 Создание трёхсторонних соединений при помощи предложения on.

Трехстороннее соединение – это соединение трёх таблиц. В соответствие со стандартом SQL:1999 соединения обрабатываются слева направо.

Пример.

SELECT employee_id, city, department_name

FROM employees e

JOIN departments d

ON d.department_id = e.department_id

JOIN locations l

ON d.location_id = l.location_id;

В данном примере первым обрабатывается соединение между таблицами EMPLOYEES и DEPARTMENTS (employees JOIN departments). В этом соединении указываются столбцы из таблиц EMPLOYEES и DEPARTMENTS, но в нём не могут быть использованы столбцы из таблицы LOCATIONS. Во втором условии соединения могут быть использованы столбцы из всех трёх таблиц.

Следующий запрос вернёт идентичный результат:

SELECT employee_id, city, department_name

FROM employees e, departments d, locations l

WHERE d.department_id = e.department_id

AND d.location_id = l.location_id;

Соседние файлы в папке OraLessons-I