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

Конструкція from

Конструкцію FROMнеобхідно поміщати в кожному операторіSELECT, що витягає дані з таблиць або відображень. Ця конструкція дозволяє задати список таблиць і відображень, на стовпці яких посилаються список вибору і конструкціяWHERE. Цим таблицям і відображенням можуть бути привласнені псевдоніми в конструкціїAS. КонструкціяFROM, крім того, дозволяє з'єднувати таблиці, задаючи умови з'єднання в конструкціїJOIN. КонструкціяFROMявляє собою список імен таблиць, відображень і конструкційJOIN, розділених комами. У наступному прикладі в операторіSELECTконструкціяFROMзадає таблицюShippers:

SELECT * FROM Shippers

Конструкцію FROM також використовують і для визначення з'єднань між двома таблицями або відображеннями.

Конструкції where, group by і having

В операторі SELECTконструкціїWHERE і HAVINGвизначають рядки вихідної таблиці, які необхідні для побудови результуючого набору. КонструкціїWHERE і HAVINGвиконують роль фільтрів. Вони задають набір умов пошуку - для побудови результуючого набору вибираються лише ті рядочки, які відповідають умовам пошуку. Наприклад, в операторіSELECT конструкціяWHEREповертає лише ті рядки, де район зазначений як штат Вашингтон (WA):

SELECT Customerl, CompanyName

FROM Northwind.dbo.Customers

WHERE Region = 'WA'

Конструкція HAVING, як правило (але не обов'язково), використовується разом з конструкцієюGROUP BY. КонструкціяHAVINGзадає додаткові фільтри, які застосовуються після завершення фільтрації, обумовленою конструкцієюWHERE. У наступному прикладі в операторіSELECTвикористані конструкціїWHERE, GROUP BY і HAVING:

SELECT OrdDLOrderID AS OrderID,

SUM(Ord1.Quantity) AS "Units Sold",

SUM(Ord1.UnitPrice * Ord1.Quantity) AS Revenue

FROM [Order Details] AS Ord1

WHERE OrdDLOrderID IN

(SELECT DISTINCT Ord2. OrderID

FROM [Order Details] AS Ord2

WHERE Ord2.UnitPrice > $100)

GROUP BY GrdDLOrderID

HAVING SUM(Ord1.Quantity) > 100

Тут конструкція WHEREповертає замовлення, вартість яких більше $100, а далі конструкціяHAVINGобмежує результат, відбираючи замовлення на більш ніж 100 одиниць товару. КонструкціяGROUP BYобмежує рядки для кожного конкретного значення поляOrd1.

Конструкція group by

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

Після ключових слів GROUP BYвказують список стовпців, за яким виконується групування. КонструкціяGROUP BYобмежує рядки результуючого набору. Для кожного конкретного значення стовпця або декількох стовпців, яки групуються, можливий тільки один рядок. У кожному рядку результуючого набору втримуються підсумкові дані, які пов'язані з деяким значенням стовпців, які групуються. Якщо в операторіSELECTє конструкціяGROUP BY, SQL Server накладає обмеження на елементи списку вибору. У списку вибору можуть бути лише ті стовпці, що групуються, і вирази, які повертають тільки одне значення для кожного значення стовпців, що групуються, наприклад агрегатні функції (векторні агрегати), одним з параметрів яких є ім'я стовпця.

Як правило, конструкція HAVINGвикористовується з конструкцієюGROUP BY, хоча її дозволяється застосовувати й окремо. Будь-який вираз може стати таким, який групує, якщо він не містить агрегатних функцій. У конструкціїGROUP BYнеобхідно задавати ім'я стовпця таблиці або відображення, а не ім'я стовпця результуючого набору, привласнене за допомогою конструкціїAS. У конструкціїGROUP BYприпустимо вказати кілька стовпців у вигляді вкладених груп, тобто згрупувати таблицю за допомогою будь-якої комбінації стовпців.