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

Здравствуйте,野心勃勃的SQL энтузиасты! Сегодня мы отправимся в увлекательное путешествие в мир SQL Left Joins. Не волнуйтесь, если вы новички в программировании; я буду вашим доброжелательным проводником, объясняя все шаг за шагом. Так что возьмите杯咖啡 и погружайтесь с нами!

SQL - Left Join

Что такое Outer Join?

Прежде чем мы углубимся в Left Joins, давайте сначала поймем, что такое Outer Join. Представьте, что вы планируете вечеринку и у вас есть два списка: один с именами ваших друзей и другой с их любимыми напитками. Outer Join resembles combining these lists, even if some friends haven't specified their favorite drinks or some drinks aren't assigned to any friend.

На языке SQL, Outer Join позволяет нам объединять строки из двух или более таблиц на основе связанной колонки, даже если в одной из таблиц нет соответствия. Существует три типа Outer Joins:

Тип Join Описание
Left Join Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы
Right Join Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы
Full Outer Join Возвращает все строки, когда есть соответствие в левой или правой таблице

Для этого руководства мы сосредоточимся на Left Join, который является наиболее commonly используемым Outer Join.

SQL Left Join

Left Join возвращает все записи из левой таблицы (первой таблицы, упомянутой в запросе) и соответствующие записи из правой таблицы. Если соответствия нет, результат будет NULL справа.

Давайте рассмотрим пример. Представим, что у нас есть две таблицы: Students и Courses.

-- Таблица Students
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(50)
);

INSERT INTO Students VALUES
(1, 'Алиса'),
(2, 'Боб'),
(3, 'Чарли');

-- Таблица Courses
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(50),
StudentID INT
);

INSERT INTO Courses VALUES
(101, 'Основы SQL', 1),
(102, 'Продвинутый SQL', 2),
(103, 'Анализ данных', NULL);

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

SELECT Students.Name, Courses.CourseName
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID;

Результат будет выглядеть так:

Name CourseName
Алиса Основы SQL
Боб Продвинутый SQL
Чарли NULL

Как видите, Чарли出现在 результате, хотя он не записан ни на один курс. Вот магия Left Join!

Объединение нескольких таблиц с помощью Left Join

Теперь, когда мы освоили основы, давайте увеличим ставку. В реальных сценариях вам часто нужно будет объединять более двух таблиц. Не волнуйтесь; Left Join всегда рядом!

Добавим третью таблицу в наш пример: Instructors.

CREATE TABLE Instructors (
InstructorID INT PRIMARY KEY,
InstructorName VARCHAR(50),
CourseID INT
);

INSERT INTO Instructors VALUES
(201, 'Проф. Смит', 101),
(202, 'Доктор Джонсон', 102),
(203, 'Миссис Уильямс', NULL);

Теперь давайте объединим все три таблицы, чтобы получить comprehensive представление о студентах, их курсах и преподавателях:

SELECT Students.Name AS StudentName,
Courses.CourseName,
Instructors.InstructorName
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
LEFT JOIN Instructors ON Courses.CourseID = Instructors.CourseID;

Этот запрос сначала объединяет Students с Courses, а затем результат объединяет с Instructors. Результат может выглядеть так:

StudentName CourseName InstructorName
Алиса Основы SQL Проф. Смит
Боб Продвинутый SQL Доктор Джонсон
Чарли NULL NULL

Не удивительно, как легко мы можем объединить информацию из нескольких таблиц?

Left Join с WHERE Clausula

Иногда вам может понадобиться отфильтровать результаты вашего Left Join. Вот где comes в handy WHERE clause. Давайте представим, что мы хотим найти всех студентов, которые не записаны ни на один курс:

SELECT Students.Name
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
WHERE Courses.CourseID IS NULL;

Этот запрос вернет:

Name
Чарли

WHERE clause отфильтровывает все строки, где Courses.CourseID не NULL, эффективно давая нам только студентов без курса.

помните, что WHERE clause применяется после операции объединения. Если вы хотите отфильтровать правую таблицу перед объединением, вы должны использовать clause ON вместо этого.

Заключение

И вот оно,朋友们! Мы прошли через страну SQL Left Joins, от базовых концепций до более сложных применений. Left Joins являются incredibly мощными инструментами в вашем наборе SQL, позволяющими объединять данные из нескольких таблиц, даже когда нет perfect match.

По мере практики и обретения опыта вы обнаружите, что Left Joins становятся second nature. Они как швейцарский армейский нож SQL – универсальные, полезные и всегда под рукой, когда вам они нужны.

Помните, ключ к maîtriser SQL - это практика. Так что не бойтесь экспериментировать с различными запросами и структурами таблиц. Счастливого кодирования, и пусть ваши объединения всегда будут успешными!

Credits: Image by storyset