SQL запросы к базе данных. Часть #4
![SQL запросы к базе данных. Часть #4](/images/articles/sql_request_4.jpg)
Оператор JOIN используется для объединения строк из нескольких таблиц в одну общую таблицу, на основе связанного столбца между ними. Для таблиц реляционных баз данных характерно наличие общего столбца. У данных двух таблиц таким общим столбцом служит CustomerID.
![SQL запросы к базе данных.](/images/articles/sql_request_28.jpg)
Запрос данных из нескольких таблиц
Нам нужно объединить данные таблицы Orders с данными таблицы Customers на условии, что данные связующего столбца CustomerID совпадают. Сначала нужно извлечь данные из двух таблиц, используя оператор SELECT. После ключевого слова SELECT, указываем название таблицы и название столбца через точку. Таким образом через запятую перечисляем, какие столбцы из каких таблиц, мы будем извлекать.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
Использование JOIN в SELECT
После ключевого слова FROM указываем названия двух таблиц, а между ними слово JOIN.
FROM Orders JOIN Customers
Связь между таблицами
После ключевого слова ON, указываем условие объединения. Подтверждаем, что название столбца из одной таблицы идентично названию столбца из другой таблицы. Иными словами, речь идет об одних и тех же данных.
ON Orders.CustomerID=Customers.CustomerID;
После выполнения этого запроса, получится одна таблица с нужными нам столбцами. Мы вытащили определенные столбцы из разных, но связанных между собой таблиц и перенесли их в новую таблицу.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
![SQL запросы к базе данных.](/images/articles/sql_request_29.jpg)
Типы объединения Join
В реальном мире, у части клиентов значение CustomerID может отсутствовать в одной из таблиц. Тогда условие, что CustomerID=CustomerID не сработает. Для работы с подобными ситуациями в SQL, существует несколько видов JOIN. Они связывают таблицы по своим правилам для разных ситуаций.
Внутреннее объединение INNER JOIN
INNER JOIN покажет только те записи, для которых нашлись пары в обеих таблицах. Если не указывать слово INNER перед JOIN, то по умолчанию все равно сработает внутренний тип объединения.
![SQL запросы к базе данных.](/images/articles/sql_request_30.jpg)
Внешнее объединение
Это когда, когда для части строк в первой таблице нет соответствия строкам из второй таблицы, тогда объединение строк происходит по внешнему типу. Внешнее объединение делится на три разновидности:
- Левое
- Правое
- Полное
1) LEFT JOIN
LEFT JOIN выведет записи первой таблицы, а для не найденных записей из второй таблицы, проставит значение NULL.
![SQL запросы к базе данных.](/images/articles/sql_request_31.jpg)
Выберем из обеих таблиц всех клиентов и их заказы, которые у них могут быть. Ключевое слово LEFT JOIN возвратит все записи из левой таблицы Customers, даже если в правой таблице Orders нет совпадений.
![SQL запросы к базе данных.](/images/articles/sql_request_34.jpg)
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
![SQL запросы к базе данных.](/images/articles/sql_request_35.jpg)
2) RIGHT JOIN
RIGHT JOIN выведет записи из второй таблицы, а не место не хватающей информации из первой таблицы, поставит NULL.
![SQL запросы к базе данных.](/images/articles/sql_request_32.jpg)
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees
ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
3) FULL OUTER JOIN
FULL OUTER JOIN выводит все записи из обеих таблиц, в независимости от найденных совпадений.
![SQL запросы к базе данных.](/images/articles/sql_request_33.jpg)
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
![SQL запросы к базе данных.](/images/articles/sql_request_36.jpg)
-
-
Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.