Разумеется, при таком виде объединения просто необходимо использование разных псевдонимов для каждого дубликата таблицы, иначе СУБД не сможет корректно выполнить такой запрос.
В каком случае такой вид объединения работать не будет?
Затруднительно представить объединение таблицы с самой собой в конструкциях CROSS JOIN и FULL JOIN.
Контрольные вопросы и задания для самостоятельного выполнения
1. Выбрать из таблицы CITY названия города, а также названия города, где код города = код текущего города +2.
2. Выбрать из таблицы MAN имя, фамилию человека, а также имя и фамилию человека, который старше данного человека на три года.
3. Выбрать из таблицы MAN имя, фамилию человека, а также имя и фамилию человека, который живет в том же городе.
Шаг 44. Операторы для работы с множествами — UNION, UNION ALL
Операторы языка SQL UNIONи UNION ALL позволяют сделать объединение из нескольких запросов SQL специальным образом. Если при объединении JOIN колонки из разных таблиц располагаются горизонтально друг за другом, то данные при объединении UNIONвыводятся последовательно, как один набор данных под другим.
Итак, UNION — специальный оператор языка SQL для работы с множествами.
UNION объединяет наборы данных — строчки из наборов данных, непосредственно одна за другой.
Также часто применяется оператор UNION ALL, который работает так же, как и UNION, но в отличие UNION не выводит записи, если они дублируются, то есть в выводе не будет дублей строк. UNION ALL, напротив, дубли не убирает и выводит дублирующиеся строки на экран.
Примеры
Объединим номера телефонов из таблицы AUTO и таблицы MAN с помощью UNION.
Рисунок 131. Запрос c использованием UNION: таблица MAN
Объединим номера телефонов из таблицы AUTO и таблицы MAN с помощью UNION ALL.
Рисунок 132. Запрос c использованием UNION: таблицы AUTO, MAN
Объединим данные из таблицы AUTO и таблицы AUTO1.
Важные замечания
При использовании операторов UNION есть несколько важных ограничений, а именно: данные в наборах должны быть однотипны, то есть последовательность полей и типы данных в обоих наборах должны быть одинаковы. А также, естественно, количество выводимых колонок должно совпадать в каждом наборе.
Какой оператор отрабатывает быстрее — UNION или UNION ALL?
Несомненно, в больших наборах данных быстрее будет работать UNION ALL, так как UNION убирает дубли и затрачивает на это дополнительные ресурсы системы.
Как сделать сортировку данных в запросе с UNION?
Вот пример, как бы сделал я.
Выбрать строчки из AUTO и AUTO1, отсортировать данные по COLOR.
Контрольные вопросы и задания для самостоятельного выполнения
1. Используя UNION выведите из таблицы AUTO синие автомобили и зеленые автомобили из AUTO1.
2. Используя UNION ALL, выведите из таблицы AUTO все автомобили и зеленые автомобили AUTO.
Шаг 45. Операторы MINUS, INTERSECT
Если мы знакомимся с операторами для работы с множествами, тогда нельзя не упомянуть об операторах языка SQL — MINUS и INTERSECT.
MINUS вычитает из первого набора данных второй набор данных, то есть в результате выполнения SQL-запроса с оператором MINUS на экран будут выведены лишь те строки из первого набора, которых нет во втором наборе — в подзапросе, следующем непосредственно после оператора MINUS.
Примеры
Вывести те номера телефонов, которые есть в MAN, но которых нет в таблице AUTO.
Рисунок 133. Демонстрация работы оператора MINUS
Вывести строки из таблицы AUTO, которых нет в таблице AUTO1.
Оператор INTERSECT выведет только те строки, которые есть и в первом, и во втором наборе данных, то есть пересечение множеств.
Вывести те телефоны, которые есть в таблице MAN и таблице AUTO.
Рисунок 134. Демонстрация работы INTERSECT
Вывести CITYCODE, которые есть в таблицах MAN и CITY.
Рисунок 135. Демонстрация работы INTERSECT
Так же, как и в предыдущем шаге, данные в наборах должны быть однотипны, то есть последовательность полей и типы данных в обоих наборах должны быть одинаковы. А также, естественно, количество выводимых колонок должно совпадать в каждом наборе.
Можно ли заменить оператор MINUS другими операторами языка SQL?
Читать дальше
Конец ознакомительного отрывка
Купить книгу