Внешнее объединение таблиц в предложении WHERE обозначается символом *=. Внешнее объединение является расширением стандартного объединения.
Пример 1. Предположим, что в таблице TEACHER появилась запись {NULL, Федченко, Светлана, Геннадиевна, 01/09/1999}. Запрос о фамилиях преподавателей и предметов, которые они преподают, будет иметь вид:
SELECT TEACHERS. TFAM, PREDMET. PNAME
FROM TEACHER, PREDMET
WHERE TEACHERS. TNUM *= PREDMET.TNUM
Результат запроса:
TFAM PNAME
-------------------------------------------
Викулина Физика
Костыркин Химия
Казанко Математика
Позднякова Экономика
Загарийчук Философия
Федченко NULL
Пример 2. Рассмотрим полное внешнее объединение таблиц:
SELECT STUDENTS. SFAM,STUDENTS. SNUM,USP.PNUM,USP.SNUM FROM STUDENTS, USP
WHERE STUDENTS. SNUM =USP.SNUM;
Результат запроса:
SFAM SNUM PNUM SNUM
---------------------------------------------------------------------
Поляков 3412 2001 3412
Поляков 3412 2002 3412
Старова 3413 2003 3413
Гриценко 3414 2005 3414
Нагорный 3416 2004 3416
Пример 3. Вывести информацию о студентах, которым не соответствуют ни один учебный предмет.
SELECT STUDENTS. SFAM, STUDENTS.SNUM, USP.PNUM, USP.SNUM FROM STUDENTS, USP
WHERE STUDENTS. SNUM *=* USP.SNUM;
|
|
Результат запрос:
SFAM SNUM PNUM SNUM
-----------------------------------------------------------------------
Поляков 3412 2001 3412
Поляков 3412 2003 3412
Старова 3413 2003 3413
Гриценко 3414 2005 3414
Котенко 3415 NULL NULL
Нагорный 3416 2004 3416
Левое и правое внешнее объединение таблиц.
Левое внешнее объединение таблиц записывается в команде WHERЕ в виде =*.
Пример 1. Вывести информацию о студентах и о сданных учебных предметах, при этом данные о предметах выбираются для студентов, имеющих номер меньше, чем текущий.
Результат запрос:
SFAM SNUM PNUM SNUM
-------------------------------------------------------------------------------
Поляков 3412 NULL NULL
Старова 3413 2001 3412
Старова 3413 2003 3412
Гриценко 3414 2001 3412
Гриценко 3414 2003 3412
Гриценко 3414 2003 3413
...
Результат этого запроса приведён не полностью, так как его размеры значительно велики.
Структура ON.
Данная структура была введена в стандарте SQL2. Посредством операции JOIN в предложении FROM можно соединить несколько таблиц. Условие поиска описывается за ключевым словом ON, c использованием булевских операторов.
Например, запрос, который в SQL1 выглядит так:
SELECT STUDENTS. SFAM, STUDENTS. SNUM,
USP.PNUM, USP.SNUM
FROM STUDENTS, USP
WHERE STUDENTS.SNUM =USP.SNUM;
В SQL2 будет иметь вид:
SELECT STUDENTS. SFAM, STUDENTS. SNUM,
USP.PNUM, USP.SNUM
FROM STUDENTS INNER JOIN USP
ON STUDENTS.SNUM = USP. SNUM;
Приведем пример полного внешнего объединения:
SELECT STUDENTS. SFAM, STUDENTS. SNUM,
USP.PNUM, USP.SNUM
FROM STUDENTS FULL OUTER JOIN USP
ON STUDENTS.SNUM = USP. SNUM;
Результат запроса:
SFAM SNUM PNUM SNUM
------------------------------------------------------------------------
Поляков 3412 2001 3412
Поляков 3412 2003 3412
Старова 3413 2003 3413
Гриценко 3414 2005 3414
Котенко 3415 NULL NULL
Нагорный 3416 2004 3416
Вложенные запросы.