SQL
May 1, 2024

Курс по SQL - Урок 4

Сегодня разберем соединения с другими таблицами.

AS

Но начнем мы с более простого понятия алиас - эта функция позволяет переименовывать таблицы и поля.

Вы можете делать это с помощью ключевого слова as или без него, просто указав алиас через пробел -

Пример - SELECT name as user_names FROM users - вернет список имен пользователей в поле user_names

Альтернативный вариант - SELECT name user_names FROM users

Мы изменили стандартное поле name на user_names

Давайте перейдем к JOIN и попрактикуем работу с алиасами.

JOIN

Вспоминаем как выглядит таблица пользователей (Users)

Перед тем как приступить к разбору этого раздела добавим новую таблицу Orders. В ней будут хранится данные о заказах наших пользователей - сумма и название продукта (пусть будут кроссовки).

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

Мы связали заказы с таблицей пользователей через первичный ключ таблицы Users - id и назвали его user_id. Как видим Jack приобрел 2 пары кроссовок, Max одну, а John решил остаться при своих.

Таблица Orders

Представим, что вам нужно вывести в интерфейсе список заказов с именами покупателей - здесь то и выходит на сцену раздел JOIN.

JOIN - позволяет объединить записи из двух или более таблиц на основе указанного условия.

Примечания - Вы указываете таблицы, которые нужно объединить, используя ключевые слова JOIN, и условие объединения после ключевого слова ON.

Пример - SELECT * FROM orders JOIN users ON users.id = orders.user_id

Перепишем пример с алиасами - SELECT * FROM users u JOIN orders o ON u.id = o.user_id

Объединенные таблицы Orders и Users

С помощью этого запроса мы получили список, где для каждого заказа, используя user_id, мы нашли в таблице Users пользователя и его данные.

Одна проблема - поля id и name слепились. Они существует в обоих таблицах, но мы видим только одно поле и не можем однозначно определить, к какой таблице она относится. Чтобы не было такой путаницы, давайте однозначно укажем в запросе поля с алиасами.

Пример - SELECT u.id as users_table_id, o.id as orders_table_id, o.user_id as orders_table_user_id, u.name as users_table_name, u.age, o.value, o.name as orders_name FROM orders o JOIN users u ON u.id = o.user_id

Новые поля с названием таблицы и поля

Теперь мы видим, что поле id "разлепилось" на 2 поля - одно из таблицы Users и другое из таблицы Orders.

Но это еще не все, ведь на самом деле JOIN является краткой формой INNER JOIN и существует еще 3 разновидности соединения.

INNER / LEFT / RIGHT / FULL OUTER

Суть раздела JOIN - соединить два множества по какому-то признаку. Это можно сделать несколькими способами:

  • LEFT JOIN (левое соединение) - возвращает все записи из левой таблицы и соответствующие (подходящие по признаку) записи из правой таблицы.
  • RIGHT JOIN (правое соединение) - возвращает все записи из правой таблицы и соответствующие записи из левой таблицы.
  • (INNER) JOIN (внутреннее соединение) - возвращает только те записи, которые имеют совпадающие значения в обеих таблицах.
  • FULL OUTER JOIN (полное внешнее соединение) - возвращает все записи из обеих таблиц, независимо от того, есть ли совпадающие записи в другой таблице.

Чаще всего вы будете пользоваться (INNER) JOIN и LEFT JOIN.

В нашем примере при использовании (INNER) JOIN заказы, которые не имеют связи с пользователем, отражены не будут.

Добавим в Orders заказ без привязки к User_id
Результат остается прежним

Нашей целью является только обогащение таблицы заказов данными о клиентах, поэтому нам нужно использовать LEFT JOIN

Пример - SELECT u.id as users_table_id, o.id as orders_table_id, o.user_id as orders_table_user_id, u.name as users_table_name, u.age, o.value, o.name as orders_name FROM orders o LEFT JOIN users u ON u.id = o.user_id

Результат с LEFT JOIN

Как видите, теперь у нас есть список всех заказов с данными по пользователю, если он существует.

На этом на сегодня все! На следующем уроке мы будем разбирать разделы GROUP BY и HAVING BY.

Предыдущие уроки:

Ставьте лайк и подписывайтесь, чтобы прокачиваться в no-code вместе со мной