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

1 ... 45 46 47 [ 48 ] 49 50 51 ... 105


Псевдонимы в списке таблиц улучшают читаемость запросов

Чтобы ускорить ввод запросов и сделать их более понятными, в списке таблиц можно определить псевдонимы таблиц (сокращенные имена). Это особенно полезно при выполнении объединения по столбцам с одинаковыми именами, когда всякий раз при их использовании приходится указывать имена соответствующих таблиц.

Вот как можно использовать псевдонимы в запросе, с помощью которого находятся авторы, живущие в одном городе с каким-либо издателем:

SQL:

select au lname, au fname from authors a, publishers p where a.city = p.city

Результат:

au Iname au fname

Carson Cheryl

Bennet Abraham

Если вы хотите вывести и название города, соответствующий столбец нужно поместить в список выбора вместе с одним из псевдонимов таблиц.

ОПРЕДЕЛЕНИЕ УСЛОВИЙ ОБЪЕДИНЕНИЯ

Объединение обычно основывается на равенстве или совпадении значений в объединяемых столбцах. Объединение, основанное на равенстве, легко распознать по логическому оператору = в соответствующей объединению части предложения WHERE. Объединения также могут быть построены и на других условиях: любом логическом операторе или специальном операторе для определения внешнего объединения (outer join), которое мы обсудим далее.

Помимо равенства, для задания условия могут использоваться следующие логические операторы:

Символ

Значение

>

Больше чем

>=

Больше или равно

<

Меньше чем

<=

Меньше или равно

!= (или О)

Не равно

В Transact-SQL также имеются операторы !> и !<, соответственно эквивалентные операторам <= и >=.

На жаргоне реляционных баз данных объединения, построенные только на операторах сравнения, называются theta-объединениями.

Объединения, основанные на равенстве

Объединения, основанные на равенстве, как бы сшивают столбцы из участвующих в объединении таблиц.

В следующем запросе находятся названия книг, связанные с определенным номером заказа:

SQL:

select title, t.title id, sonum, sd.title id from titles t, salesdetails sd where sonum =14 and t.title id = sd,title id



Результат: title

t.title id

sonum

sd.title id

Computer Phobic and Non-Phobic PS1372 14

Individuals: Behavior Variations Life Without Fear PS2106 14

Prolonged Data Deprivation: PS3333 14

Four Case Studies

Emotional Security: A New PS7777 14

Algorithm

PS1372

PS2106 PS3333

PS7777

Так как в данном случае нет никакой необходимости в дублировании информации, из результата можно изъять один из столбцов объединения. Такое отображение называется естественным объединением (natural join). Предыдущий запрос примет следующий вид:

SQL:

select title, t.title id, sonum from titles t, salesdetails sd where sonum =14 and t.title id = sd.title id

Результат:

title title id sonum

Computer Phobic and Non-Phobic Individuals: PS1372 Behavior Variations

Life Without Fear PS2106

Prolonged Data Deprivation: Four Case Studies PS3333

Emotional Security: A New Algorithm PS7777

14 14 14

Теперь мы получили естественное объединение, так как столбец titleid не появляется в результатах дважды. В некоторых системах естественное объединение выполняется по умолчанию, что упрощает восприятие результатов. Не имеет значения, из какой таблицы включается столбец titlejd, однако в списке выбора вы должны обязательно указать его принадлежность определенной таблице.

Объединения, не основанные на равенствах

Объединения, не основанные на равенствах, могут быть описаны в терминах используемых в них условий, например объединение меньще чем , объединение больще чем и т.д. В следующем примере объединения типа меньще чем находятся все заказы, отправленные после получения денег:

SQL:

select distinct s.sonum, s.stor id, s.sdate, sd.date shipped from sales s, salesdetails sd where s.sdate < sd.date shipped and s.sonum = sd.sonum

Результат: sonum

1 2 3

stor id

7066 7067 7131

sdate

13~.09~85~

14.09.85

14.09.85

date shipped

l5.09 .85 15.09.85 18.09.85



7131

14.09.85

18.09.85

8042

14.09.85

22.09.85

6380

13.09.85

20.09.85

8042

11.03.88

28.03.88

7896

28.10.87

29.10.87

7896

12.12.87

12.01.88

8042

22.05.87

24.05.87

7131

29.05.87

13.06.87

7067

15.06.87

17.06.87

7896

21.02.88

15.03.88

В следующем примере по столбцу titlejd объединяются таблицы titles и roysched: SQL:

select t.title id, t.ytd sales, r.royalty from titles t, roysched r where t.title id = r.title id and t.yt5 sales >=r.lorange and t.ytd sales <= r.hirange

Результат:

title id

ytd sales

royalty

PC8888

4095

BU1032

4095

PS7777

3336

PS3333

4072

BUllll

3876

MC2222

2032

0.12

TC7777

4095

TC4203

15096

0.14

PC1035

8780

0.16

BU2075

18722

0.18

PS2091

2045

0.12

PS2106

MC3021

22246

TC3218

BU7832

4095

PS1372

Объединение таблицы с самой собой: самообъединение

Самоообъединение является другим вариантом объединения на основе равенства. При самообъединении сравниваются значения внутри столбца одной таблицы.

Например, самообъединение можно использовать для поиска авторов, живущих в Окленде, Калифорния, и имеющих одинаковые почтовые коды. Так как в этом запросе таблица authors объединяется сама с собой, то она выступает сразу в двух ролях. Поэтому для различения этих ролей в списке таблиц предложения FROM ей нужно задать два разных псевдонима - aul и au2. Эти псевдонимы также будут использоваться при задании имен столбцов. Вот как выглядит этот запрос:

SQL:

select aul.au fname, aul.au lname, aul.zip



1 ... 45 46 47 [ 48 ] 49 50 51 ... 105

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