SQL - Left Join и Right Join: Полное руководство для начинающих

Здравствуйте, ambitные энтузиасты SQL! Я рад стать вашим проводником в этом захватывающем путешествии по миру SQL-соединений. Как кто-то, кто уже много лет teaches informatik, я могу заверить вас, что овладение соединениями подобно открытию суперсилы в мире баз данных. Так что давайте окунёмся и разгадаем тайны Left Join и Right Join вместе!

SQL - Left Join vs Right Join

Понимание соединений: Основы

Прежде чем мы углубимся в детали Left и Right Joins, давайте начнём с быстрого复习 того, что такое соединения в SQL. Представьте, что вы планируете вечеринку и у вас есть два списка: один с именами гостей и другой с их любимыми напитками. Соединения resemble магические палочки, которые помогают вам combining эти списки различными способами, чтобы получить нужную информацию.

Работа Left Join

Что такое Left Join?

Left Join подобен приглашению всех из вашего списка гостей на вечеринку, regardless того, знаете ли вы их любимый напиток или нет. Он возвращает все записи из левой таблицы (первой таблицы, упомянутой в запросе) и соответствующие записи из правой таблицы.

Синтаксис Left Join

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

Пример Left Join

Давайте создадим два простых стола для иллюстрации:

CREATE TABLE Guests (
GuestID INT PRIMARY KEY,
GuestName VARCHAR(50)
);

CREATE TABLE Drinks (
DrinkID INT PRIMARY KEY,
GuestID INT,
FavoriteDrink VARCHAR(50)
);

INSERT INTO Guests (GuestID, GuestName) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David');

INSERT INTO Drinks (DrinkID, GuestID, FavoriteDrink) VALUES
(1, 1, 'Mojito'),
(2, 2, 'Beer'),
(3, 3, 'Wine');

Теперь давайте используем Left Join, чтобы получить всех гостей и их любимые напитки (если известны):

SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
LEFT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;

Результат:

GuestName FavoriteDrink
Alice Mojito
Bob Beer
Charlie Wine
David NULL

Как вы можете видеть, David appears в результате, даже though мы не знаем его любимый напиток. Вот магия Left Join!

Работа Right Join

Что такое Right Join?

Right Join подобен сосредоточению на списке напитков и определению, какие гости предпочитают каждый напиток. Он возвращает все записи из правой таблицы и соответствующие записи из левой таблицы.

Синтаксис Right Join

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Пример Right Join

Используя наши предыдущие таблицы, давайте выполним Right Join:

SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
RIGHT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;

Результат:

GuestName FavoriteDrink
Alice Mojito
Bob Beer
Charlie Wine

Обратите внимание, как David не appears в этом результате, так как у него нет указанного любимого напитка.

Left Join Vs Right Join

Теперь, когда мы видели оба соединения в действии, давайте сравним их lado a lado:

Aspect Left Join Right Join
Focus All records from the left (first) table All records from the right (second) table
Null values In right table columns for non-matches In left table columns for non-matches
Use case When you want all records from the main table When you want all records from the joined table
Result set size Always includes all left table records Always includes all right table records

Когда использовать Left Join vs Right Join

  1. Используйте Left Join, когда:
  • Вы хотите сохранить все записи из основной (левой) таблицы.
  • Вы согласны с NULL значениями для несоответствующих записей из правой таблицы.
  1. Используйте Right Join, когда:
  • Вы хотите сохранить все записи из дополнительной (правой) таблицы.
  • Вы согласны с NULL значениями для несоответствующих записей из левой таблицы.

Полезный совет

За годы teaching, я заметил, что многие разработчики предпочитают использовать Left Joins вместо Right Joins. Почему? Это часто более интуитивно понятно и легко понять. Вы всегда можете переписать Right Join как Left Join, просто换了 местами таблицы. Так что, если вы находите Right Joins запутанными, не стесняйтесь sticking с Left Joins!

Практическое упражнение

Давайте закрепим наши знания с забавным упражнением. Представьте, что вы организовываете книжный клуб. У вас есть две таблицы: Members и Books.

CREATE TABLE Members (
MemberID INT PRIMARY KEY,
MemberName VARCHAR(50)
);

CREATE TABLE Books (
BookID INT PRIMARY KEY,
MemberID INT,
BookTitle VARCHAR(100)
);

INSERT INTO Members (MemberID, MemberName) VALUES
(1, 'Emma'),
(2, 'James'),
(3, 'Sophia'),
(4, 'Oliver');

INSERT INTO Books (BookID, MemberID, BookTitle) VALUES
(1, 1, 'Pride and Prejudice'),
(2, 2, '1984'),
(3, 2, 'To Kill a Mockingbird'),
(4, 3, 'The Great Gatsby');

Теперь попробуйте эти запросы:

  1. Left Join, чтобы получить всех членов и их книги (если есть):
SELECT Members.MemberName, Books.BookTitle
FROM Members
LEFT JOIN Books ON Members.MemberID = Books.MemberID;
  1. Right Join, чтобы получить все книги и их владельцев (если есть):
SELECT Members.MemberName, Books.BookTitle
FROM Members
RIGHT JOIN Books ON Members.MemberID = Books.MemberID;

Сравните результаты. Можете ли вы заметить различия?

Заключение

Поздравляю! Вы только что овладели искусством Left и Right Joins в SQL. Помните, что практика makes perfect, так что не стесняйтесь experimenting с этими соединениями в различных сценариях.

Как final thought, я всегда говорю своим студентам: "SQL соединения resemble пазлы. Чем больше вы играете с ними, тем лучше вы будете собирать большую картину ваших данных!"

Счастливо работайте с запросами, и пусть ваши соединения всегда будут точными!

Credits: Image by storyset