Программирование >>  Исключение дубликатов строк 

1 ... 97 98 99 [ 100 ] 101 102 103 ... 152


При изучении диаграммы на рис. 10.2 у вас может возникнуть вопрос, ддя чего здесь указано необязательное ключевое слово ALL. Когда это слово не включается, СУБД исключает все строки, имеющие повторяющиеся значения. Например, если присутствуют RecipeClassDescription из Dessert и RecipeTitle из Dessert, то в окончательном наборе результатов будет получена только одна строка Dessert. Наоборот, при указании ключевого слова ALL повторяющиеся строки не исключаются.

Для выполнения UNION два набора результатов должны удовлетворять определенным требованиям. В первую очередь каждый из двух операторов SELECT, связываемых в UNION, должен иметь одинаковое количество выходных столбцов, определенных после ключевого слова SELECT, так что набор результата будет иметь то же самое количество столбцов. Во-вторых, каждый соответствующий столбец должен обладать свойством, которое в стандарте SQL называется допускающим

сопоставление

Внимание! Полный стандарт SQL-92 позволяет соединять в UNION множества, не являющиеся подобными. Однако большинство коммерческих реализаций поддерживают базовый стандарт, или стандарт начального уровня , описываемый здесь. Возможно, ваша СУБД позволяет использовать UNION более творчески.

Допускается сравнение символьных значений только с символьными значениями, цифровых значений с цифровыми значениями, а значений дата/время со значениями дата/время. Хотя некоторые системы баз данных допускают смешение типов данных при сравнении, сравнение символьного значения, например John , с цифровым значением, например 55, обычно не имеет смысла. Чтобы сравнение двух столбцов в условии WHERE имело смысл, эти столбцы должны допускать сопоставление . Именно это подразумевается стандартом, когда он требует, чтобы столбцы из одного набора результатов, которые нужно соединить в UNION со столбцом из другого набора результатов, имели тип данных, допускающий сопо-

ставление

Запись запросов с UNION

в предыдущих главах, касающихся INNER JOIN и OUTER JOIN, мы изучали построение оператора SELECT с использованием условий SELECT, FROM и WHERE. Основное внимание было сосредоточено на построении сложных соединений в условии FROM. Для построения UNION необходимо пойти дальше, до выраоюений SELECT, которые связывают два или более операторов SELECT в операторе UNION. Каждый оператор SELECT может иметь как простое, так и сложное условие FROM, которое требуется для выполнения задания.



Использовонив простого опероторо S€L€CT

Начнем с простого: запишем UNION двух простых операторов SELECT, которые используют одну таблииу в условии FROM. На рис. 10.4 представлена синтаксическая диаграмма для UNION двух простых операторов SELECT.

шшшшш


ТиптировоиноФ выражение -j-

piiM <t.


from - имя табА14цы

union

Ь feJ IklbAik em

DISTINCT J

Типтироваиное выражение

: ;

from - имя таблицы

Рис. 10.4. Использование UNION для объединения двух простых

операторов SELECT

В отличие от случая, когда запрашивался JOIN, сейчас все выполняется в операторе UNION, который определяется для объединения двух операторов SELECT, Если опущено необязательное ключевое слово ALL, СУБД исключит все найденные повторяющиеся строки. Это означает, что набор результата из запроса может иметь меньше строк, чем сумма строк, возвращенных из каждого набора результатов, участвующего в UNION. Однако, если ключевое слово ALL включено, количество строк в наборе результатов будет равно сумме количества строк в двух участвующих наборах результатов.

Внимание! Стандарт SQL также определяет условие CORRESPONDING, которое можно поместить после ключевого слова UNION для указания того, что нужен UNION, выполненный путем сравнения столбцов, имеющих одинаковые имена в каждом из наборов результата. Также можно еще больше ограничить множество сравнения, включив конкретный список имен столбцов после ключевого слова CORRESPONDING. Нам не удалось найти эту возможность в основных коммерческих реализациях, но не исключено, что она будет поддерживаться в следующих версиях.



Customers

CustomerlD PK CustFirstName CustLastName

CustStreetAddress CustCity CustState CustZipCode CustPhoneNumber

Vendors

VendorlD PK

VendName VendStreetAddress VendCity VendState VendZipCode VendPhoneNumber VendFaxNumber

VendWebPaga VendEmailAddress

Рис. 10.5. Таблицы Customers

и Vendors из учебной базы данных Sales Order

Создадим простой UNION - список адресов клиентов и поставщиков из учебной базы данных Sales Order (Заказы на закупку). На рис. 10.5 представлены две нужные таблицы.

М.ежду этими двумя таблицами нет естественной связи, но они обе содержат столбцы, имеющие подобное значение и одинаковый тип данных. Для списка адресов требуются имя, наименование ули-

цы, город, штат и почтовый индекс. Поскольку все эти поля в обеих таблицах представляют собой сопоставимые символьные данные, не стоит беспокоиться о типах данных. (Некоторые проектировщики БД могут представить почтовый индекс как число, но в данном случае все будет в порядке, пока столбец с почтовым индексом из одной таблицы имеет тип данных, сопоставимый с типом данных столбца с почтовым индексом из второй таблицы.)

Одна из проблем состоит в том, что в таблице Vendors имя представлено одним столбцом, а в Customers - двумя: CustFirstName и CustLastName. Чтобы получить одинаковое количество столбцов из обеих таблиц, нужно построить выражение по двум столбцам из Customers для получения выражения с одним столбцом, чтобы выполнить UNION с одним столбцом для имени из Vendors. Построим запрос.

Внимание! В данной главе будет использоваться метод Запрос/Преобразование/Уточнение/SQL , введенный в главе 4.

Build а single mailing list that consists of the name, address, city, state, and zip for customers and the name, address, city, state.

and zip for vendors .

( Построить единый список адресов, который состоит из имени, адреса, города, штата и почтового индекса для клиентов и имени, адреса, города, штата и почтового индекса для поставщиков ,)

Преобразование: Select customer full name, customer address, customer

city, customer state, and customer zip code from the customers table combined with vendor name, vendor address, vendor city, vendor state, and vendor zip code from the vendors table

(Выбрать полное имя клиента, адрес клиента, город клиента, штат клиента и почтовый индекс клиента



1 ... 97 98 99 [ 100 ] 101 102 103 ... 152

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика