Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MySql.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
467.46 Кб
Скачать

Об'єднання таблиць за остачею

У наведених вище прикладах з таблиць відбиралися лише ті записи, для яких існують відповідні записи в інших таблицях. Але, на практиці може виникнути необхідність знайти й ті записи, для яких в інших таблицях немає відповідних записів - наприклад, необхідно знайти клієнтів, які не зробили жодного замовлення, або товари (книги), які ніхто не замовляв. У таких випадках для побудови запитів застосовують об'єднання таблиць за остачею.

Нехай необхідно одержати перелік всіх записів, що містяться у полі поле_А таблиці таблиця_1, для яких у полі поле_В таблиці таблиця_2 немає відповідних записів. Для цього необхідно виконати об'єднання таблиць 1 і 2 за остачею. Відповідний запит на об'єднання таблиць за остачею має вид:

SELECT таблиия_1. поле_А, таблиця__2 . поле _В FROM таблиця_ 1 LEFT JOIN таблиця_2 ON таблиця__1. ID = таолиця_2 . ID;

Цей запит SQL виконує об'єднання за остачею для двох таблиць - це таблиця_1 та таблиця 2. Він дозволяє переглянути записи у полі таблиця_1. поле_А та відповідні їм записи у полі таблиця 2 . поле В, для яких виконується умова об'єднання: таблиця_1. ID = таблиця_2.ІD (тобто значення поля таблиця І.ІD співпадає із значенням у полі т таблиця 2 . ID). Якщо у полі таблиця_ 2 . поле В немає відповідного і.ішісу, то замість нього у результат запиту додається значення NULL.

  • Щоб випробувати запит на об'єднання з остачею додайте у таблицю Customers двох нових клієнтів з такими даними: Михайло Михайленко, м. Полтава вул. Половка 12 кв. 12, тел. 56-34-12 Федор Федоренко, м. Лубни вул. Перемоги 10 кв. 1, тел. (063) 5-66-77

  • Визначіть, хто з клієнтів не зробив жодного замовлення. Для цього виконайте відповідний запит на об'єднання з остачею двох таблиць customers та orders.

  • Інструкція на запит:

mysql> SELECT customers.name, orders.order ID

-> FROM customers LEFT JOIN orders

-> ON customers.customerID=orders.customer ID;

Результат запиту:

name

1 orderID

Иван Иваненко

1 2

Петро Петренко

1 3

Сидор Сидоренко

1 1

Сидор Сидоренко

1 4

Михайло Михайленко

1 NULL

Федор Федоренко

1 NULL

6 rows in set (0.11 sec)

Результат запиту показує, що клієнтам Михайло Михайленко та Федор Федоренко не відповідає жоден номер замовлення orderlD, оскільки відповідні їм order ID мають значення NULL. Тобто вони не зробили жодного іамовлення.

Виведіть список тільки тих клієнтів, хто не зробив жодного замовлення. Для цього у попередній запит необхідно додати інструкцію WHERE orders . orderlD is NULL. Ця інструкція використовує умову відбору, яка дозволяє з усього списку клієнтів, створеного у попередньому запиті вибрати лише тих, які мають значення orders. orderlD рівне NULL (тобто тих, хто не зробив жодного замовлення). Отже, інструкція на запит має бути такою:

mysql> select customers.name

-> from customers left join orders

-> on customers.customerlD = orders.customerID

-> where orders.orderlD is NULL;

Peзультат запиту:

I name I

І Михайло Михайленко I

I Федор Федоренко I

6 rows in set (0.00 sec)

Самостійно. Створіть і виконайте запити:

  1. Список імен та телефонів всіх клієнтів, які не замовили жодної книги

  2. Список всіх книг, які не замовив жоден клієнт.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]