Найти в Дзене
Столяров Филипп

Не Джойни таблицы, пока не прочтешь это!

INNER JOIN INNER - Указывает, что возвращаются все совпадающие пары строк. Отмена несовпадающих строк из обеих таблиц. Это вариант соединения по умолчанию.
Для демонстрации примера создадим две таблицы Product и Product_Subcategory, затем наполним их данными : -- Создание таблицы Product
CREATE TABLE Product (
ProductID INT PRIMARY KEY,
Name VARCHAR(100),
ProductSubcategoryID INT);
-- Наполнение таблицы Product данными:
INSERT INTO Product (ProductID, Name, ProductSubcategoryID)
VALUES (1, 'Product1', 1),
(2, 'Product2', 2),
(3, 'Product3', 4);
-- Создание таблицы Product_Subcategory
CREATE TABLE Product_Subcategory (
ProductSubcategoryID INT PRIMARY KEY,
Name VARCHAR(100));
-- Наполнение таблицы Product_Subcategory данными:
INSERT INTO Product_Subcategory (ProductSubcategoryID, Name)
VALUES (1, 'Subcategory1'),
(2, 'Subcategory2'),
(3, 'Subcategory3') ; Получим: Теперь, если мы напишем запрос: SELECT p.Name as Name_Product, s.Name as Name_Subcategory
FROM Product p
INNER JOIN
Оглавление

INNER JOIN

INNER - Указывает, что возвращаются все совпадающие пары строк. Отмена несовпадающих строк из обеих таблиц. Это вариант соединения по умолчанию.

Для демонстрации примера создадим две таблицы
Product и Product_Subcategory, затем наполним их данными :

-- Создание таблицы Product
CREATE TABLE Product (
ProductID INT PRIMARY KEY,
Name VARCHAR(100),
ProductSubcategoryID INT);

-- Наполнение таблицы Product данными:
INSERT INTO Product (ProductID, Name, ProductSubcategoryID)
VALUES (1, 'Product1', 1),
(2, 'Product2', 2),
(3, 'Product3', 4);

-- Создание таблицы Product_Subcategory
CREATE TABLE Product_Subcategory (
ProductSubcategoryID INT PRIMARY KEY,
Name VARCHAR(100));

-- Наполнение таблицы Product_Subcategory данными:
INSERT INTO Product_Subcategory (ProductSubcategoryID, Name)
VALUES (1, 'Subcategory1'),
(2, 'Subcategory2'),
(3, 'Subcategory3') ;

Получим:

Содержимое таблицы Product
Содержимое таблицы Product

Содержимое таблицы Product_Subcategory
Содержимое таблицы Product_Subcategory

Теперь, если мы напишем запрос:

SELECT p.Name as Name_Product, s.Name as Name_Subcategory
FROM Product p
INNER JOIN Product_Subcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID;
Обратите внимание, что Product3 не попал в выборку, так как для него не нашлось 4-й Подкатегории
Обратите внимание, что Product3 не попал в выборку, так как для него не нашлось 4-й Подкатегории

LEFT JOIN

LEFT - Указывает, что все строки из левой таблицы, не соответствующие условиям соединения, включаются в результирующий набор, а выходные столбцы из оставшейся таблицы устанавливаются в значение NULL в дополнение ко всем строкам, возвращаемым внутренним соединением.

SELECT p.Name as Name_Product, s.Name as Name_Subcategory
FROM Product p
LEFT JOIN Product_Subcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID;

Обратите внимание, что все строки из левой таблицы попали в результирующий набор
Обратите внимание, что все строки из левой таблицы попали в результирующий набор

RIGHT JOIN

RIGHT - Указывает, что все строки из правой таблицы, не соответствующие условиям соединения, включаются в результирующий набор, а выходные столбцы, соответствующие оставшейся таблице, устанавливаются в значение NULL в дополнение ко всем строкам, возвращаемым внутренним соединением

SELECT p.Name as Name_Product, s.Name as Name_Subcategory
FROM Product p
RIGHT JOIN Product_Subcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID;
Обратите внимание, что все строки из правой таблицы попали в результирующий набор
Обратите внимание, что все строки из правой таблицы попали в результирующий набор

FULL JOIN

FULL - Указывает, что в результирующий набор включаются строки как из левой, так и из правой таблицы, несоответствующие условиям соединения, а выходные столбцы, соответствующие оставшейся таблице, устанавливаются в значение NULL.

SELECT p.Name as Name_Product, s.Name as Name_Subcategory
FROM Product p
FULL JOIN Product_Subcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID;
Обратите внимание, что в результирующий набор  включились все строки как из левой, так и из  правой таблицы
Обратите внимание, что в результирующий набор включились все строки как из левой, так и из правой таблицы

CROSS JOIN

CROSS - - Указывает на перекрестное произведение двух таблиц

SELECT p.Name as Name_Product, s.Name as Name_Subcategory
FROM Product p
CROSS JOIN Product_Subcategory s
-8

✔️ Благодарю за прочтение
✔️Больше полезного на этом
обучающем сайте
✔️
YouTube-канал и плейлист «SQL за 3 урока» (бесплатно)