SQL: INTERSECT и EXCEPT — Участники SQL и Git без посещения Python

Практическая задача по SQL на тему «INTERSECT и EXCEPT». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.

Участники SQL и Git без посещения Python

Что уже дано

Уже заполнена course_visits(visit_id INTEGER PRIMARY KEY,student_id INTEGER NOT NULL,course_name TEXT NOT NULL). Все ID положительные INTEGER, visit_id уникален. course_name принимает строго SQL, Python, Git. В каждой таблице от 0 до 1000 строк, NULL нет. Один идентификатор может иметь много самостоятельных фактов одной категории. Сравнение текстовых значений BINARY, регистр значим.

Что нужно сделать

Для группы продолжения обучения нужны студенты, посещавшие и SQL, и Git хотя бы по одному разу, но ни разу не посещавшие Python. Верните их уникальные student_id. Посещение только одного из двух нужных курсов недостаточно; Python исключает студента даже при посещении обоих. Самостоятельно составьте сочетание множеств с направленной разностью. Число повторных фактов не влияет на количество строк идентификатора в результате.

Ввод и вывод

Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 1 столбцов в указанном порядке и с этими именами: student_id. student_id — INTEGER без NULL. Сортировка: student_id ASC. При отсутствии подходящих идентификаторов результат пустой. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.

Пример

Подготовка данных
INSERT INTO course_visits VALUES (1,10,'SQL'),(2,10,'SQL'),(3,10,'Python'),(4,20,'SQL'),(5,30,'Python'),(6,40,'Git'),(7,50,'SQL'),(8,50,'Git'),(9,50,'Git'),(10,60,'SQL'),(11,60,'Git'),(12,60,'Python'),(13,50,'SQL');
Вывод
50
РешениеSQL · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи