Программирование >>  Реализация баз данных 

1 ... 59 60 61 [ 62 ] 63 64 65 ... 162


178 выборка к модификации пых Глава 6

Использование левых внешних соедин1гний.

Результирующий набор, сгенерированный оператором SELECT, в который входит левое внешнее соединение, состоит из всех строк таблицы, на которую ссылается конструкция LEFT OUTER JOIN, расположенной слева от этой конструкции. Из таблицы, которая расположена справа, извлекаются только те строки, которые соответствуют условию соединения.

В следующем примере в операторе SELECT для получения имен, фамилий авторов и возможно) названий всех издательств, расположенных в тех же городах, где проживают авторы, применяется левое внешнее соединение: JSE Pubs , .

SELECT а. Au fname, a.Aulname, p.Pub naipe fROM Authors a LEFT OUTER JOI stiers p

ON a. City = p.City ORDER BY I. Pub nafiie ASC, a. Au.ln.jme ASC, a. Au fname ASC

В результирующем наборе этог oca содержится список имен всех авторов из таблицы Authors. Однако в нег йдут только те издательства, которые расположены в тех же городах, где живут авторы. Если издательство расположено в каком-то ином городе, в столбец Pubname результирующего набора щается пустое значение. Использование правых внешних соединений

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

RIGHT OUTER Из таблицы, которая расположена слева, извлекаются только те

строки, которые соответствуют соединения.

В следующем примере в операторе SELECT правое внешнее соединение применяется для списка названий и имен с фамилиями авторов, если последние

проживают в том же городе, где расположено издательство:

USE Pubs

SELECT а.Au fпаше I a.Au lname, pPubname *.

FROM Authors a RIGHT OUTER JOIN Publishers p - ,

ON d.City = p. City ORDER BY р.РиЬ лате ASC, a. Aulnair.e ASC, a. Au.fnarae ASC

В результирующий набор этого войдут названия всех издательств из таблицы

Publishers, а также имена тех которые живут в тех же городах, где расположены

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

Результирующий набор, оператором SELECT, в котором имеется пол-

ное внешнее соединение, состоит из всех строк обеих таблиц независимо от того, указано ли в таблицах соответствующие значения (заданные условиями соединениями),

В следующем операторе SELECT полное внешнее соединение используется для получения списка названий издательств, имен и фамилий авторов:

USE Pubs

SELECT a.Au.fname, a.AuJ.name, p.Pub name > .

EROM Authors a LULL OUTER JOIN Piblishers p . - .

ON a. City = p.Ciiy ORDER BY p.Pub name ASC, a.Au lnatrie ASC, a.Au.fname ASC



Занятие 2 Выборка данных с помощью етодих \ 79

тарующем наборе этого запроса слены названия все этельств из таблицы Publishers и всех авторов из шблииы Authors. Если автор живет не в том городе, где расположено издательство, в столбцы результирующего набора name и Au Iname возвращается пустое значение. Если издательство расположено не в том же городе, где живет автор, мбец Pubname результирующего набора также возвращается пустое значение. При соответствии условию соединения заполняются все столбцы результирующего набора.

Определение подзапросов внутри операторов SELECT

Подзапросом называется возвращающий единственное значение оператор SELECT, вложенный в другой оператор SELECT, INSERT, UPDATE, DELETE или в другой подзапрос. Подзапрос разрешается применять в любом месте, где разрешено использование выражения. Подзапрос также называется внутренним запросом или внутренней выборкой, а содержащий подзапрос оператор - внешним запросом или внешней выборкой.

В следующем примере подзапрос вложен в конструкцию WHERE внешнего оператора

SELECT:

USE .Jorthwind ,

SELECT ProductName . .

FROM Products

WHERE UnitPnce =

SELECT UnitPrice

FROM Products

WHERE ProductMame = Sir Rodneys Scones )

Встроенный оператор SELECT сначала определяет значение UnitPrice для товара под названием Si neys Scones , которое равно $10, После этого значение $10 используется во внещне\! операторе SELECT для извлечения имен всех продуктов, цена которгх S10.

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

запроса).

В некоторых операторам ct-SQL подзапрос обрабатывается так. как если бы это был независимый запрос и его результаты подставляются во внешний запрос (хотя реальный способ обработки SQL Server операторов Transact-SQL с подзапросами может отличаться).

Типы подзапросов

Подзапросы можно задавать в самых различных местах оператора SELECT. Однако операторы, в составе которых имеется подзапрос, обычно составлены в одном из следующих форматов:

УЯЕКЕ<выражение> NOT] Ш {<подэапрос>)

WHERE<в*аженце> <оператор сравнения> [ANY ALL] {<подзапрос>)

WHERE [NOT] ЕХ18Т8(<яойзй /?ос>)

Подзапросы с ключевыми словами IN или NOT IN

Результатом подзапроса с ключевым словом IN (или NOT IN) является список, состоящий из нуля или более значений. Результат, который возвращает подзапрос, используется внешним запросом.



-J80 Выборка и модификации Глава б

В следующем примере подзапрос вложен в конструкцию WHERE и используется ключевое слово IN; .

USE Pubs

SELECT Pub name ;

FROM Publishers WHERE Pub ld IN

SELECT

FROM Titles

where Type = business

Сначала внутренний запрос возвращает номера идентификаторов издательств, выпустивших литературу, которая еде л г на типом business (1389 и 0736). Затем эти значения подставляются во внешний запрос, который находит названия, номе-

рам идентификаторов из таблицы Publishers.

Подзапросы с ключевыми словами NOT IN также возвращают список, из

нуля или более значений. Эти запросы абсолютно аналогичны подзапросам с ключевым словом IN и отличаются только тем, что ключевое слово IN заменено на NOT

Подзапросы с операторами сравнения

В операторах сравнения, используемых с подзапросами, разрешается применять ключевые слова ALL или ANY. Ключевое слово SOME в стандарте считается эквивалентом ANY. Подзапросы в операторах сравнения возвращают нуль или более значений и

могут включать в себя конструкции GROUP BY или HAVING. Эти подзапросы можно переопределить дащью ключевого мова EXISTS.

Ключевые слова ALL и ANY сравнивают скалярное значение с набором значений одного столбца. Ключевое слово ALL применяется ко всем значениям, а ключевое слово ANY - как минимум к одному.

В следующем примере ключевое слово ANY используется с оператором сравнения больше (>):

USE Pubs

SELECT Title

FROM Titles ,

where Advance > any

Select Advance

FROM Publishers INNER JOIN Titles ON Titles. PubJd = Publlshes, Puu id

AND Pub naire = Algodata Infosystems

Этот оператор находит издания, которые авансированы суммой, превышающей минимальную сумму аванса, уплаченного nlbsystems (в этом случае он составляет $5 000). Конструкция WHERE во внешнем операторе SELECT содержит подзапрос, с помощью соединения извлекающий суммы аванса для Algodata Infosystems. После этото минимальная сумма аванса используется для определения изданий, которые необходимо извлечь из таблицы Titles.



1 ... 59 60 61 [ 62 ] 63 64 65 ... 162

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