|
Программирование >> Исключение дубликатов строк
SQL SELECT Customers.CustFirstName Customers.CustLastName AS CustFullName, Customers.CustStreetAdd ress, Customers.CustCity, Customers.CustState, Customers.CustZipCode FROM Customers UNION SELECT Employees.EmpFirstName Employees.EmpLastName AS EmpFullName, Employees.EmpSt reetAdd ress, Employees.EmpCity, Employees.EmpState, Employees.EmpZipCode FROM Employees UNION SELECT Vendors.VendName, Vendors.VendStreetAddress, Vendors.VendCity, Vendors.VendState, Vendors.VendZipCode FROM Vendors Конечно, если нужно отфильтровать список адресов для конкретного города, штата или диапазона почтовых индексов, то можно добавить условие WHERE для любого или всех операторов SELECT. Если, например, нужно создать список клиентов, сотрудников и поставидиков только в конкретном штате, то потребуется добавить условие WHERE в каоюдый из вложенных операторов SELECT. Также можно применить фильтр только к одному из операторов SELECT - создать список поставш,иков из штата Техас, объединенный со всеми клиентами и всеми сотрудниками. Сортировко UNION Что касается сортировки результата UNION, то во многих СУБД полученный набор результатов уже отсортирован по выходным столбцам слева направо. Например, в UNION трех таблиц, только что построенном в предыдуш,ем разделе, строки появятся в следуюш,ей последовательности: имя, улица и т. д. Для сортировки строк по почтовому индексу можно добавить условие ORDER BY, но хитрость состоит в том, что это условие должно располагаться в самом конце последнего оператора SELECT. Условие ORDER BY применяется к результату UNION, а не к последнему оператору SELECT. На рис. 10.10 показано, как это сделать. Как показано на диаграмме, можно повторить цикл UNION - оператор SELECT столько раз, сколько хотелось бы собрать наборов результатов, которые нужны для объединения, но условие ORDER BY должно появляться в конце. Что же нужно использовать в coIumn name или в coIumn # условия ORDER BY?. Вспомните, что сортируется вывод всех предьщущих частей выражения SELECT. Выходные имена столбцов зависят от реализации , но большинство СУБД используют имена столбцов, сгенерированные первым оператором SELECT. Рис. 10.10. Добавление спецификации сортировки к запросу UNION Также можно определить относительные номера столбцов, начиная с 1 для первого столбца вывода. В запросе, который выводит имя, улицу, город, штат и почтовый индекс, необходимо определить column # равным 5 (почтовый индекс является пятым столбцом) для сортировки по почтовому индексу. Отсортируем запрос адресного списка, используя оба метода. Вот правильный синтаксис выполнения сортировки по имени столбца: SQL SELECT Customers.CustFirstName, Customers.CustLastName AS CustFullName, Customers.CustStreetAddress, Customers.CustCity, Customers.CustState, Customers.CustZipCode FROM Customers UNION SELECT Employees.EmpFirstName I Employees.EmpLastName AS EmpFullName, Employees.EmpStreetAddress, Employees.EmpCity, Employees.EmpState, Employees.EmpZipCode FROM Employees UNION SELECT Vendors.VendName, Vendors.VendStreetAdd ress, Vendors.VendCity, Vendors.VendState, Vendors.VendZipCode FROM Vendors ORDER BY CustZipCode Конечно, предполагается, что имя столбца Вывода, который нужно отсортировать, является именем столбца из первого оператора SELECT. Использование относительного номера столбца для определения выглядит так: SQL SELECT Customers.CustFirstName, Customers.CustLastName AS CustFullName, Custome rs.CustSt reetAdd ress, Custome rs.CustCity, Customers.CustState, Customers.CustZipCode FROM Customers UNION SELECT Employees.EmpFirstName Employees.EmpLastName AS EmpFullName, Employees.EmpStreetAddress, Employees.EmpCity, Employees.EmpState, Employees.EmpZipCode FROM Employees UNION SELECT Vendo rs.VendName, Vendo rs.VendSt reetAdd ress, Vendo rs.VendCity, Vendo rs.VendState, Vendors.VendZipCode FROM Vendors ORDER BY 5 Применение UNION Скорее всего, UNION не будет использоваться так часто, как INNER JOIN и OUTER JOIN. Наиболее вероятно, что UNION будет использоваться для объединения двух или более подобных наборов результатов из различных таблиц. Хотя мооюно выполнить операцию UNION по двум наборам результатов из одной и той же таблицы или ряда таблиц, обычно такой тип задач можно решить, используя простой оператор SELECT, содержаш.ий более сложное условие WHERE. Несколько подобных примеров приведено ниже и показан наиболее эффектив>1ый способ решения этих же задач с использованием условия WHERE вместо UNION. Вот примеры типов задач, которые можно решить с использованием UNION: Показать имена и адреса всех клиентов и сотрудников . Привести список всех клиентов, заказавигих велосипед, вместе со всеми клиентами, заказавигими иглем . (Это одна из тех задач, которую также можно решить в одном операторе SELECT и сложном условии WHERE.) Создать список адресов клиентов и поставщиков . Привести список клиентов, заказавигих велосипед, вместе с поставщиками, поставляющими велосипеды , Создать список, в котором объединены агенты и эстрадные артисты . Выведите на экран дисплея объединенный список клиентов и эстрадных артистов , Создать список клиентов, которые любят современную музыку, вместе со списком эстрадных артистов, исполняющих современную музыку . Создать список адресов студентов и преподавателей .
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |