SQL: Проверка ключей, ссылок и обязательных значений — Нарушения обязательных полей и уникальности
Практическая задача по SQL на тему «Проверка ключей, ссылок и обязательных значений». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Нарушения обязательных полей и уникальности
Что уже дано
Уже заполнена employees(emp_id INTEGER PRIMARY KEY,passport_code TEXT,email TEXT,department_id INTEGER,hired_at TEXT). emp_id — положительный уникальный INTEGER. department_id — положительный INTEGER либо NULL; hired_at — валидная дата YYYY-MM-DD либо NULL. passport_code и email — TEXT либо NULL, могут повторяться; сравнение текста BINARY, регистр значим. Пустая строка является заполненным значением: проверяем только NULL. До 1000 строк. DDL намеренно не запрещает дефекты, которые предстоит найти.
Что нужно сделать
Верните emp_id каждого сотрудника, у которого passport_code, department_id или hired_at равен NULL, либо непустое в смысле NOT NULL значение passport_code встречается более одного раза. Выведите всех участников каждого дубля ровно один раз, даже если у строки несколько нарушений. email не проверяется.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 1 столбцов в указанном порядке и с этими именами: emp_id. emp_id — INTEGER, NULL в результате нет. Сортировка: emp_id ASC. Одна строка на нарушающего сотрудника. На чистой или пустой таблице результат пустой. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO employees VALUES (8,'A',NULL,1,'2024-01-01'),(2,'D','x',1,'2024-01-02'),(3,'D',NULL,1,'2024-01-03'),(5,NULL,'x',2,'2024-01-04'),(6,'F','x',NULL,'2024-01-05'),(7,'G','x',2,NULL);
- Вывод
2 3 5 6 7
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
