Имеется всего четыре, но очень мощных, оператора: SELECT (отбор), INSERT (вставка), DELETE (удаление), UPDATE (обновление).
¨ SELECT (отбор).
SELECT [DISTINCT | ALL] СписокКолонок
FROM ИмяТаблицы [ПсевдонимТаблицы], ...
[WHERE УсловиеОтбора]
[GROUP BY КлючГруппировки]
[HAVING УсловиеОтбораПослеГруппировки]
[ORDER BY КлючУпорядочения]
[UNION [ALL] Select-оператор]
ПсевдонимТаблицы – произвольное имя. Если псевдоним не указан, то по умолчанию онсовпадает с ИменемТаблицы.
Семантика оператора SELECT. По исходным FROM-таблицам, назовем их Т1,... строится безымянная выходная таблица.
§ Строится W1 = декартово произведение FROM-таблиц Т1,... просто присоединением к каждой строке из Т1 каждой строки из Т2, присоединением к результату каждой строки из...
§ Строится W2 = выборка из W1 по WHERE-УсловиюОтбора
§ Строки таблицы W2 «пачкуются» в группы. В одну группу входят все строки с одним и тем же значением КлючаГруппировки.
Строится W3 = в W3 формируется точно по одной строке для каждой группы из W2. Способ формирования такой строки по группе определяется СпискомКолонок, детали рассмотрим позже.
§ Строится W4 = выборка из W3 по HAVING-УсловиюОтбораПослеГруппировки.
§ Если имеется UNION-фраза, то аналогично строится результат для Select-оператора этой фразы (кстати, в ней могут быть вложенные UNION-фразы).
Строки полученного результата добавляются к W4, поэтому результат UNION-фразы должен быть таблицей, совместимой с W4. Если UNION-фраза не имеет уточнения ALL, то добавляются только строки, хотя бы чем-то отличающиеся по значению от строк, уже имеющихся в W4.
§ Строки полученной в итоге таблицы W4 упорядочиваются по КлючуУпорядочения. Фраза ORDER BY может присутствовать в операторе не более одного раза, даже при наличии многих UNION-фраз.
§ Если указано уточнение DISTINCT, из W4 удаляются все (полные) повторения строк (остаются точно по одной из каждой группы одинаковых).
§ Окончательный результат оператора SELECT строится по итоговому W4 вычеркиванием лишних колонок, не объявленных в СпискеКолонок.
· Простые выражения строятся по обычным правилам из констант, имен полей таблиц и предопределенных операций для базовых типов данных. Можно использовать уточненные имена полей таблиц – ПсевдонимТаблицы.ИмяПоляТаблицы. Значение простого выражения вычисляется для фиксированной строки таблицы (возможно собранной из нескольких исходных таблиц, как было описано выше).
· Групповые выражения тоже имеют скалярное значение, но их значение вычисляется по группе строк, заданной КлючомГруппировки, как было описано выше.
Групповые выражения строятся с помощью групповых функций.
§ SUM([DISTINCT] ПростоеВыражение) имеет значением сумму значений ПростогоВыражения по всем строкам группы.
Если указано уточнение DISTINCT, то каждое из полученных для строк группы значений ПростогоВыражения участвует в сумме точно один раз без повторений.
§ Аналогичный смысл у групповых функций AVG (среднеарифметическое), MAX (максимальное), MIN (минимальное).
§ COUNT(Аргумент), где
Аргумент = * | DISTINCT ПростоеВыражение
имеет значением для Аргумент = * - количество строк в группе, а для другого вида Аргумента –количество различных значений ПростогоВыражения по всем строкам группы.
ПРИМЕР. Пусть таблица поставок PST сгруппирована по ключу группировки PST.KDET.
COUNT(DISTINCT PST.KPST) – количество разных поставщиков уже поставивших деталь KDET.
COUNT(*) – количество партий этой детали уже полученных от всех поставщиков.
SUM(PST.KOL) – общее количество в штуках детали KDET уже полученное, суммарно по всем поставщикам.
Из вышеприведенных групповых выражений можно строить более сложные групповые выражения, используя дополнительно константы, имена полей и операции базовых типов данных.
· Условия. Выражения этого вида играют в SQL особую роль. Это логические выражения, которые используются как УсловияхОтбора (до и после группировки).
Ниже Выражение – простое или групповое выражение.
§ Выражение Сравнение Выражение
Набор операций Сравнения для базовых типов данных: = < > и т.п.
§ Выражение Сравнение SelectOne-оператор
SelectOne-оператор должен строить одно колоночную таблицу с одной строкой.
§ Выражение [NOT] BETWEEN Выражение AND Выражение
E1 BETWEEN E2 AND E3 в терминах языка Паскаль имеет смысл E1IN [E2..E3], а NOT – отрицание.
§ Выражение [NOT] IN (Выражение, ...)
E1 IN (E2,...) в терминах языка Паскаль: E1IN [E2,...].
§ Выражение [NOT] IN (SelectList-оператор)
SelectList-оператор строит одно колоночную таблицу.
§ Выражение Сравнение {ALL|SOME} (SelectList-оператор)
E > ALL (SelectList-оператор) имеет смысл: E строго больше всех значений из строк одно колоночной таблицы. SOME ... хотя бы одного значения...
§ EXISTS (Select-оператор)
Имеет смысл: результат Select-оператора непустая таблица.
Из вышеприведенных условий можно строить более сложные с помощью операций логики высказываний: AND OR NOT.