|
Программирование >> Руководство по sql
Первая таблица: one two Вторая таблица: three four Декартово произведение: one two three four abed a b e f с d с d с d e f Количество строк в декартовом произведении равно числу строк первой таблицы, умноженному на число строк второй таблицы. Чтобы получить декартово произведение, можно выполнить запрос на объединение, не указывая при этом условия объединения. ОПЕРАТОР UNION Хотя оператор UNION не выполняет объединение, он позволяет объединить результаты нескольких запросов. Этот оператор полезен, когда вы хотите одновременно увидеть аналогичные данные из различных таблиц. Упрощенный синтаксис оператора UNION имеет следующий вид: onepaTop select UNION onepaTop select В результате выполнения следующего запроса находятся все авторы и редакторы, живущие в Окленде или Беркли: SQL: select au fname, au lname, city from authors where city in (Oakland, Berkeley) union select ed fname, ed lname, city from editors where city in (Oakland, Berkeley) Обратите внимание, что в обоих запросах используется одинаковое число элементов с совместимыми типами данных. В качестве заголовков столбцов UNION использует имена столбцов из первого запроса: Результат: au fname au lname city Abraham Bennet Berkeley Bernard Samuelson Oakland Cheryl Carson Berkeley Christof Kaspchek Berkeley Dick Dirk Livia Marjorie Martinella Stearns Straight Stringer Karsen Green DeLongue MacFeather Oakland Oakland Oakland Oakland Berkeley Oakland Хотя каждый оператор SELECT может иметь свое собственное предложение WHERE, весь запрос может использовать только одно предложение ORDER BY. Оно должно располагаться в последнем операторе SELECT и применяться ко всему результату. В следующем запросе для получения лучше читаемых результатов назначаются новые заголовки столбцов и используется предложение ORDER BY для сортировки по названию города. SQL: select au fname as First name, au lname as Last name, city as City from authors where city in (Oakland, Berkeley) union select ed fname, ed lname, city from editors where city in (Oakland, Berkeley)
По умолчанию оператор UNION устраняет из результата повторяющиеся строки. Это может привести к определенным недоразумениям, особенно если в запросе фигурирует только один столбец. Например, в таблице authors присутствует 23 города, а в таблице publishers - 3. А при выполнении оператора UNION в результате получается только 18 строк. SQL: select count(city) from authors Результат: SQL: select count(city) from publishers Результат: SQL: select city from authors union select city from publishers Результат: city Ann Arbor Berkeley Boston Corvallis Covelo Gary Lawrence Menlo Park Nashville Oakland Palo Alto Rockville Salt Lake City San Francisco San Jose Vacaville Walnut Creek Washington Почему только 18? Оператор UNION устранил из результата все повторяющиеся строки. Чтобы отобразить все строки, после оператора UNION нужно добавить ключевое слово ALL. За дополнительной информацией обращайтесь к руководству по своей системе. Полезный трюк с оператором UNION Оператор UNION можно использовать в качестве разновидности оператора IF для отображения различных значений для одного поля, в зависимости от значений в других полях. Без оператора UNION для получения аналогичного результата потребовалось бы выполнение нескольких запросов. Пусть, например, нужно получить список книг, указав для каждой из них процентное снижение цены и новую стоимость. Стоимость книг до $7 снижается на 20 процентов, между $7 и $15 - на 10 процентов, выще $15 - на 30 процентов.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |