|
Программирование >> Исключение дубликатов строк
из таблицы Клиенты , в соединении с именем поставщика, адресом поставщика, городом поставщика, штатом поставщика и почтовым индексом поставщика из таблицы Поставщики ) Уточнение: Select customer full name, customer address, customer city, customer state, and customer zip code from ti customers table combined with UNION vendor name, vendor address, vendor city, vendor state, attd vendor zip code from the vendors table (Выбрать полное имя кшента, адрес клиента, город клиента, штат клиента, почтовый индекс клиента из Клиенты UNION (в соединении) с именем поставщика, адресом поставщика, городом поставщика, штатом поставщика, почтовым индексом поставщика из Поставщики ) SQL SELECT Customers.CustLastName Customers.CustFirstName AS MailingName, Customers.CustStreetAddress, Customers.CustCity, Customers.CustState, Customers.CustZipCode FROM Customers UNION SELECT Vendors.VendName, Vendors.VendStreetAddress, Vendors.VendCity, Vendors.VendState, Vendors.VendZipCode FROM Vendors Каждый оператор SELECT генерирует пять столбцов, но мы должны использовать выражение для объединения двух столбцов с именем в таблице Клиенты в один столбец. Все столбцы из обоих операторов SELECT являются символьными данными, поэтому отсутствует проблема обеспечения их сопоставимости. Может быть, вы хотите знать, какие имена будут иметь столбцы, которые представляют вывод для этого запроса. Хороший вопрос! Стандарт SQL определяет, что когда имена соответствующих столбцов одинаковы (например, имя четвертого столбца первого оператора SELECT и имя четвертого столбца второго оператора SELECT), то оно является именем выходного столбца. Если имена столбцов различаются (как в уже построенном нами примере), Стандарт SQL устанавливает, что имя зависит от реализации и отличается от <column name> любого иного столбца любой таблицы, ... содержащейся в операторе SQL . На обычном языке это означает, что СУБД решает, какие имена назначить выходным столбцам. Система соответствует стандарту SQL до тех пор, пока имя не появляется в позиции некоторогодругого столбца в одном из наборов результатов, участвующих в UNION. Большинство коммерческих СУБД по умолчанию определяют их именами столбцов в первом операторе SELECT. Для предыдущего примера это означает, что имена столбцов будут MailingName, CustStreetAddress, CustCity, CustState и CustZipCode. Здесь в UNION не включено ключевое слово ALL. Хотя маловероятно, что фамилия и имя клиента совпадут с именем поставщика (не беспокойтесь про адрес, город, штат и почтовый индекс), желательно все же избежать повторяющихся почтовых адресов. Если вы уверены, что какие-либо повторения в двух или более множествах в UNION отсутствуют, то можете включить ключевое слово ALL. Использование ALL ускорит выполнение запроса, поскольку системе базы данных не потребуется устранять повторения. Объединение сложных оперотороо S€L€CT Операторы SELECT, объединенные в операторе UNION, могут быть настолько сложными, насколько это требуется для выполнения задачи. Единственное ограничение состоит в том, что оба оператора SELECT должны, естественно, обеспечить одинаковое количество столбцов, а столбцы в каждой соответствующей позиции должны иметь сопоставимые типы данных. Предположим, что нужен список всех клиентов и-заказанных ими велосипедов, объединенный со всеми поставщиками и поставляемыми ими велосипедами. Вначале определим все необходимые таблицы. На рис. 10.6 представлены таблицы, необходимые для связывания клиентов с товарами. * > -г *т- mm -г CustomerlD CustFirstName CusttastName .j*te<.M.;--.-:->w-b -:4-;.:.>x-H>>bw>< W CustCity CustSiaie Cusl PhoneNumber OrderN umber Ort:lerDate CustomerlD EmployeQJD PK hH- FK FK ProductNumber QuotedPrlce OuaniityOrdered : H+~ ProductNumber PK t I PfodudName [ ( I ProdudDescription I I RetaliPrice I QuantltyOrHand j CategorylD FK Рис. 10.6. Отношения между таблицами, необходимые для связывания клиентов с заказанными ими товарами VendorlD VendEmail Рис. 10.7 I------...... VendorlD PK I PK f Отношения между таблицами, необходимые для связывания поставщиков с продаваемыми ими товарами Похоже, что требуется связать четыре таблицы. Если нужно найти поставщиков и продаваемые ими товары, то потребуются таблицы, представленные на рис. 10.7. Можно использовать вложение нескольких условий JOIN, чтобы связать некоторое количество таблиц вместе для сбора информации, требуемой для решения сложной задачи. На рис. 10.8 представлено вложение для трех таблиц. ес сг*т lDISTlNCT* Типизированное выражение - FROM имятоблицы INNER JOIN имялаблицы INNER ~l JOIN имя тоблицы ON - )AOBH0 поиска J/i05*f e поиска WHERE - Условие поиска Рис. 10.8. Соединение в JOIN трех таблиц Теперь у нас имеются все детали, необходимые для решения головоломки. Можно построить составной INNER JOIN для извлечения информации клиента, вставить ключевое слово UNION, а затем построить составной INNER JOIN для информации поставщика. List customers and the bikes they ordered combined with vendors and the bikes they sell , ( Привести список клиентов и заказанных ими велосипедов, вместе с поставщиками и продаваемыми ими велосипедами .) Преобразование: Select customer full name and product name from the customers table jpined with the orders table on customer ID, then joined with the order details table on order number, and then joined with the products table on product number where product name contains bike, combined with select vendor name and product name from the
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |