Да, например оператором IN или NOT IN, вот пример.
Вывести те номера телефонов, которые есть в MAN, но которых нет в таблице AUTO.
Можно ли использовать NOT с операторами MINUS и INTERSECT?
Нет, синтаксис SQL не позволяет этого сделать.
Контрольные вопросы и задания для самостоятельного выполнения
1. Найдите, какие строки есть в AUTO, но нет в AUTO1. Используйте MINUS.
2. Найдите совпадение из AUTO и AUTO1. Используйте INTERSECT.
Шаг 46. Повторение материала. Сочетание операторов множеств и предикатов
Повторим материалы предыдущего занятия. Продемонстрируем, как можно сочетать предикаты ANY, SOME, ALL с подзапросами и операторами MINUS, INTERSECT, UNION.
Логические операторы можно эффективно сочетать с различными типами подзапросов, а также с MINUS, INTERSECT, UNION. Приведем несколько примеров таких эффективных сочетаний.
Пример 1.Выберите из таблицы AUTO автомобили, которые принадлежат людям, для которых нет соответствия в таблице CITY, используйте MINUS.
Данный запрос не вернул ни одной записи.
Пример 2.Немного переделаем задание.
Выберите из таблицы AUTO автомобили, которые принадлежат людям, для которых есть записи в таблице CITY, где PEOPLES <100 000, используйте MINUS.
Запрос демонстрирует использование MINUS с подзапросом.
Рисунок 136. Демонстрация работы MINUS с подзапросом
Пример 3.Выберите из таблицы AUTO записи, для которых есть соответствие в таблицах MAN и MAN1.
Рисунок 137. Демонстрация работы ANY
При использовании операторов MINUS, UNION, INTERSECT необходимо следить, чтобы наборы данных совпадали, чтобы наборы колонок и типы данных в этих колонках были идентичны.
Может ли оператор UNION использоваться в запросах-группировках?
Да, вот пример такого запроса:
Можно ли создать запрос, который бы работал со вложенным UNION?
Пример подобного запроса:
Чем можно заменить MINUS INTERSECT?
Запросами с использованием подзапросов EXISTS и IN. Попробуйте написать подобные запросы самостоятельно.
Контрольные вопросы и задания для самостоятельного выполнения
1. Повторите материалы данного шага.
2. Объясните использование операторов работы с множествами (UNION, MINUS, INTERSECT) совместно с подзапросами.
3. Напишите запрос, выбирающий записи из MAN, для которых есть записи в таблицах AUTO и AUTO1.
4. Выберите из таблицы AUTO записи, для которых есть соответствие в таблице MAN и которых нет в MAN1.
Шаг 47. Обновление данных и удаление данных с использованием подзапросов
Сложные подзапросы, которые мы изучали в предыдущих шагах, очень часто используются в командах обновления данных и удаления данных.
Обновление строк UPDATE
Напишем запрос для обновления данных в таблице MAN, где люди проживают в городах с населением более миллиона жителей.
Задание звучит следующим образом.
Обновите возраст людей в таблице MAN (YEAROLD +1) у тех людей, которые проживают в городах с населением (PEOPLES) более миллиона человек.
Обновите возраст людей в таблице MAN (YEAROLD +1) только у тех людей, для которых людей с таким же возрастом нет в таблице MAN.
Обновите возраст людей, чье имя начинается с буквы «О», на сумму всех возрастов людей из таблицы MAN с именем Алексей.
Удаление строк DELETE
Подобный синтаксис можно использовать и при удалении данных с помощью команды DELETE.
Например, удалите из таблицы AUTO1 все записи, которых нет в таблице AUTO.
Команды UPDATE и DELETE требуют завершения командой COMMIT для фиксации изменений в базе данных.
Следует с особой осторожностью относиться к выполнению данных команд, так как после их выполнения восстановить данные в первоначальном виде может быть довольно сложно.
Важный лайфхак: лично я сначала всегда пытаюсь написать запрос SELECT, который вернет мне нужные данные, а уже потом преобразую этот запрос в команду UPDATE или DELETE.
Понятно, что различные типы подзапросов можно использовать с операторами UPDATE, DELETE, а как воспользоваться конструкциями MINUS и INTERSECT для этих команд?
Да, это возможно. Например, удалите из таблицы AUTO1 все записи, которых нет в таблице AUTO.
Контрольные вопросы и задания для самостоятельного выполнения
Читать дальше
Конец ознакомительного отрывка
Купить книгу