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

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


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

Когда подзапрос содержит ключевое слово EXISTS, он функционирует как проверка наличия той или ино адости. Конструкция WHERE внешнего запроса проверяет, есть

оки. которые ашает подзапрос. Этот подзапрос на самом деле не выдает никаких данных, вместо этого он значение TRUE или FALSE.

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

подзапрос и ключевое слово EXISTS:

иЗЕ Pubs

SELECT Pub name .

FROM Publishers WHERE EXISTS (

SELECT * FROM Titles WHERE Titles. Pub id = Publishers.Pub id AND Type = business

)

Чтобы определить результат этого запроса, необходимо по очереди рассмотреть название каждого издательства. В этом случае первым будет издательство Algodata tems с идентификационным номером 1389. Есть ли в таблице Titles строки, значение поля РпЬ Jd которых равно i .9, а тип - business? Если да, то Algodata Infosystems должно быть среди выбранных значений. Этот процесс для каждого названия издательства.

Ключевые слова NOT EXISTS работают аналогично EXISTS за исключением того., что условие конструкции WHERE, где используется NOT EXISTS, выполняется, когда подзапрос не возвращает ни одной строки.

Обобщение данных

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

ные отчеты. Для этого применяют операторы CUBE или ROLLUP, которые являются частью конструкции GROUP BY оператора SELECT. Кроме того, можно использовать операторы COMPUTE и COMPUTE BY, которые также связаны с конструкцией GROUP BY.

Операторы COMPUTE и COMPUTE BY поддерживаются ради обратной совместимости. Более подробно об этих операторах рассказано в SQL Server Books Online.

Обобщение данных с помощью оператора CUBE

Оператор CUBE генерирует результирующий набор в виде многомерного куба - расширения фактических данных или данных, регистрирующих отдельные события. Такое расширение основано на столбцах, которые хочет проанализировать пользователь. Столбцы

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

В следующем операторе SELECT в GROUP BY использован оператор

CUBE:

USE Pubs

SELECT SUBSTRING(Title, 1, 65) AS Title,

SUmqty) AS Oban Lily FROM Sales INNER JOIN Titles

ON Sales. Tltle id = Titles. TltleJd

GROUP BY Title



182 Выборка икация данных Глава б

WITH CUBE л. . - ... -й ..- -.

ORDER BY Title

Оператор SELECT соответствует отношению один ко многим между книгами и количеством проданных экземпляров каждой книги. С помощью оператора CUBE он воз-дополнительную строку. Она содержит пустое значение в столбце Title результирующего набора и представляет все шачения столбца Title таблицы Titles. Результирующий набор значения количества проданных экземпляров каждой книги и суммарное количество проданных экземпляров всех книг. В этом случае операторы CUBE и возвращают один и тот же результат.

Обобщение данных с помощью оператора ROLLUP

Оператор ROLLUP генерирует отчеты с итогами и промежуточными итогами. Создаваемый его средствами результирующий набор похож на результирующий набор оператора

CUBE. Однако имеются и различия:

результирующий набор, сгенерированный оператором CUBE, показывает итоговые значения для всех комбинаций значений выбранных столбцов;

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

Следующий оператор SELECT содержит оператор ROLLUP в конструкции GROUP BY: -USE Pubs

SELECT РиО паше, Au lname, Title, SUM(qty) AS Sm .

FROM Authors a INNER JOIN TitleAuthor 1:a b -

ON a.Aud = ta.Au id INNER JOIN Titles t ON t,Title id = ta.Title id INNER JOIN Publishers p ON p.Pub id = t.Pub id INNER JOIN Sales s

ON s,Title id = t.Title id

GROUP BY Pijb nanie, Au Iname, litis

WITH ROLLUP . -

Оператор ROLLUP позволяем авать группировки в результирующем наборе. Для представления всех значений поля в сгруппированных строках используется пустое значение (за исключением поля Sum). При использовании без оператора ROLLUP оператор SELECT генерирует только одну CUBE возвращает намного больше

групп. При указании в конструкции GROUP BY следующих столбцов (по порядку):

и Title оператор ROLLUP возвращает следующие данные:

количество экземпляров каждой книги каждого автора, проданное каждым издательством;

суммарное количество экземпляров книг каждого автора, проданное каждым издательством;

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

суммарное количество всех книг всех авторов, проданных всеми издательствами.



Упражнение 2. Извлечение данных с помощью усложненных методик работы с запросами

В этом упражнении вы извлечете информацию из базы данныеwind с помошью операторов SELECT и усложненных методик работы с запросами. В операторы SELECT включаются соединения и подзапросы, которые также понадобятся для создания сводных данных. Чтобы выполнить это упражнение, необходимо зарегистрироваться в качестве администратора на компьютере под управлением Windows 2000 Server.

> Получение данн1х посредством внутреннего соединения

1 Откройте SQL Query Analyzer и подЕСЛЮчитесъ к локальному серверу.

2 Введите на панели Editor в окне Query следующий код Transact-SQL:

USE Northwind

SELECT о, CustornerlD, о. OrderlD, s-CompanyName

FROM Orders о JOIN Shippers s - ,

ON o.ShipVia = s.ShipperlD WHERE ShlpCountry = USA-ORDER BY 0.CustomerlD, s.CompanyName

Этот оператор определяет базу данных, в которой находится нужная таблица. Далее с помошью оператора SELECT идентификаторы покупателя, заказа и на-

звание поставщика, ассоциированное с каждым заказом, Поскольку название компании-поставщика указано в отдельной таблице (Shippers), необходимо соединить таблицы Orders и Shippers, используя в качестве условия соединения идентификатор поставщика. Столбец ShipVia является внешним ключом столбца erlD, и оба столбца содержат идентификаторы поставщиков. Обратите внимание, что таблице Orders присвоен псевдоним о, а таблице Shippers s. Также обратите внимание, что для внутреннего соединения можно использовать просто ключевое слово JOIN i указывать INNER JOIN не обязательно). 3. Исполните оператор Transact-SQL.

Результирующий набор выводится на вкладке Grids панели Results.

► Получение данн1х посредством левого внешнего соединения

1. Введите на панели Editor в окне Query следующий код Transact-SQL:

USE Northwind

SELECT о.OrderlD, o.CustonnerlD, с. Contact Name, c.City FROM Orders о LEFT JOIN Customers с

ON CustomerlD - с, CustomerlD

AND 0,ShipCity = c.City ORDER o.OrderlD

Здесь оператор SELECT используется для получения данных из столбцов erlD и CustomerlD таблицы Orders и столбцов ContactName и City таблицы Customers. Условие соединения использует столбцы и далее определяет соединение, задавая равенство значений столбцов ShipCity и City.

2. Исполните оператор Transact-SQL.

Результирующий набор выводится на вкладке Grids панели Results.



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

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