Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab5.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
27.8 Кб
Скачать

Пример 2. Соединение трех таблиц

Найдите фамилии работников, отделы в которых они работают и названия их должностей.

В результирующую таблицу необходимо поместить столбцы last_name, department, job_title из трех исходных таблиц: employee, department, job, поэтому в запросе следует выполнить соединение трех таблиц. Таблицы department и employee могут быть соединены так же, как и в примере 1. Таблицы employee и job могут быть соединены с помощью более сложного условия:

 

employee.job_code = job.job_code  AND employee.job_grade = job.job_grade  AND employee.job_country = job.job_country

 

так как они соединены с помощью сложного внешнего ключа. В результате каждый работник будет связан с названием своей должности. Окончательно запрос будет выглядеть так:

 

SELECT last_name, department, job_title  FROM employee, e department d, job j  WHERE e.dept_no = d.dept_no      AND e.job_code = j.job_code      AND e.job_grade = j.job_grade      AND e.job_country = j.job_country

LAST_NAME      DEPARTMENT                  JOB_TITLE                ============   =========================   ======================== Nelson         Engineering                 Vice President           Young          Software Development        Engineer                 Lambert        Field Office: East Coast    Engineer                 Johnson        Marketing                   Marketing Analyst        Forest         Quality Assurance           Manager                  Weston         Field Office: East Coast    Sales Representative     Lee            Corporate Headquarters      Administrative Assistant Hall           Finance                     Financial Analyst        Young          Customer Support            Manager                  Papadopoulos   Research and Development    Manager                  ....

 

Стандарт SQL позволяет использовать вариант формулировки запроса c помощью предложений FROM table1 JOIN table2 ON col1=col2 как в примере 1:

 

SELECT last_name, department, job_title FROM (employee e JOIN department d ON d.dept_no= e.dept_no)     JOIN job j ON e.job_code = j.job_code     AND e.job_grade = j.job_grade     AND e.job_country = j.job_country

 

или

 

SELECT last_name, department, job_title FROM (employee e JOIN job j ON      e.job_code = j.job_code     AND e.job_grade = j.job_grade     AND e.job_country = j.job_country) JOIN department d ON d.dept_no= e.dept_no

 

Таким же образом можно соединить и большее количество таблиц.

 

Внешние соединения

При выполнении операции соединения, данные из двух таблиц комбинируются с образованием пар связанных строк, в которых значения сопоставляемых столбцов являются одинаковыми. Если одно из значений в сопоставляемом столбце одной таблицы не совпадает ни с одним из значений в сопоставляемом столбце другой таблицы, то соответствующая строка удаляется из результирующей таблицы. Именно это правило применялось во всех рассмотренных выше примерах соединения таблиц. Предусмотрен и другой набор инструкций соединений, называемых внешними соединениями. Во внешнем соединении в результирующую таблицу помещаются также строки, не удовлетворяющие условию соединения.

Найдите номера руководителей отделов, названия отделов и их фамилии.

Применим внутреннее соединение:

SELECT mngr_no, department, last_name FROM employee e JOIN department d ON d.mngr_no= e.dept_no

MNGR_NO   DEPARTMENT            LAST_NAME  

=======   ===================   ============

121       Field Office: Italy   Osborne    

В результате мы нашли единственную строку, для которой выполняется равенство в сопоставляемых столбцах. Далее рассмотрим варианты этого запроса.

Существуют три типа внешних соединений: левое, правое и полное. Рассмотрим особенности каждого из них на приведенных ниже примерах.

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]