Иллюстрированный самоучитель по SQL для начинающих

Реляционные операторы

Смешение полных имен с псевдонимами приводит к путанице. Проанализируйте следующий пример:

SELECT T1.C, T2.С
FROM Т1 Т2, Т2 Т1
WHERE T1.C > Т2.С;

В этом примере псевдонимом для Т1 является Т2, а для Т2 – Т1. Конечно, такой выбор неразумен, однако формально он не противоречит никаким правилам. Если допустить возможность совместного использования полных имен и псевдонимов, невозможно определить, о какой таблице идет речь.

Предыдущий пример с псевдонимами эквивалентен следующему оператору SELECT без них:

SELECT T2.C, T1.C
FROM T1, T2
WHERE T2.С > T1.C;

Стандарт SQL:2003 позволяет объединять больше двух таблиц. Их максимальное количество зависит от конкретной реализации. Синтаксис, используемый при таких объединениях, аналогичен тому, который применяется в случае двух таблиц:

SELECT Е.*, С.Salary, С.Bonus, Y.TotalSales
FROM EMPLOYEE E, COMPENSATION C, YTD_SALES Y
WHERE E.EmpID = С Employ
AND C.Employ = Y.EmpNo;

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

Совет:
Если данные о продажах, проведенных продавцами за последние 12 месяцев до текущей даты, будут храниться в отдельной таблице YTD_SALES (продажи за предшествующий год), то производительность и надежность будут выше, чем при хранении этих данных в таблице EMPLOYEE. Данные в EMPLOYEE относительно стабильные. Имя и фамилия человека, его адрес и номер телефона меняются не слишком часто. А данные о продажах за год меняются, наоборот, достаточно часто. Так как в таблице YTD_SALES столбцов меньше, чем в EMPLOYEE, то таблица YTD_SALES, скорее всего, сможет обновляться быстрее. И если при обновлении итогов продаж можно не трогать таблицу EMPLOYEE, то уменьшается риск случайного изменения хранящихся в ней данных
.

Перекрестное объединение

CROSS JOIN (перекрестное объединение) – это ключевое слово для простого объединения, не имеющего предложение WHERE. Поэтому оператор:

SELECT *
FROM EMPLOYEE, COMPENSATION;

…также может быть записан как:

SELECT *
FROM EMPLOYEE CROSS JOIN COMPENSATION;

В результате получается декартово произведение (также известное как перекрестное произведение) двух исходных таблиц. CROSS JOIN редко дает тот окончательный результат, который вам нужен, но его применение может быть полезно в качестве первого шага в той цепочке манипуляций данными, которая в конце концов приведет к нужному результату.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.