Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

JOIN предложение

Чтобы выполнить такой запрос, как в предыдущем примере, в стиле ANSI, с использованием предложения JOIN, укажите первую таблицу, потом ключевое слово JOIN, а потом вторую таблицу. После имени второй таблицы введите ключевое слово ON и условие соединения, которое вы использовали бы в старой форме запроса. В следующем примере показан запрос в стиле ANSI.

SELECT
e.emp_id,
е.fname,
е.lname,
j.job_desc
FROM scott.employee AS e
JOIN jobs AS j ON e.job_id=j.job_id
ORDER BY e.fname, e.lname;

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

SELECT
emp_id
FROM employee
LEFT JOIN sales USING (emp_id, region_id);

SELECT
emp_id
FROM employee AS e
LEFT JOIN sales AS s ON e.emp_id=s.emp_id AND e.region_id=s.region_id;

В стандарте ANSI вы можете указывать несколько разных типов соединений.

CROSS JOIN

Создается продукт полного перекрестного соединения двух таблиц. Каждая запись первой таблицы соединяется со всеми записями второй таблицы, что создает результирующий набор огромных размеров. (Конечно, результат может быть и небольшого размера, если таблицы содержат только четыре записи, но представьте, что их по четыре миллиона!) Это предложение действует так же, как отсутствие условий соединения, и его результат также называется «координатным продуктом». Использовать перекрестные соединения не рекомендуется.

[INNER] JOIN

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

LEFT [OUTER] JOIN

Указывается, что записи будут возвращаться из таблицы, находящейся слева от инструкции JOIN. Если запись, возвращаемая из левой таблицы, не имеет соответствующей записи в правой таблице, запись все равно извлекается. В этом случае в столбцах для значений из правой таблицы будут значения NULL. Многие профессионалы рекомендуют конфигурировать везде, где это возможно, внешние соединения как левосторонние (LEFT OUTER), чтобы соблюсти единообразие.

RIGHT [OUTER] JOIN

Указывается, что записи будут возвращаться из таблицы, находящейся справа от инструкции JOIN, даже если в таблице слева нет соответствующих записей. В этом случае в столбцах для значений из левой таблицы будут значения NULL.

FULL [OUTER] JOIN

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

Не все типы соединений поддерживаются всеми платформами; за информацией о специфике разных платформ при поддержке соединений обращайтесь к разделу «Инструкция JOIN».

Источник