Что такое JOIN в SQL
JOIN – это одна из самых популярных команд в языке структурированных запросов SQL. Она позволяет объединять информацию из разных таблиц по определенным параметрам и получать нужные данные. В этой статье расскажем, как работает оператор JOIN и какие существуют варианты его применения. Также мы дадим несколько примеров SQL-запросов с JOIN и разберемся, как начать работать с ними.
Кто пользуется оператором JOIN
Оператор JOIN в SQL используют и все, кто работает с реляционными базами данных (программисты, аналитики, администраторы баз данных и другие специалисты).
Реляционные базы — это системы хранения и обработки данных, в которых информация представлена в виде таблиц с колонками и строками. Каждая таблица имеет свое имя и уникальный ключ (primary key), который идентифицирует строку. Также таблицы могут иметь связи (relationships) с другими таблицами по общим полям (foreign keys), которые позволяют связывать данные из разных источников.
Примером реляционной базы данных может быть база интернет-магазина, в которой есть таблицы с товарами, категориями, заказами, клиентами и другой информацией. Для того, чтобы получить данные о заказе, нужно объединить информацию из нескольких таблиц по общим полям. Для этой цели применяется оператор JOIN.
Для чего нужен оператор JOIN
Как уже говорилось выше, оператор объединяет информацию из двух или большего числа таблиц по общему полю или условию. Это позволяет получать более полную и сложную информацию из базы данных, чем если бы мы обращались к одной таблице за раз. Оператор также дает возможность оптимизировать производительность базы данных, уменьшая число запросов к серверу и объем передаваемых данных.

Варианты работы команды JOIN
- INNER JOIN возвращает только те строки, которые совпадения в выбранных таблицах по указанному полю или условию. Это самый распространенный и простой тип JOIN, который нашел свое применение для связывания данных по первичным и внешним ключам. К примеру, можно применять INNER JOIN для получения списка клиентов и их заказов по полю customer_id:
SELECT c.customer_name, o.order_id, o.order_date FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id;
- LEFT JOIN берет все строки из левой таблицы и только те из правой, которые совпадают по указанному полю или условию. Если совпадений нет, то вместо значений из правой таблицы будут пустые ячейки (NULL). Это полезно, когда мы хотим увидеть список всех записей из одной таблицы и дополнительную информацию из другой таблицы, если она существует. Например, вы можете использовать LEFT JOIN для того, чтобы узнать названия всех товаров и их категорий по полю category_id:
SELECT p.product_name, c.category_name FROM products p LEFT JOIN categories c ON p.category_id = c.category_id;
- RIGHT JOIN позволяет увидеть все строки из правой таблицы и те из левой, которые совпадают по определенному условию (полю). Если совпадений нет, то вы увидите пустые ячейки (NULL) для полей из левой таблицы. Это удобно, когда нужно получить список всех записей из одной таблицы и дополнительную информацию из другой таблицы, если она есть. Например, можно использовать RIGHT JOIN для того, чтобы узнать названия всех категорий и количество товаров в них по полю category_id:
SELECT c.category_name, COUNT(p.product_id) AS product_count FROM products p RIGHT JOIN categories c ON p.category_id = c.category_id GROUP BY c.category_name;
- FULL JOIN позволяет увидеть все строки из таблиц, даже если они не имеют совпадений по указанному полю или условию. Если совпадений нет, то в выводе появятся пустыми ячейками (NULL) для полей из той таблицы, которая не имеет совпадений. Это полезно, когда нужно получить полную информацию о всех записях из обеих таблиц. Например, FULL JOIN можно использовать для получения данных о названиях всех товаров и категорий по полю category_id:
SELECT p.product_name, c.category_name FROM products p FULL JOIN categories c ON p.category_id = c.category_id;
Как начать работать с SQL-запросами
Для этого нужно знать основы SQL, иметь доступ к реляционной базе данных и среде разработки (IDE) или клиенту для работы с ней.
Существует множество различных систем управления базами данных (СУБД), какие поддерживают SQL-синтаксис, к примеру, Oracle, SQL Server, MySQL и др. Каждая из СУБД характеризуется своими особенностями, имеет свои дополнения к SQL, поэтому всегда нужно выбирать то программное обеспечение, которое подходит для решения поставленной задачи.
Для работы с базой данных нужно также установить соответствующий клиент или IDE, который позволит подключаться к серверу базы данных, создавать и изменять таблицы и выполнять SQL-запросы. Некоторые примеры таких программ: MySQL Workbench, pgAdmin, Oracle SQL Developer, Microsoft SQL Server Management Studio и т.д. Также можно использовать онлайн-сервисы для работы с SQL, например, SQL Fiddle или DB Fiddle.
После этих шагов можно начать создавать собственные таблицы и заполнять их данными, а также использовать готовые примеры баз данных для обучения. Для того, чтобы научиться писать SQL-запросы с оператором JOIN, вам нужно понимать структуру и связи между таблицами в вашей базе данных и знать названия полей и типов данных в них. Также вам нужно знать основные правила синтаксиса SQL и различные типы JOIN.
Elbrus Bootcamp
Вам может также понравиться.

Курс Основы JAVASCRIPT онлайн

22 нояб. 2023 г.
Для чего и кому нужны Big Data

7 нояб. 2023 г.
Операции LEFT JOIN, RIGHT JOIN (Microsoft Access SQL)
Объединяют записи исходных таблиц при использовании в любом предложении FROM.
Синтаксис
FROM table1 [ LEFT | RIGHT ] JOIN table2 ON table1.field1compopr table2.field2
Операции LEFT JOIN и RIGHT JOIN состоят из следующих элементов:
Имена таблиц, содержащих объединяемые записи.
Имена объединяемых полей. Поля должны относиться к одному типу данных и содержать данные одного вида. Однако имена этих полей могут быть разными.
Любой оператор реляционного сравнения: «=», «,» «=» или «<>«.
Примечания
Операция LEFT JOIN создает левое внешнее соединение. С помощью левого внешнего соединения выбираются все записи первой (левой) таблицы, даже если они не соответствуют записям во второй (правой) таблице.
Операция RIGHT JOIN создает правое внешнее соединение. С помощью правого внешнего соединения выбираются все записи второй (правой) таблицы, даже если они не соответствуют записям в первой (левой) таблице.
Например, в случае с таблицами «Отделы» (левая) и «Сотрудники» (правая) можно воспользоваться операцией LEFT JOIN для выбора всех отделов (включая те, в которых нет сотрудников). Чтобы выбрать всех сотрудников (в том числе и не закрепленных за каким-либо отделом), используйте RIGHT JOIN.
В следующем примере показано, как можно объединить таблицы Categories и Products по полю CategoryID. Результат запроса представляет собой список категорий, включая те, которые не содержат товаров.
SELECT CategoryName, ProductName FROM Categories LEFT JOIN Products ON Categories.CategoryID = Products.CategoryID;
В этом примере CategoryID является объединенным полем, но оно не включается в результаты запроса, поскольку не указано в инструкции SELECT. Чтобы включить объединенное поле в результаты запроса, укажите его имя в инструкции SELECT. В данном случае это Categories.CategoryID.
- Чтобы создать запрос, результатом которого являются только те записи, для которых совпадают данные в объединенных полях, воспользуйтесь операцией INNER JOIN.
- Операции LEFT JOIN и RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в операцию LEFT JOIN или RIGHT JOIN. Подробные сведения о вложении объединений можно найти в статье, посвященной операции INNER JOIN.
- Вы можете связать несколько предложений ON. Сведения о связывании предложений см. в статье, посвященной операции INNER JOIN.
- При попытке связи полей, содержащих данные типа Memo или объекты OLE, возникнет ошибка.
Пример
- Предполагается существование гипотетических полей Department Name (Название отдела) и Department ID (Код отдела) в таблице Employees (Сотрудники). Обратите внимание, что эти поля на самом деле не существуют в таблице Employees (Сотрудники) базы данных Northwind.
- Выбираются все отделы, в том числе без сотрудников.
- Выполняется вызов процедуры EnumFields, которую можно найти в примере для инструкции SELECT.
Sub LeftRightJoinX() Dim dbs As Database, rst As Recordset ' Modify this line to include the path to Northwind ' on your computer. Set dbs = OpenDatabase("Northwind.mdb") ' Select all departments, including those ' without employees. Set rst = dbs.OpenRecordset _ ("SELECT [Department Name], " _ & "FirstName & Chr(32) & LastName AS Name " _ & "FROM Departments LEFT JOIN Employees " _ & "ON Departments.[Department ID] = " _ & "Employees.[Department ID] " _ & "ORDER BY [Department Name];") ' Populate the Recordset. rst.MoveLast ' Call EnumFields to print the contents of the ' Recordset. Pass the Recordset object and desired ' field width. EnumFields rst, 20 dbs.Close End Sub
SQL: оператор JOIN. Основные типы объединения

