Spec-Zone.ru › MariaDB

Объединение таблиц с помощью операторов JOIN

В отсутствие более подробного обучающего документа, вот простой пример трех основных типов JOIN, с которыми можно поэкспериментировать, чтобы увидеть, что делают разные типы объединений:

CREATE TABLE t1 ( a INT );
CREATE TABLE t2 ( b INT );
INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (2), (4);
SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b;
SELECT * FROM t1 CROSS JOIN t2;
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;
SELECT * FROM t2 LEFT JOIN t1 ON t1.a = t2.b;

Два первых запроса SELECT (к сожалению) часто записываются в устаревшей форме:

SELECT * FROM t1, t2 WHERE t1.a = t2.b;
SELECT * FROM t1, t2;

Из этого видно, что внутреннее соединение (INNER JOIN) создает результат, содержащий только строки, у которых есть соответствие в обеих таблицах (t1 и t2) для заданного условия объединения.

Внешнее соединение (CROSS JOIN) создаёт результат, в котором каждая строка каждой таблицы объединяется с каждой строкой другой таблицы; это также называется декартовым произведением. В MariaDB ключевое слово CROSS можно опустить, так как оно ничего не делает. Любое соединение без условия ON является CROSS JOIN.

Левое соединение (LEFT JOIN) — это внешнее соединение, которое создаёт результат со всеми строками из таблицы слева (t1); значения столбцов в другой таблице (t2) зависят от того, найдено ли соответствие. Если соответствие не найдено, все столбцы этой таблицы устанавливаются в NULL для этой строки.

Правое соединение (RIGHT JOIN) аналогично левому соединению, но его результат содержит все строки из правой таблицы, а столбцы левой таблицы заполняются NULL, когда это необходимо.

Объединения (JOIN) могут быть объединены для чтения данных из трёх или более таблиц.

Вот вывод различных запросов SELECT, указанных выше:

SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b;
------ ------ 
| a    | b    |
------ ------ 
|    2 |    2 |
------ ------ 
1 row in set (0.00 sec)


SELECT * FROM t1 CROSS JOIN t2;
------ ------ 
| a    | b    |
------ ------ 
|    1 |    2 |
|    2 |    2 |
|    3 |    2 |
|    1 |    4 |
|    2 |    4 |
|    3 |    4 |
------ ------ 
6 rows in set (0.00 sec)


SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;
------ ------ 
| a    | b    |
------ ------ 
|    1 | NULL |
|    2 |    2 |
|    3 | NULL |
------ ------ 
3 rows in set (0.00 sec)


SELECT * FROM t2 LEFT JOIN t1 ON t1.a = t2.b;
------ ------ 
| b    | a    |
------ ------ 
|    2 |    2 |
|    4 | NULL |
------ ------ 
2 rows in set (0.00 sec)

Это должно дать вам более глубокое понимание того, как работают операторы JOIN!

Другие ссылки

  • Учебник по JOIN с примерами
  • Как писать сложные запросы

См. также

  • Более сложные JOIN
  • Запятая против JOIN
  • http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.shtml - Хороший учебник. Часть 5 посвящена объединениям.

Первоначальная версия этой статьи была скопирована с разрешения с http://hashmysql.org/wiki/Introduction_to_Joins 05.10.2012.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/joining-tables-with-join-clauses/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API