Программирование >>  Руководство по sql 

1 ... 48 49 50 [ 51 ] 52 53 54 ... 105


Первая таблица: 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)

order by 3

Результат: First name

Last name

City

Abraham

Bennet

Berkeley

Cheryl

Carson

Berkeley

Christof

Kaspchek

Berkeley

Martinella

DeLongue

Berkeley

Bernard

Samuelson

Oakland

Dick

Straight

Oakland

Dirk

Stringer

Oakland

Livia

Karsen

Oakland

Marjorie

Green

Oakland

Stearns

MacFeather

Oakland

По умолчанию оператор 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 процентов.



1 ... 48 49 50 [ 51 ] 52 53 54 ... 105

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