Внешнее объединение таблиц

Внешнее объединение таблиц в предложении 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


Вложенные запросы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: