>_ IzzyLab

Практическое задание

SQLite: LEFT JOIN и клиенты без заказов

средне

В базе /root/shop.db есть таблицы customers(id, name) и orders(id, customer_id, amount). Нужно найти клиентов, у которых нет ни одного заказа, и записать их имена (по одному в строке) в /root/out.txt.

Подсказка по данным: у части клиентов заказов нет вовсе — именно их и надо получить.

Что потренируешь:
  • sqlite3
  • left join
  • is null
  • антиджойн
  • sql

Разбор темы

Обычный INNER JOIN возвращает только строки, у которых есть совпадение в обеих таблицах, поэтому «сироты» из левой таблицы теряются. LEFT JOIN берёт все строки левой таблицы и подставляет данные правой, а где совпадения нет — колонки правой оказываются NULL. На этом строится приём «антиджойна»: сделать левое соединение и в WHERE оставить только строки, где ключевое поле правой таблицы IS NULL. Сравнение с NULL пишется через IS NULL, а не = NULL.

Что проверяется

  1. клиент без заказов найден
  2. клиенты с заказами в результат не попали

Как это выглядит