Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену по БД (ВФ) / !Все ответы по БД v0.2.13.docx
Скачиваний:
189
Добавлен:
10.05.2014
Размер:
3.32 Mб
Скачать

24. Левые, правые и полные соединения. Функции для работы с null значениями. Выборка уникальных записей. Примеры.

Компании (companies)

Контакты (contacts)

company_id

company_name

phone

1

Рога и копыта

NULL

2

НИИ ЧАВО

322-223

contact_id

contact_name

phone

company_id

1

Бендер Остап Сулейманович

NULL

1

2

Гарин Петр Петрович

322-223

NULL

3

Привалов Александр Иванович

322-223

2



Обычное эквисоединение

SELECT contact_name, company_name

FROM contacts INNER JOIN companies

ON contacts.company_id = companies.company_id

ORDER BY contact_name

contact_name

company_name

Бендер Остап Сулейманович

Рога и копыта

Привалов Александр Иванович

НИИ ЧАВО

Внешнее соединение слева

SELECT contact_name, company_name

FROM contacts LEFT OUTER JOIN companies

ON contacts.company_id = companies.company_id

ORDER BY contact_name

contact_name

company_name

Бендер Остап Сулейманович

Рога и копыта

Гарин Петр Петрович

NULL

Привалов Александр Иванови

НИИ ЧАВО

Внешнее соединение справа

SELECT contact_name, company_name

FROM contacts RIGHT OUTER JOIN companies

ON contacts.phone = companies.phone

ORDER BY contact_name

contact_name

company_name

NULL

Рога и копыта

Гарин Петр Петрович

НИИ ЧАВО

Привалов Александр Иванович

НИИ ЧАВО

Полное соединение

SELECT contact_name, company_name

FROM contacts FULL OUTER JOIN companies

ON contacts.phone = companies.phone

ORDER BY contact_name

contact_name

company_name

NULL

Рога и копыта

Бендер Остап Сулейманович

NULL

Гарин Петр Петрович

НИИ ЧАВО

Привалов Александр Иванович

НИИ ЧАВО

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

SELECT contact_name, company_name

FROM contacts CROSS JOIN companies

ORDER BY contact_name

contact_name

company_name

Бенде

Остап Сулейманович

Рога и копыта

Бендер Остап Сулейманович

НИИ ЧАВО

Гарин Петр Петрович

Рога и копыта

Гарин Петр Петрович

НИИ ЧАВО

Привалов Александр Иванович

Рога и копыта

Привалов Александр Иванович

НИИ ЧАВО

JOIN — оператор языка SQL, позволяющий соединять записи из двух таблицреляционной базы данных. Входит в разделFROMоператораSELECTи отдельно от него не используется. Типы:

  • INNER JOIN (или просто JOIN) внутреннего соединения соединяет две таблицы, причём порядок таблиц для оператора неважен, поскольку оператор является симметричным.

  • OUTER JOIN внешнего соединения выполняет присоединение таблицы с необязательным присутствием записи в таблице. Отдельно не используется. Делится на:

    • LEFT OUTER JOIN к левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL.

    • RIGHT OUTER JOIN к правой таблице присоединяются все записи из левой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из правой таблицы, поля левой таблицы заполняются значениями NULL.

    • FULL OUTER JOINК к левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все невошедшие записи из правой таблицы, поля левой таблицы заполняются значениями NULL и плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL

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

SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;

1 = NULL

1 <> NULL

1 < NULL

1 > NULL

NULL

NULL

NULL

NULL

SELECT 1 IS NULL, 1 IS NOT NULL;

1 IS NULL

1 IS NOT NULL

0

1

NULL обозначает отсутствующее или неизвестное значение и обрабатывается отличным от других значений образом. Проверить значение на равенство NULL с помощью обычных арифметических операторов сравнения (=, < или <>) нельзя. Вместо этого нужно пользоваться операторами IS NULL и IS NOT NULL

DISTINCT - аргумент который обеспечивает устранение двойных значения из предложения SELECT. Другими словами, DISTINCT следит за тем, какие значения были ранее, так что бы они не были продублированы в списке.