JOIN — оператор языка SQL, предназначенный для выбора данных из двух таблиц и включения их в один результирующий набор. Если на примере: мы берем данные из двух таблиц, объединяем их по тем или иным правилам с помощью JOIN в единую таблицу, и выводим её.
В зависимости от того, какие правила объединения применяются, выделяются несколько типов оператора JOIN. Наиболее популярные мы и рассмотрим.
Синтаксис простого запроса с JOIN выглядит так:
SELECT fieldA, fieldB
FROM table1
JOIN table2
ON field1 = field2
Здесь мы объединяем две таблицы (table1 и table2) по одному ключевому полю. Если в обеих таблицах у этого поля одинаковые значения, то в результатах запроса данные этих таблиц будут выведены на одной строке. Проще всего рассмотреть это на примере.
У нас есть две таблицы: Cats и Shops. В таблице Cats нас интересует имя кота и shop_id. В таблице Shops хранятся id магазина и его название.
Допустим, мы хотим посмотреть, какие коты в каких магазинах живут. Для этого нам надо будет вывести имя кота и название магазина. А чтобы объединить таблицы, потребуется общий элемент (ключ), одинаковый для обеих таблиц. В данном случае подойдет shop_id. Ведь значение shop_id в таблице Cats полностью соответствует значениям Id в таблице Shops

Тогда наше правило объединения будет выглядеть так. Мы хотим объединить таблицы Cats и Shops и вывести имя кота и название магазина с тем же id, который указан для этого кота в поле shop_id
Здесь мы видим, что кот Мурзик живет в магазине Catland, а кот Пушок в магазине Pets Point. Это и называется объединением таблиц Cats и Shops по условию shop_id = id. Для JOIN наличие условия объединения обязательно, иначе СУБД не будет знать как сопоставить значения.
Код данного пример можно записать следующим образом:
SELECT name, shopname
FROM Cats
JOIN Shops
ON shop_id = id
В идеальном мире для каждого shop_id найдется значение в поле id таблицы Shops
Но в реальности может случиться так, что какому-то коту присвоен shop_id, которого в таблице Shops нет. Или в shop_id и вовсе отсутствует значение, например если котик уже был продан. Или в таблице Shops будет магазин, которому нет соответствующих shop_id в таблице Cats
Как запрос поступит в таких случаях?
Для работы с подобными ситуациями в SQL существует несколько видов JOIN. Они объединяют данные по различным правилам, которые пригодятся в разных ситуациях.

INNER JOIN или просто JOIN (внутреннее соединение)
Покажет только те записи, для которых нашлись пары. Остальные он просто не выведет.

LEFT JOIN (левое соединение)
Выведет все записи первой таблицы, а для ненайденных пар из второй проставит значение NULL

RIGHT JOIN (правое соединение)
Поступит наоборот, и выведет все записи второй таблицы, а на место нехватающей информации из первой таблицы подставит NULL

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

INNER JOIN выведет всего две строки. Все остальные, для которых значения в одной из таблиц отсутствуют, он не выводит.

LEFT JOIN добавит к ним еще 2 значения из поля name, а в поле shopname проставит значение NULL

RIGHT JOIN тоже добавит 2 значения, но уже в поле shopname и проставит NULL в поле name.

