Использование JOIN онлайн урок.


В предыдущем уроке мы научились соединять таблицы просто указывая нужные поля и нужные таблицы в обыкновенном запросе

SELECT ... WHERE ...

Но для соединения таблиц как правило используется оператор JOIN. Для того, чтобы понять как он работает, запишем запросы из предыдущего урока и перепишем их, используя JOIN:

SELECT student.name, `group`.description FROM student, `group`;

то же самое что и

SELECT student.name, `group`.description FROM student JOIN `group`;

Мы видим, что отличие только в том, что вместо последней запятой в первом запросе стоит JOIN.

Напомним, что результат - СУБД выдаст все комбинации записей из двух таблиц:

+---------+-------------+
| name | description |
+---------+-------------+
| Mike | Mathematics |
| Mike | Physics |
| Mike | Biology |
| John | Mathematics |
| John | Physics |
| John | Biology |
... . ...
... . ...
... . ...
| Jeff | Mathematics |
| Jeff | Physics |
| Jeff | Biology |
| Stanley | Mathematics |
| Stanley | Physics |
| Stanley | Biology |
+---------+-------------+
24 rows in set (0.00 sec)

Для того, чтоб СУБД сопоставила значения из разных таблиц - это необходимо указать в предложении ON после предложения JOIN. Сравним запрос из предыдущего урока:

SELECT student.name, `group`.description FROM student, `group` WHERE student.group_id = `group`.id;

То же самое что и

SELECT student.name, `group`.description FROM student JOIN `group` ON student.group_id = `group`.id;

Как видим, отличие только в том, что вместо WHERE записано ON. Результатом будет:

+---------+-------------+
| name | description |
+---------+-------------+
| Mike | Physics |
| John | Mathematics |
| Andy | Biology |
| Debra | Mathematics |
| Andy | Mathematics |
| Mike | Biology |
| Jeff | Physics |
| Stanley | Biology |
+---------+-------------+
8 rows in set (0.01 sec)

Также можно соединить полностью две таблицы, записав * после SELECT:

SELECT * FROM student JOIN `group` ON student.group_id = `group`.id;
+----+---------+------+-----------+----------+----+-----------+-------------+
| id | name | age | phone | group_id | id | name | description |
+----+---------+------+-----------+----------+----+-----------+-------------+
| 1 | Mike | 25 | 345-65-78 | 2 | 2 | satr-41-P | Physics |
| 2 | John | 27 | 123-65-12 | 1 | 1 | ifka-33-M | Mathematics |
| 4 | Andy | 20 | 244-34-12 | 3 | 3 | oskt-56-B | Biology |
| 5 | Debra | 21 | 987-65-43 | 1 | 1 | ifka-33-M | Mathematics |
| 6 | Andy | 24 | 323-43-98 | 1 | 1 | ifka-33-M | Mathematics |
| 7 | Mike | 23 | 313-54-21 | 3 | 3 | oskt-56-B | Biology |
| 8 | Jeff | 25 | 213-56-23 | 2 | 2 | satr-41-P | Physics |
| 9 | Stanley | 23 | 111-23-43 | 3 | 3 | oskt-56-B | Biology |
+----+---------+------+-----------+----------+----+-----------+-------------+
8 rows in set (0.00 sec)

Замечание. После предложения ON можно использовать предложение WHERE


SELECT student.name, `group`.description
FROM student JOIN `group`
ON student.group_id = `group`.id
WHERE student.name LIKE 'J%';
+------+-------------+
| name | description |
+------+-------------+
| John | Mathematics |
| Jeff | Physics |
+------+-------------+
2 rows in set (0.01 sec)


Проверьте свои знания
Выполнить предыдущее задание при помощи JOIN