- •Varchar [(длмня)], char varying [(длина)],
- •Числовые типы данных
- •Дата и время
- •Неопределенные или пропущенные данные (noll)
- •Используемые термины и обозначения
- •Команды манипулирования данными
- •3.2. Использование подзапросов в insert
- •Создание таблиц базы данных
- •Создание объектов базы данных
- •Зміна структури таблиці
- •Внимание
- •Зміна структури таблиць
- •Заняття 4. Вставка записів у таблиці
- •Ограничение not null
- •2.4. Листинг 2.4. Команда создания таблицы Orders
- •Перегляд окремих записів та окремих полів у таблиці
- •Використання кількох умов відбору записів
- •Ітоги . Що ми узнали про перегляд даних у таблицях
- •Лекція на тему: Оновлення та вилучення записів в субд MySql.
- •3.2. Использование подзапросов в insert
- •Вилучення записів з таблиць
- •Лекція на тему: Вибірка даних з субд MySql.
- •Просте об'єднання двох таблиць
- •Самостійно.
- •Об'єднання трьох і більше таблиць
- •Об'єднання таблиць за остачею
- •Підсумок
- •Лекція на тему: Групування даних. Запити з обчисленнями.
- •Обчислення середнього значення: функція avg
- •Підрахунок кількості записів: функція count
- •Підрахунок суми значень: функція sum()
- •Пошук найбільшого та найменшого значення: функції max та min
Об'єднання таблиць за остачею
У наведених вище прикладах з таблиць відбиралися лише ті записи, для яких існують відповідні записи в інших таблицях. Але, на практиці може виникнути необхідність знайти й ті записи, для яких в інших таблицях немає відповідних записів - наприклад, необхідно знайти клієнтів, які не зробили жодного замовлення, або товари (книги), які ніхто не замовляв. У таких випадках для побудови запитів застосовують об'єднання таблиць за остачею.
Нехай необхідно одержати перелік всіх записів, що містяться у полі поле_А таблиці таблиця_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)
Самостійно. Створіть і виконайте запити:
Список імен та телефонів всіх клієнтів, які не замовили жодної книги
Список всіх книг, які не замовив жоден клієнт.
