Вход

Объединение таблиц SQL

Объединение таблиц SQL

Зачастую при работе с базой данных нам требуется сделать выборку данных сразу из нескольких таблиц. Данная статья раскрывает как осуществить объединение таблиц SQL.

Пример запроса сразу к двум таблицам:

1
SELECT name, title FROM users, products;

Пример запроса с одноимёнными полями:

На первом месте имя таблицы или псевдоним, а на втором название поля. Если имя поля уникальное для выбранных таблиц, то указывать таблицу или псевдоним не обязательно.

1
2
3
SELECT users.id, name, products.id, title FROM users, products;
-- или
SELECT us.id, name, prod.id, title FROM users AS us, products AS prod;

Объединение двух таблиц в одном запросе:

1
SELECT u.name, o.price FROM users u, orders o WHERE o.user_id = u.id;

Создание виртуального дубликата одной и той же таблицы:

1
SELECT u.name, o.surname FROM users u, users o;

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

Используются для получения данных из разных таблиц.

1
2
3
4
5
6
7
-- получение всех имён пользователей, которые делали заказы.
-- Выбор данных идёт из разных таблиц
-- Вложенный запрос должен возвращать только одно значение
SELECT name FROM users WHERE id = (SELECT id_user FROM orders WHERE USER = users.name);
 
-- Если подзапрос возвращает множество:
SELECT name FROM users WHERE id IN (SELECT id_user FROM orders WHERE USER = users.name);

Оператор EXISTS

Определяет подзапрос как true или false

1
2
3
4
5
-- получение всех имён пользователей, которые делали заказ и сумма заказа > 1000
-- внешний запрос выполняется если подзапрос возвращает истину
SELECT name FROM users WHERE EXISTS (
          SELECT id_user FROM orders WHERE USER = users.name AND order_price > 1000
);
1
2
3
SELECT * FROM users WHERE name = "Ivan" AND EXISTS (
          SELECT id_user FROM orders WHERE order_price > 1000
);

Оператор UNION

Объединение полей из двух и более таблиц.

Результаты из таблиц будут выведены один под другим. То есть если в одной таблице 4 строки и в другой 4 строки, то в результирующей выборке будет 8 строк. Количество полей в обоих таблицах должно быть одинаковым!

1
SELECT name FROM users UNION SELECT name FROM orders;

Оператор JOIN

Бывает двух видов: внутреннее и внешнее объединение таблиц.

Оператор JOIN упрощает запрос и является альтернативой стандартного объединения данных из разных таблиц. INNER JOIN и JOIN это одно и тоже, оператор INNER может опускаться.

Внутреннее объединение INNER JOIN

Получение связанных данных из нескольких таблиц по определённому столбцу (связи полей). Не связанные данные пропускаются!

Оператор INNER JOIN
Оператор INNER JOIN
1
2
3
4
-- внутреннее объединение с таблицей orders
-- где после ON мы указываем связи между таблицами
 
SELECT u.name, o.order FROM users u INNER JOIN orders o ON orders.user_id = users.id WHERE u.name = 'Ivan';

Внешнее объединение LEFT и RIGHT OUTER JOIN

Не связанные данные так же выведутся в результате запроса. Не связанные данные получат значение NULL.

  • Левое внешнее объединение:

    1
    2
    3
    4
    
    -- таблица user будет находиться слева и из неё берутся все значения, 
    -- а из таблицы orders берутся все связанные значения, а остальные заменяются на NULL
     
    SELECT u.name, o.order FROM users u LEFT OUTER JOIN orders o ON orders.user_id = users.id;
  • Правое внешнее объединение:

    1
    2
    3
    4
    
    -- таблица orders будет находиться справа и из неё будут браться все значения, 
    -- а из таблицы users берутся все связанные значения, а остальные заменяются на NULL
     
    SELECT u.name, o.order FROM users u RIGHT OUTER JOIN orders o ON orders.user_id = users.id;

4 января 2018 /

63427 Views /

10 комментариев
Ilya Web developer
Author

«Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.»Martin Golding