Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Посібник Мова SQL кредитно-модульний.doc
Скачиваний:
35
Добавлен:
01.05.2015
Размер:
1.25 Mб
Скачать

Узагальнення даних за допомогою оператора rollup

Оператор ROLLUPгенерує звіти з підсумками і проміжними підсумками. Створюваний його засобами результуючий набір схожий на результуючий набір оператораCUBE. Однак є й розходження:

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

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

Наступний оператор SELECTмістить операторROLLUPу конструкціїGROUP BY:

USE Pubs

SELECT Pub_name, Au.lname, Title, SUM(qty) AS 'Sum'

FROM Authors a INNER JOIN TitleAuthor ta

ON a.Au_id = 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 Pub_name, Au_lname, Title

WITH ROLLUP

Оператор ROLLUPдозволяє створювати угруповання в результуючому наборі. Для подання всіх значень поля в згрупованих рядках використовується порожнє значення (за винятком поляSum). При використанні без оператораROLLUPоператорSELECTгенерує тільки одну групу. ОператорCUBEповертає набагато більше груп. При вказівці в конструкціїGROUP BYнаступних стовпців:Pub_name, Aujname, і TitleоператорROLLUPповертає наступні дані:

  • кількість екземплярів кожної книги кожного автора, проданих кожним видавництвом;

  • сумарна кількість екземплярів книг кожного автора, проданих кожним видавництвом;

  • сумарна кількість всіх книг, проданих кожним видавництвом;

  • сумарна кількість всіх книг всіх авторів, проданих всіма видавництвами.

На завершення наведемо декілька практичних прикладів для закріплення матеріалу лекції. Наберемо наведені нижче приклади у редакторі запитів та виконаємо їх. Після цього пропонується самостійно проаналізувати результат роботи кожної команди SELECT.

Приклади

Одержання даних за допомогою внутрішнього з'єднання

USE Northwind

SELECT o.Customerl. o.Qrderl, s.CompanyName

FROM Orders про JOIN Shippers s

ON o.ShipVia = s.Shipperl

WHERE ShipCountry = 'USA'

ORDER BY o.Customerl, s.CompanyName

Одержання даних за допомогою лівого зовнішнього з'єднання

USE Northwind

SELECT o.OrderID, o.CustomerID, c.ContactNane. c.City

FROM Orders про LEFT JOIN Customers c

ON o.CustomerID - c.CustomerID

AND o.ShipCity = c.City

ORDER BY o.OrderID

Одержання даних за допомогою правого зовнішнього з'єднання

USE Northwind

SELECT o.QrderID, o.CustomerID, c.ContactName, c.City

FROM Orders про RIGHT JOIN Customers c

ON o.CustomerID = c.CustomerID

AND o.ShipCity = c . C i t y

ORDER BY o.OrderID

Одержання даних за допомогою повного зовнішнього з'єднання

Скористайтеся тим же оператором SELECT, що й у двох попередніх прикладах, тільки змініть у операторі відповідну частину команди для утворення повного зовнішнього з’єднання.

Використання в підзапиті ключового слова IN

USE Northwind

SELECT OrderID, EmployeeID AS EmpID

FROM Orders

WHERE EmployeeID IN(

SELECT EmployeeID

FROM Employees

WHERE City = 'Seattle'

ORDER BY OrderID )

Застосування підзапита з операторами порівняння й ключовим словом ALL

USE Northwind

SELECT Orderl, UnitPrice

FROM [Order Details]

WHERE UnitPrice > ALL

SELECT UnitPrice

FROM [Order Details] JOIN Orders

ON [Order Details].OrderID = Orders.OrderID

AND Orders.EmployeeID = 5

ORDER BY UnitPrice, OrderID

Застосування підзапита із ключовим словом EXISTS

USE Northwind

SELECT OrderID, CustornerID

FROM Orders

WHERE EXISTS

(

SELECT * FROM Customers

WHERE Customers. CustomerID - Orders. CustornerID

AND City = 'London'

)

ORDER BY OrderID

Створення зведених даних за допомогою оператора ROLLUP

USE Northwind

SELECT ProductID. UnitPrice, SUM(Quantity) AS 'Sum'

FROM [Order Details]

GROUP BY ProductID, UnitPrice

WITH ROLLUP

ORDER BY ProductID