MySQL INNER JOIN

’tag’

Оператор JOIN в MySQL запросах к базе данных

Май 28, 2012

В своей практике никогда не использовал оператор JOIN в запросах. Мне это было не нужно, так как все задачи удавалось решать по-другому и тем способом, который был мне удобен.

Я использовал следующие запросы:

SELECT m.id, m.title, description
 FROM `jos_menu` as m, `jos_menu_types` as t
 WHERE m.id = t.id
 AND description = ""

Вчера решил более не откладывать и начал поиск по Интернету в сторону оператора JOIN. Изначально, как и всегда я напал на Справочное руководство по MySQL, а точнее 6.4.1.1 Синтаксис оператора JOIN. Однако, язык изложения там довольно сложный.

Далее я нашел статью Антона Прибора:

В статье простым языком объясняется принцип работы оператора JOIN.

Есть 3 разновидности оператора JOIN:

  • INNER JOIN или CROSS JOIN
  • LEFT JOIN
  • RIGHT JOIN

По документации MySQL их более, чем 3, но это пока не важно.

Если у нас имеется 2 таблицы, к примеру, с уникальным полем id, которое используется для объединения двух таблиц. Представим, что в 1-й таблице Название товара, во 2-й Описание.

SELECT *
 FROM nomenclature;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | Книга     |
|  2 | Табуретка |
|  3 | Карандаш  |
+----+-----------+
SELECT *
 FROM description;
+----+---------------------+
| id | description         |
+----+---------------------+
|  1 | Замечательная книга |
|  3 | Красный карандаш    |
|  5 | Зелёная машинка     |
+----+---------------------+

Связь по id 1-к-1.

К примеру, во 2-й таблице описание добавлено не для всех товаров, что в 1-й таблице. К примеру, в 1-й таблице есть запись с id = 2, а во 2-й нет.

Оператор INNER JOIN

Запрос INNER JOIN используется для объединения результатов посредством оператора ON или USING. Строки с определенным id должны обязательно присутствовать в каждой таблице.

SELECT *
 FROM nomenclature
 INNER JOIN description;
+----+-----------+----+---------------------+
| id | name      | id | description         |
+----+-----------+----+---------------------+
|  1 | Книга     |  1 | Замечательная книга |
|  2 | Табуретка |  1 | Замечательная книга |
|  3 | Карандаш  |  1 | Замечательная книга |
|  1 | Книга     |  3 | Красный карандаш    |
|  2 | Табуретка |  3 | Красный карандаш    |
|  3 | Карандаш  |  3 | Красный карандаш    |
|  1 | Книга     |  5 | Зелёная машинка     |
|  2 | Табуретка |  5 | Зелёная машинка     |
|  3 | Карандаш  |  5 | Зелёная машинка     |
+----+-----------+----+---------------------+

Оператор LEFT JOIN

При использовании оператора LEFT JOIN по условию все строки будут извлечены из Левой таблицы и при отсутствии строк в Правой таблице, они будут дополнены.

В таком случае при выборе всех значений из таблицы с Названием товаров, строка с id = 2 будет иметь Описание равное NULL.

SELECT *
 FROM nomenclature
 LEFT JOIN description
 USING(id);
+----+-----------+---------------------+
| id | name      | description         |
+----+-----------+---------------------+
|  1 | Книга     | Замечательная книга |
|  2 | Табуретка | NULL                |
|  3 | Карандаш  | Красный карандаш    |
+----+-----------+---------------------+

Оператор RIGHT JOIN

Данный оператор выбирает все значения из Правой таблицы и при отсутствии значений в левой, дополняет результаты выборки.

Оператор ON

Данный оператор равносилен оператору WHERE по синтаксису:

SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;

Оператор USING

При использовании данного оператора в скобках перечисляются необходимые столбцы, которые есть в каждой таблице:

SELECT *
 FROM nomenclature
 INNER JOIN description
 USING(id);
+----+----------+---------------------+
| id | name     | description         |
+----+----------+---------------------+
|  1 | Книга    | Замечательная книга |
|  3 | Карандаш | Красный карандаш    |
+----+----------+---------------------+

Tags: , , , ,
Записано в MySQL, Программирование    |    Постоянная ссылка