From customers, orders, order_items, books

where customers.customerid = orders.customerid

and orders.orderid = order_items.orderid

and order_items.isbn = books.isbn

and books.title like '%Java%';

 

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

Рис. 3.237. Результат запроса с использованием соединения таблиц.

 

В то же время запрос вида (рис. 3.238) даст пустой результат (Empty set):

Рис. 3.238. Результат запроса с неточным указанием аргумента поиска .

 

Обратите внимание, что были отслежены данные из четырех разных таблиц, а чтобы сделать это с помощью соединения по равенству, понадобились три разных условия объединения. Обычно каждой паре таблиц требуется одно условие соединения, таким образом, количество условий соединения на единицу меньше количества объединяемых таблиц. Это правило большого пальца может пригодиться при отладке запросов, которые работают неустойчиво. Проверьте свои условия объединения и убедитесь в том, что вы все время следовали намеченному пути, от того, что вы уже знаете — к тому, что нужно узнать.

 

Задание 4. Поиск несоответствующих строк

Другой распространенный тип соединения в MySQL — объединение по остатку (левостороннее соединение – left join). В предыдущих примерах отбирались только те строки, в которых наблюдалось соответствие между таблицами. Однако могут потребоваться и строки, в которых нет соответствия — например, нужно найти клиентов, которые не сделали ни одного заказа, или книги, которые никто не заказывал.

 

Самый простой вариант ответа на такой вопрос в MySQL — использование левостороннего соединения, которое будет искать строки по указанному условию соединения двух таблиц. Если в указанной таблице нет подходящей строки, эта строка добавляется к результату, но с нулевым значением.

 

Пример: