Page 136 - 4636
P. 136
order_items.orderid and order_items.isbn = books.isbn and books.title
like '%Java%';
Цей запит дає такий результат:
Name
Слава Моргунов
У цьому прикладі використані дані з чотирьох різних таблиць, а щоб зробити це за
допомогою з'єднання з рівності, знадобилися три різні умови з'єднання. Зазвичай кожній парі
таблиць потрібна одна умова з'єднання. Таким чином, кількість умов з'єднання на одиницю
менше від кількості таблиць, що об'єднуються. Це основне правило може стати в нагоді при
налагодженні запитів, які відмовляються працювати. Перевірте умови з'єднання і переконайтеся в
тому, що послідовність зв'язків відображає шлях від уже відомого до того, що потрібно
дізнатися.
3 Пошук незбіжних рядків
Інший поширений в MySQL тип з'єднання - лівостороннє з'єднання (left join).
У попередніх прикладах відбиралися тільки ті рядки, в яких спостерігалося відповідність
між таблицями. Однак можуть знадобитися і рядки, в яких цієї відповідності немає, наприклад,
потрібно знайти клієнтів, які не зробили жодного замовлення, або книги, які взагалі ніхто не
замовляв.
Найпростіший варіант відповіді на таке питання в MySQL передбачає використання
лівостороннього з'єднання, при якому виконується пошук рядків по вказаній умові з'єднання двох
таблиць. Якщо у зазначеній праворуч таблиці немає потрібного рядка, до результату додається
рядок з нульовими значеннями у відповідних стовпцях.
Розглянемоприклад:
select customers.customerid, customers.name, orders.orderid
from customers left join orders
on customers.customerid = orders.customerid;
Даний запит SQL використовує лівостороннє з'єднання для таблиці customers і orders. Його
синтаксис щодо умов з'єднання дещо інший; умова з'єднання зазначається у спеціальній
конструкції ONSQL-оператора.
Ось як виглядає результат запиту:
Сustomerid Name Оrderid
1 Дед Мороз NOLL
2 Шерлок Холмс NULL
3 Саша Валентей 2
4 Ева Легкая 3
5 Слава Моргунов 1
5 Слава Моргунов 4
З результату видно, що для клієнтів Дід Мороз і Шерлок Холмс немає відповідаючих
ідентифікаторів замовлень, оскільки їх поля orderid мають значення NULL.
Якщо необхідно знайти тільки тих клієнтів, які нічого не замовляли, цього можна досягти,
виконавши перевірку на наявність NULL значень у полі первинного ключа правої таблиці (в
даному випадку, orderid), оскільки з реальними значениями не можуть містити значення NULL:
select customers.customerid, customers.name
from customers left join orders
133