Разновидности JOIN

  1. CROSS – перекрёстное соединение (декартово произведение, используются всевозможные комбинации строк).
  2. INNER – внутреннее соединение (соединяются только те строки, где найдены совпадающие значения столбца).
  3. LEFT(OUTER) – левое внешнее соединение (включает в себя все строки из таблицы А (совпадающие и несовпадающие) + совпадающие значения из таблицы Б. Для строк из таблицы А, которым не найдено соответствие, значение NULL заносятся в столбцы извлекаемые из таблицы Б.
  4. RIGHT(OUTER) – правое внешнее соединение, является обратным внешним соединением к предыдущему, т.е. все строки из таблицы Б (правой таблицы) представлены в соединении и они дополнены совпадающими строками из таблицы А.
  5. FULL(OUTER) – полное внешнее соединение – это комбинация левого и правого соединения, т.е. присутствуют все строки из обоих таблиц. В несовпадающих строках значения столбцов заполняются значениями 0.
  6. Соединение типа UNION – является обратным по отношению к INNER, т.е. включает только те строки из таблиц, для которых не найдены совпадения.
Пример:
 
Таблица 2.1.1
 
Таблица 2.1.2

Использование JOIN при создании запросов в БД Издательства 

Синтаксис:
таблица А [тип соединения]
JOIN таблица B ON
предикат
view raw synt.sql hosted with ❤ by GitHub
Предикат в этой конструкции определяет условия соединения строк из разных таблиц.
Задание 1. Найти авторов, живущих в одном городе с издателями.
SELECT au_id, city
FROM authors
INNER JOIN publishers
ON authors.city=publishers.city;
view raw Ex1.sql hosted with ❤ by GitHub
Задание 2. Отобразить список книг, опубликованных в штате Калифорния или вне крупных стран Северной Америки (Мексика, Канада, США).
Для таблицы titles используем обозначение – t, для таблицы publishers – p.
SELECT t.title_id, t.title_name, p.state, p.country
FROM titles t
INNER JOIN publishers p
ON t.pub_id=p.pub_id
WHERE p.state=’CA’
OR p.country NOT IN (‘USA’, ‘Canada’, ‘Mexico’)
ORDER BY t.title_id ASC;
view raw Ex2.sql hosted with ❤ by GitHub

Комментарии

Популярные сообщения