| TABLE Ім'я таблиці | Конструктор значень таблиці}
]
Select-вираз ::=
SELECT [ALL | DISTINCT]
{{{Скалярний вираз | Функція агрегації | Select-вираз} [AS Ім'я стовпця]}.,..}
| {Ім'я таблицы|Ім’я кореляції}.*}
| *
Зауваження. Select-вираз в розділі SELECT, що використовується як значення для відбираного стовпця, повинен повертати таблицю, що складається з одного рядка і одного стовпця, тобто скалярний вираз.
Зауваження. Умовний вираз в розділі WHERE повинен обчислюватися для кожного рядка, що є кандидатом в результуючу множину рядків. В цьому умовному виразі можна використовувати підзапити. Синтаксис умовних виразів, допустимих в розділі WHERE розглядається нижче.
Зауваження. Розділ HAVING містить умовний вираз, обчислюваний для кожної групи, визначуваної списком угрупування в розділі GROUP. Цей умовний вираз може містити функції агрегації, обчислювані для кожної групи. Умовний вираз, сформульований в розділі WHERE, може бути перенесене в розділ HAVING. Перенесення умов з розділу HAVING в розділ WHERE неможливе, якщо умовний вираз містить агрегатні функції. Перенесення умов з розділу WHERE в розділ HAVING є поганим стилем програмування - ці розділи призначені для різних по значенню умов (умови для рядків і умови для груп рядків).
Зауваження. Якщо в розділі SELECT присутні агрегатні функції, то вони обчислюються по-різному залежно від наявності розділу GROUP. Якщо розділ GROUP відсутній, то результат запиту повертає не більше одного рядка. Агрегатні функції обчислюються по всіх рядках, що задовольняють умовному виразу в розділі WHERE. Якщо розділ GROUP присутній, то агрегатні функції обчислюються по окремості для кожної групи, визначеної в розділі GROUP.
Скалярний вираз - як скалярні вирази в розділі SELECT можуть виступати або імена стовпців таблиць, що входять в розділ FROM, або прості функції, що повертають скалярні значення.
Функція агрегації ::=
COUNT (*) |
{{COUNT | MAX | MIN | SUM | AVG} ([ALL | DISTINCT] Скалярний вираз)
}
Конструктор значень таблиці ::=
VALUES Конструктор значень рядка...
Конструктор значень рядка ::=
Елемент конструктора | (Елемент конструктора...) | Select-вираз
Зауваження. Select-вираз, що використовується в конструкторі значень рядка, зобов'язаний повертати рівно один рядок.
Елемент конструктора ::=
Вираз для обчислення значення | NULL | DEFAULT
Синтаксис сполучених таблиць
У розділі FROM оператора SELECT можна використовувати сполучені таблиці. Хай в результаті деяких операцій ми одержуємо таблиці А і B. Такими операціями можуть бути, наприклад, оператор SELECT або інша сполучена таблиця. Тоді синтаксис сполученої таблиці має наступний вигляд:
Сполучена таблиця ::=
Перехресне з'єднання
| Природне з'єднання
| З'єднання за допомогою предиката
| З'єднання за допомогою імен стовпців
| З'єднання об'єднання
Тип з'єднання ::=
INNER
| LEFT [OUTER]
| RIGTH [OUTER]
| FULL [OUTER]
Перехресне з'єднання ::=
Таблиця А CROSS JOIN Таблиця В
Природне з'єднання ::=
Таблиця А [NATURAL] [Тип з'єднання] JOIN Таблиця В
З'єднання за допомогою предиката ::=
Таблиця А [Тип з'єднання] JOIN Таблиця В ON Предикат
З'єднання за допомогою імен стовпців ::=
Таблиця А [Тип з'єднання] JOIN Таблиця В USING (Ім'я стовпця...)
З'єднання об'єднання ::=
Таблиця А UNION JOIN Таблиця В
Опишемо терміни, що використовуються.
CROSS JOIN - Перехресне з'єднання повертає просто декартовий твір таблиць. Таке з'єднання в розділі FROM може бути замінено списком таблиць через кому.
NATURAL JOIN - Природне з'єднання проводиться по всіх стовпцях таблиць А і В, має однакові імена. В результуючу таблицю однакові стовпці вставляються тільки один раз.
JOIN . ON - З'єднання за допомогою предиката сполучає рядки таблиць А і В за допомогою вказаного предиката.
JOIN . USING - З'єднання за допомогою імен стовпців сполучає відносини подібно природному з'єднанню по тих загальних стовпцях таблиць А і б, які вказані в списку USING.
OUTER - Ключове слово OUTER (зовнішній) не є обов'язковими, воно не використовується ні в яких операціях з даними.
INNER - Тип з'єднання "внутрішнє". Внутрішній тип з'єднання використовується за умовчанням, коли тип явно не заданий. В таблицях А і В з'єднуються тільки ті рядки, для яких знайдений збіг.
LEFT (OUTER) - Тип з'єднання "ліве (зовнішнє)". Ліве з'єднання таблиць А і У включає всі рядки з лівої таблиці А і ті рядки з правої таблиці В, для яких знайдений збіг. Для рядків з таблиці А, для яких не знайдено відповідності в таблиці В, в стовпці, витягувані з таблиці В, заносяться значення NULL.
RIGHT (OUTER) - Тип з'єднання "праве (зовнішнє)". Праве з'єднання таблиць А і У включає всі рядки з правої таблиці В і ті рядки з лівої таблиці А, для яких знайдений збіг. Для рядків з таблиці В, для яких не знайдено відповідності в таблиці А, в стовпці, витягувані з таблиці А заносяться значення NULL.
FULL (OUTER) - Тип з'єднання "повне (зовнішнє)". Це комбінація лівого і правого з'єднань. В повне з'єднання включаються всі рядки з обох таблиць. Для співпадаючих рядків поля заповнюються реальними значеннями, для неспівпадаючих рядків поля заповнюються відповідно до правил лівого і правого з'єднань.
UNION JOIN - З'єднання об'єднання є зворотним по відношенню до внутрішнього з'єднання. Воно включає тільки ті рядки з таблиць А і В, для яких не знайдено збігів. В них використовуються значення NULL для стовпців, одержаних з іншої таблиці. Якщо узяти повне зовнішнє з'єднання і видалити з нього рядки, одержані в результаті внутрішнього з'єднання, то вийде з'єднання об'єднання.
Використовування сполучених таблиць часто полегшує сприйняття оператора SELECT, особливо, коли використовується природне з'єднання. Якщо не використовувати сполучені таблиці, то при виборі даних з декількох таблиць необхідно явно указувати умови з'єднання в розділі WHERE. Якщо