В этом учебном пособии вы узнаете, как использовать MariaDB оператор JOINS (внутренний и внешний) с синтаксисом, примерами и графическими иллюстрациями.
Описание
MariaDB JOINS используются для извлечения данных из нескольких таблиц. MariaDB JOIN выполняется всякий раз, когда две или более таблицы объединяются в SQL запросе.
Существуют разные типы соединений MariaDB:
- MariaDB INNER JOIN (или иногда называется простым соединением)
- MariaDB LEFT OUTER JOIN (или иногда называется LEFT JOIN
- MariaDB RIGHT OUTER JOIN (или иногда называется RIGHT JOIN)
Итак, давайте обсудим синтаксис MariaDB JOIN, рассмотрим наглядные иллюстрации и рассмотрим примеры MariaDB JOIN.
INNER JOIN (простое соединение)
Скорее всего, вы уже писали запросы, которое используют MariaDB INNER JOIN. Это самый распространенный тип соединения. MariaDB INNER JOINS возвращает все строки из нескольких таблиц, где выполняется условие соединения.
Синтаксис
Синтаксис INNER JOIN в MariaDB:
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
Визуальная иллюстрация
На этой визуальной схеме MariaDB INNER JOIN возвращает затененную область:
MariaDB INNER JOIN будет возвращать записи, в которых пересекаются table1 и table2.
Пример
Вот пример MariaDB INNER JOIN:
1 2 3 4 |
SELECT sites.site_id, sites.site_name, pages.page_title FROM sites INNER JOIN pages ON sites.site_id = pages.site_id; |
Этот пример MariaDB INNER JOIN вернул бы все строки из таблиц sites и pages, где в обоих таблицах sites и pages есть совпадающее значение site_id.
Рассмотрим данные, чтобы объяснить, как работают внутренние соединения:
У нас есть таблица sites с двумя полями (site_id и site_name). Она содержит следующие данные:
site_id | site_name |
---|---|
1000 | Yahoo.com |
2000 | Bing.com |
3000 | Yandex.com |
4000 | Google.com |
У нас есть еще одна таблица под названием страницы с тремя полями (page_id, site_id и file_size). Она содержит следующие данные:
page_id | site_id | page_title |
---|---|---|
1 | 1000 | Sports |
2 | 1000 | Finance |
3 | 2000 | MSN |
4 | 3000 | Metrika |
5 | 5000 | Gmail |
Если мы запустим оператор SELECT (который содержит INNER JOIN) ниже:
1 2 3 4 |
SELECT sites.site_id, sites.site_name, pages.page_id, pages.page_title FROM sites INNER JOIN pages ON sites.site_id = pages.site_id; |
Наш набор результатов будет выглядеть так:
site_id | site_name | page_id | page_title |
---|---|---|---|
1000 | Yahoo.com | 1 | Sports |
1000 | Yahoo.com | 2 | Finance |
2000 | Bing.com | 3 | MSN |
3000 | Yandex.com | 4 | Metrika |
Строка для 'Google.com' из таблицы sites будет опущена, так как site_id 5000 не существует в обеих таблицах. Строка для page_id - 4 из таблицы pages будет опущена, так как site_id - 5000 не существует в таблице sites.
LEFT OUTER JOIN
Другой тип соединения называется MariaDB LEFT OUTER JOIN. Этот тип соединения возвращает все строки из таблицы с с левосторонним соединением, указанной в условии ON, и только те строки из другой таблицы, в которых соединяемые поля равны (выполняется условие соединения).
Синтаксис
The Синтаксис for the MariaDB LEFT OUTER JOIN is:
FROM table1
LEFT [OUTER] JOIN table2
ON table1.column = table2.column;
В некоторых базах данных ключевые слова LEFT OUTER JOIN заменяются на LEFT JOIN.
Визуальная Иллюстрация
На этой визуальной диаграмме MariaDB LEFT OUTER JOIN возвращает затененную область:
MariaDB LEFT OUTER JOIN будет возвращать все записи из table1 и только те записи из table2, которые пересекаются с table1.
Пример
Рассмотрим пример LEFT OUTER JOIN:
1 2 3 4 |
SELECT sites.site_id, sites.site_name, pages.page_id, pages.page_title FROM sites LEFT JOIN pages ON sites.site_id = pages.site_id; |
Этот пример LEFT OUTER JOIN вернет все строки из таблицы sites и только те строки из таблицы pages, в которых объединенные поля равны
Если значение site_id в таблице sites отсутствует в таблице pages, все поля в таблице pages будет отображаться как
Давайте посмотрим на некоторые данные, чтобы объяснить, как работают LEFT OUTER JOINS:
У нас есть таблица sites с двумя полями (site_id и site_name). Она содержит следующие данные:
site_id | site_name |
---|---|
1000 | Yahoo.com |
2000 | Bing.com |
3000 | Yandex.com |
4000 | Google.com |
У нас есть вторая таблица с именем pages с тремя полями (page_id, site_id и page_title). Он содержит следующие данные :
page_id | site_id | page_title |
---|---|---|
1 | 1000 | Sports |
2 | 1000 | Finance |
3 | 2000 | MSN |
4 | 3000 | Metrika |
5 | 5000 | Gmail |
Если мы запустим оператор SELECT (который содержит LEFT OUTER JOIN) ниже:
1 2 3 4 |
SELECT sites.site_id, sites.site_name, pages.page_id, pages.page_title FROM sites LEFT JOIN pages ON sites.site_id = pages.site_id; |
Наш набор результатов будет выглядеть так :
site_id | site_name | page_id | page_title |
---|---|---|---|
1000 | Yahoo.com | 1 | Sports |
1000 | Yahoo.com | 2 | Finance |
2000 | Bing.com | 3 | MSN |
3000 | Yandex.com | 4 | Metrika |
4000 | Google.com |
Строки для 'Google.com' будут включены, потому что было использовано LEFT OUTER JOIN. Однако вы заметите, что поля page_id и page_title для этой записи содержит значение
RIGHT OUTER JOIN
Другой тип соединения называется MariaDB RIGHT OUTER JOIN. Этот тип соединения возвращает все строки из таблицы с правосторонним соединением, указанной в условии ON, и всегда те строки из другой таблицы, где объединенные поля равны (выполняется условие соединения).
Синтаксис
Синтаксис MariaDB RIGHT OUTER JOIN:
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;
В некоторых базах данных ключевые слова RIGHT OUTER JOIN заменяются на RIGHT JOIN.
Визуальная Иллюстрация
На этой визуальной диаграмме MariaDB RIGHT OUTER JOIN возвращает затененную область:
MariaDB RIGHT OUTER JOIN будет возвращать все записи из table2 и только те записи из table1, которые пересекаются с table2.
Пример
Рассмотрим пример MariaDB RIGHT OUTER JOIN:
1 2 3 4 |
SELECT sites.site_id, sites.site_name, pages.page_id, pages.page_title FROM sites RIGHT JOIN pages ON sites.site_id = pages.site_id; |
Этот пример RIGHT OUTER JOIN вернет все строки из таблицы pages и только те строки из таблицы sites, в которых соединенные поля равны.
Если значение site_id в таблице pages не существует в таблице sites, все поля в таблице sites будет отображаться в наборе результатов как
Давайте посмотрим на некоторые данные, чтобы объяснить, как работают RIGHT OUTER JOINS:
У нас есть таблица sites с двумя полями (site_id и site_name). Он содержит следующие данные:
site_id | site_name |
---|---|
1000 | Yahoo.com |
2000 | Bing.com |
3000 | Yandex.com |
4000 | Google.com |
У нас есть вторая таблица с именем pages с тремя полями (page_id, site_id и page_title). Она содержит следующие данные:
page_id | site_id | page_title |
---|---|---|
1 | 1000 | Sports |
2 | 1000 | Finance |
3 | 2000 | MSN |
4 | 3000 | Metrika |
5 | 5000 | Gmail |
Если мы запустим оператор SELECT (который содержит RIGHT OUTER JOIN) ниже:
1 2 3 4 |
SELECT sites.site_id, sites.site_name, pages.page_id, pages.page_title FROM sites RIGHT JOIN pages ON sites.site_id = pages.site_id; |
Наш набор результатов будет выглядеть так:
site_id | site_name | page_id | page_title |
---|---|---|---|
1000 | Yahoo.com | 1 | Sports |
1000 | Yahoo.com | 2 | Finance |
2000 | Bing.com | 3 | MSN |
3000 | Yandex.com | 4 | Metrika |
5 | Gmail |
Строка для page_id - 5 будет включена, так как было использовано RIGHT OUTER JOIN. Однако вы заметите, что поля site_id и site_name для этой записи содержат значение