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

1 ... 76 77 78 [ 79 ] 80 81 82 ... 105


from titles

where title like Is Anger!) or price between

(select price from titles

where title like Is Anger%)

(select price from titles

where title like Life Without*)

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

SQL:

select title, title id, price

from titles

where price between

(select min(price)

from titles

where title id in (PS2106, PS2091))

(select max(price) from titles

where title id in (PS2106, PS2091)) Без подзапросов этот код мог бы выглядеть примерно так: SQL:

select tl.title, tl.title id, tl.price from titles tl, titles life, titles anger where life.title like Life%

and anger.title like Is Anger%

and (tl.price between life.price and

anger.price or tl.price between anger.price and life.price)

В запрос можно было бы включить и оператор OR, поскольку вы не знаете, какая из цен выще. Скобки гарантируют правильную работу OR (они нужны, чтобы ограничить количество возвращаемых строк, поскольку в этом трехтабличном запросе отсутствуют объединения).

Отображение данных в формате электронной таблицы

Таблица titleauthors соединяет авторов и названия книг. Поскольку у каждой книги может быть один или несколько авторов, эта таблица содержит двадцать пять строк для семнадцати книг: по одной строке для каждой комбинации автор-название. Десять книг имеют одного автора, щесть книг имеют двух авторов и одна книга имеет трех авторов.

Для отображения значений titleid с первым и вторым авторами в одной строке можно воспользоваться следующим коррелированным подзапросом:

SQL:

select distinct title id, (select au id

from titleauthors



where au ord = 1 and title id = t.title id) as aul,

(select au id

from titleauthors

where au ord = 2 and title id = t.title id) as au2, from titleauthors t

Этот запрос дает следующие результаты:

Результат:

title id

BU1032

409-56-7008

2Гз-4~б-

8915

PS7777

486-29-1786

NULL

РС9999

486-29-1786

NOLL

МС2222

712-45-1867

NULL

PS3333

172-32-1176

NULL

РС1035

238-95-7766

NULL

BU2075

213-46-8915

NULL

PS2091

998-72-3567

899-46-

-2035

PS2106

998-72-3567

NULL

МС3021

722-51-5454

899-46-

-2035

ТС3218

807-91-6654

NULL

BU7832

274-80-9391

NULL

РС8888

427-17-2319

846-92-

-7186

PS1372

756-30-7391

724-80-

-9391

вини

724-80-9391

267-41-

-2394

ТС7777

672-71-3249

267-41-

-2394

ТС4203

648-92-1872

NULL

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

Единственную строку с тремя авторами можно отобразить, добавив в предложение SELECT третий коррелированный подзапрос:

SQL:

select distinct title id

(select au id

from titleauthors

where au ord = 1 and title id = t.titlejd) as aul, (select au id

from titleauthors

where au ord = 2 and titlejd = t.titlejd) as au2, (select aujd

from titleauthors

where au ord = 3 and titlejd = t.titlejd) as au3,

from titleauthors t Результат:

titlejd aul au2 au3

BU1032 409-56-7008 213-46-8915 NULL

PS7777 486-29-1786 NULL NULL

PC9999 486-29-1786 NULL NULL



МС2222

712-45-1867

NULL

NULL

PS3333

172-32-1176

NULL

NULL

РС1035

238-95-7766

NULL

NULL

BU2075

213-46-8915

NULL

NULL

PS2091

998-72-3567

899-46-

-2035

NULL

PS2106

998-72-3567

NULL

NULL NULLNULL

МС3021

722-51-5454

899-46-

2035

NULL

ТС3218

807-91-6654

NULL

NULL

BU7832

274-80-9391

NULL

NULL

РС8888

427-17-2319

846-92-

7186

NULL NULNULL

PS1372

756-30-7391

724-80-

-9391

NULL

BUllll

724-80-9391

267-41-

-2394

NULL

TC7777

672-71-3249

267-41-

-2394

472-27-2349

TC4203

648-92-1872

NULL

NULL

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

SQL:

create table tau order (title id char (6), aul char (11), au2 char (11), au3 char (11))

Во-первых, воспользуемся оператором INSERT для добавления всех строк с первыми (или единственными) авторами:

SQL:

insert tau order

select title id, au id, none, none from titleauthors where au ord = 1

Вот какой результат позволяет получить выполнение оператора SELECT для

данной таблицы:

Результат:

title id

BUI0F2

409-56-7008

none

none

PS7777

486-29-1786

none

none

РС9999

486-29-1786

none

none

МС2222

712-45-1867

none

none

PS3333

172-32-1176

none

none

РС1035

238-95-7766

none

none

BU2075

213-46-8915

none

none

PS2091

998-72-3567

none

none

PS2106

998-72-3567

none

none

МС3021

722-51-5454

none

none



1 ... 76 77 78 [ 79 ] 80 81 82 ... 105

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