FULL JOIN выдаст все значения, и LEFT JOIN и RIGHT JOIN. Обратите внимание, что при использовании FULL JOIN, финальных полей даже больше, чем в каждой из таблиц по отдельности.
Соединение таблиц – операция JOIN и ее виды
Говоря про соединение таблиц в SQL, обычно подразумевают один из видов операции JOIN. Не стоит путать с объединением таблиц через операцию UNION. В этой статье я постараюсь простыми словами рассказать именно про соединение, чтобы после ее прочтения Вы могли использовать джойны в работе и не допускать грубых ошибок.
Соединение – это операция, когда таблицы сравниваются между собой построчно и появляется возможность вывода столбцов из всех таблиц, участвующих в соединении.
Придумаем 2 таблицы, на которых будем тренироваться.
Таблица «Сотрудники», содержит поля:
Таблица «Отделы», содержит поля:
Давайте уже быстрее что-нибудь покодим.
INNER JOIN
Самый простой вид соединения INNER JOIN – внутреннее соединение. Этот вид джойна выведет только те строки, если условие соединения выполняется (является истинным, т.е. TRUE). В запросах необязательно прописывать INNER – если написать только JOIN, то СУБД по умолчанию выполнить именно внутреннее соединение.
Давайте соединим таблицы из нашего примера, чтобы ответить на вопрос, в каких отделах работают сотрудники (читайте комментарии в запросе для понимания синтаксиса).
SELECT -- Перечисляем столбцы, которые хотим вывести Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел -- выводим наименование отдела и переименовываем столбец через as FROM -- таблицы для соединения перечисляем в предложении from Сотрудники -- обратите внимание, что мы не указали вид соединения, поэтому выполнится внутренний (inner) джойн JOIN Отделы -- условия соединения прописываются после ON -- условий может быть несколько, записанных через and, or и т.п. ON Сотрудники.Отдел = Отделы.id
Получим следующий результат:
| id | Имя | Отдел |
|---|---|---|
| 1 | Юлия | Кухня |
| 2 | Федор | Бар |
| 4 | Светлана | Бар |
Из результатов пропал сотрудник Алексей (id = 3), потому что условие «Сотрудники.Отдел = Отделы.id» не будет истинно для этой сроки из таблицы «Сотрудники» с каждой строкой из таблицы «Отделы». По той же логике в результате нет отдела «Администрация». Попробую это визуализировать (зеленные линии – условие TRUE, иначе линия красная):
Если не углубляться в то, как внутреннее соединение работает под капотом СУБД, то происходит примерно следующее:
- Каждая строка из одной таблицы сравнивается с каждой строкой из другой таблицы
- Строка возвращается, если условие сравнения является истинным
Если для одной или нескольких срок из левой таблицы (в рассмотренном примере левой таблицей является «Сотрудники», а правой «Отделы») истинным условием соединения будут являться одна или несколько срок из правой таблицы, то строки умножат друг друга (повторятся). В нашем примере так произошло для отдела с поэтому строка из таблицы «Отделы» повторилась дважды для Федора и Светланы.
Перемножение таблиц проще ощутить на таком примере, где условие соединения будет всегда возвращать TRUE, например 1=1:
SELECT * FROM Сотрудники JOIN Отделы ON 1=1
В результате получится 12 строк (4 сотрудника * 3 отдела), где для каждого сотрудника подтянется каждый отдел.
Также хочу сразу отметить, что в соединении может участвовать сколько угодно таблиц, можно таблицу соединить даже саму с собой (в аналитических задачах это не редкость). Какая из таблиц будет правой или левой не имеется значения для INNER JOIN (для внешних соединений типа LEFT JOIN или RIGHT JOIN это важно. Читайте далее). Пример соединения 4-х таблиц:
SELECT * FROM Table_1 JOIN Table_2 ON Table_1.Column_1 = Table_2.Column_1 JOIN Table_3 ON Table_1.Column_1 = Table_3.Column_1 AND Table_2.Column_1 = Table_3.Column_1 JOIN Table_1 AS Tbl_1 -- Задаем алиас для таблицы, чтобы избежать неоднозначности -- Если в Table_1.Column_1 хранится порядковый номер какого-то объекта, -- то так можно присоединить следующий по порядку объект ON Table_1.Column_1 = Tbl_1.Column_1 + 1
Как видите, все просто, прописываем новый джойн после завершения условий предыдущего соединения. Обратите внимание, что для Table_3 указано несколько условий соединения с двумя разными таблицами, а также Table_1 соединяется сама с собой по условию с использованием сложения.
Строки, которые выведутся запросом, должны совпасть по всем условиям. Например:
- Строка из Table_1 соединилась со строкой из Table_2 по условию первого JOIN. Давайте назовем ее «объединенной строкой» из двух таблиц;
- Объединенная строка успешно соединилась с Table_3 по условию второго JOIN и теперь состоит из трех таблиц;
- Для объединенной строки не нашлось строки из Table_1 по условию третьего JOIN, поэтому она не выводится вообще.
На этом про внутреннее соединение и логику соединения таблиц в SQL – всё. Если остались неясности, то спрашивайте в комментариях.
Далее рассмотрим отличия остальных видов джойнов.
LEFT JOIN и RIGHT JOIN
Левое и правое соединения еще называют внешними. Главное их отличие от внутреннего соединения в том, что строка из левой (для LEFT JOIN) или из правой таблицы (для RIGHT JOIN) попадет в результаты в любом случае. Давайте до конца определимся с тем, какая таблица левая, а какая правая.
Левая таблица та, которая идет перед написанием ключевых слов [LEFT | RIGHT| INNER] JOIN, правая таблица – после них:
SELECT * FROM Левая_таблица AS lt LEFT JOIN Правая_таблица AS rt ON lt.c = rt.c
Теперь изменим наш SQL-запрос из самого первого примера так, чтобы ответить на вопрос «В каких отделах работают сотрудники, а также показать тех, кто не распределен ни в один отдел?»:
SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Сотрудники LEFT JOIN Отделы -- добавляем только left ON Сотрудники.Отдел = Отделы.id
Результат запроса будет следующим:
| id | Имя | Отдел |
|---|---|---|
| 1 | Юлия | Кухня |
| 2 | Федор | Бар |
| 3 | Алексей | NULL |
| 4 | Светлана | Бар |
Как видите, запрос вернул все строки из левой таблицы «Сотрудники», дополнив их значениями из правой таблицы «Отделы». А вот строка для отдела «Администрация» не показана, т.к. для нее не нашлось совпадений слева.
Это мы рассмотрели пример для левого внешнего соединения. Для RIGHT JOIN будет все тоже самое, только вернутся все строки из таблицы «Отделы»:
| id | Имя | Отдел |
|---|---|---|
| 1 | Юлия | Кухня |
| 2 | Федор | Бар |
| 4 | Светлана | Бар |
| NULL | NULL | Администрация |
Алексей «потерялся», Администрация «нашлась».
Вопрос для Вас. Что надо изменить в последнем приведенном SQL-запросе, чтобы результат остался тем же, но вместо LEFT JOIN, использовался RIGHT JOIN?
Ответ. Нужно поменять таблицы местами:
SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Отделы RIGHT JOIN Сотрудники ON Сотрудники.Отдел = Отделы.id
В одном запросе можно применять и внутренние соединения, и внешние одновременно, главное соблюдать порядок таблиц, чтобы не потерять часть записей (строк).
FULL JOIN
Еще один вид соединения, который осталось рассмотреть – полное внешнее соединение.
Этот вид джойна вернет все строки из всех таблиц, участвующих в соединении, соединив между собой те, которые подошли под условие ON.
Давайте посмотрим всех сотрудников и все отделы из наших тестовых таблиц:
SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Сотрудники FULL JOIN Отделы ON Сотрудники.Отдел = Отделы.id
| id | Имя | Отдел |
|---|---|---|
| 1 | Юлия | Кухня |
| 2 | Федор | Бар |
| 3 | Алексей | NULL |
| 4 | Светлана | Бар |
| NULL | NULL | Администрация |
Теперь мы видим все, даже Алексея без отдела и Администрацию без сотрудников.
Вместо заключения
Помните о порядке выполнения соединений и порядке таблиц, если используете несколько соединений и используете внешние соединения. Можно выполнять LEFT JOIN для сохранения всех строк из самой первой таблицы, а последним внутренним соединением потерять часть данных. На маленьких таблицах косяк заметить легко, на огромных очень тяжело, поэтому будьте внимательны.
Рассмотрим последний пример и введем еще одну таблицу «Банки», в которой обслуживаются наши придуманные сотрудники:
| id | Наименование |
|---|---|
| 1 | Банк №1 |
| 2 | Лучший банк |
| 3 | Банк Лидер |
В таблицу «Сотрудники» добавим столбец «Банк»:
| id | Имя | Отдел | Банк |
|---|---|---|---|
| 1 | Юлия | 1 | 2 |
| 2 | Федор | 2 | 2 |
| 3 | Алексей | NULL | 3 |
| 4 | Светлана | 2 | 4 |
Теперь выполним такой запрос:
SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел, Банки.Наименование AS Банк FROM Сотрудники LEFT JOIN Отделы ON Сотрудники.Отдел = Отделы.id INNER JOIN Банки ON Сотрудники.Банк = Банки.id
В результате потеряли информацию о Светлане, т.к. для нее не нашлось банка с (такое происходит из-за неправильной проектировки БД):
| id | Имя | Отдел | Банк |
|---|---|---|---|
| 1 | Юлия | Кухня | Лучший банк |
| 2 | Федор | Бар | Лучший банк |
| 3 | Алексей | NULL | Банк Лидер |
Хочу обратить внимание на то, что любое сравнение с неизвестным значением никогда не будет истинным (даже NULL = NULL). Эту грубую ошибку часто допускают начинающие специалисты. Подробнее читайте в статье про значение NULL в SQL.
Пройдите мой тест на знание основ SQL. В нем есть задания на соединения таблиц, которые помогут закрепить материал.
Дополнить Ваше понимание соединений в SQL могут схемы, изображенные с помощью кругов Эйлера. В интернете много примеров в виде картинок.
Если какие нюансы джойнов остались не раскрытыми, или что-то описано не совсем понятно, что-то надо дополнить, то пишите в комментариях. Буду только рад вопросам и предложениям.
Привожу простыню запросов, чтобы Вы могли попрактиковаться на легких примерах, рассмотренных в статье:
-- Создаем CTE для таблиц из примеров WITH Сотрудники AS( SELECT 1 AS id, 'Юлия' AS Имя, 1 AS Отдел, 2 AS Банк UNION ALL SELECT 2, 'Федор', 2, 2 UNION ALL SELECT 3, 'Алексей', NULL, 3 UNION ALL SELECT 4, 'Светлана', 2, 4 ), Отделы AS( SELECT 1 AS id, 'Кухня' AS Наименование UNION ALL SELECT 2, 'Бар' UNION ALL SELECT 3, 'Администрация' ), Банки AS( SELECT 1 AS id, 'Банк №1' AS Наименование UNION ALL SELECT 2, 'Лучший банк' UNION ALL SELECT 3, 'Банк Лидер' ) -- Если надо выполнить другие запросы, то сначала закоментируй это запрос с помощью /**/, -- а нужный запрос расскоментируй или напиши свой. -- Это пример внутреннего соединения SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Сотрудники JOIN Отделы ON Сотрудники.Отдел = Отделы.id /* -- Пример левого джойна SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Сотрудники LEFT JOIN Отделы ON Сотрудники.Отдел = Отделы.id */ /* -- Результат этого запроса будет аналогичен результату запроса выше, хотя соединение отличается SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Отделы RIGHT JOIN Сотрудники ON Сотрудники.Отдел = Отделы.id */ /* -- Правое соединение SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Сотрудники RIGHT JOIN Отделы ON Сотрудники.Отдел = Отделы.id */ /* -- Пример с использованием разных видов JOIN SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Отделы RIGHT JOIN Сотрудники ON Сотрудники.Отдел = Отделы.id LEFT JOIN Банки ON Банки.id = Сотрудники.Банк */ /* -- Полное внешние соединение SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел FROM Сотрудники FULL JOIN Отделы ON Сотрудники.Отдел = Отделы.id */ /* -- Пример с потерей строки из-за последнего внутреннего соединения SELECT Сотрудники.id, Сотрудники.Имя, Отделы.Наименование AS Отдел, Банки.Наименование AS Банк FROM Сотрудники LEFT JOIN Отделы ON Сотрудники.Отдел = Отделы.id INNER JOIN Банки ON Сотрудники.Банк = Банки.id */ /* -- Запрос с условием, которое всегда будет True SELECT * FROM Сотрудники JOIN Отделы ON 1=1 */
- Объединение таблиц – UNION
- Соединение таблиц – операция JOIN и ее виды
- Тест на знание основ SQL
Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.
