Оператор выборки записей имеет формат вида:

SELECT [ALL | DISTINCT] <список данных> FROM <список таблиц>

 [WHERE <условие выборки>]

[GROUP BY <имя столбца> [,<имя столбца>]... ]

[HAVING <условие поиска>]

[ORDER BY <спецификация> [,<спецификация>]...]

Это наиболее важный оператор из всех операторов SQL. Функциональ­ные возможности его огромны. Рассмотрим основные из них.

Оператор SELECT позволяет производить выборку и вычисления над данными из одной или нескольких таблиц. Результатом выполнения опера­тора является ответная таблица, которая может иметь (ALL), или не иметь (DISTINCT) повторяющиеся строки. По умолчанию в ответную таблицу включаются все строки, в том числе и повторяющиеся. В отборе данных уча­ствуют записи одной или нескольких таблиц, перечисленных в списке опе­ранда FROM.

Список данных может содержать имена столбцов, участвующих в за­просе, а также выражения над столбцами. В простейшем случае в выра­жениях можно записывать имена столбцов, знаки арифметических опе­раций (+, — ,*,/), константы и круглые скобки. Если в списке данных записано выражение, то наряду с выборкой данных выполняются вычис­ления, результаты которого попадают в новый (создаваемый) столбец ответной таблицы.

При использовании в списках данных имен столбцов нескольких таблиц для указания принадлежности столбца некоторой таблице применяют кон­струкцию вида: <имя таблицы>.<имя столбца>.

Операнд WHERE задает условия, которым должны удовлетворять запи­си в результирующей таблице. Выражение <условие выборки> является логическим. Его элементами могут быть имена столбцов, операции сравне­ния, арифметические операции, логические связки (И, ИЛИ, НЕТ), скоб­ки, специальные функции LIKE, NULL, IN и т. д.

Операнд GROUP BY позволяет выделять в результирующем множестве записей группы. Группой являются записи с совпадающими значениями в столбцах, перечисленных за ключевыми словами GROUP BY. Выделение групп требуется для использования в логических выражениях операндов WHERE и HAVING, а также для выполнения операций (вычислений) над группами.

В логических и арифметических выражениях можно использовать следую­щие групповые операции (функции): AVG (среднее значение в группе), МАХ (максимальное значение в группе), MIN (минимальное значение в группе), SUM (сумма значений в группе), COUNT (число значений в группе).

Операнд HAVING действует совместно с операндом GROUP BY и ис­пользуется для дополнительной селекции записей во время определения групп. Правила записи <условия поиска> аналогичны правилам формиро­вания <условия выборки> операнда WHERE.

Операнд ORDER BY задает порядок сортировки результирующего множе­ства. Обычно каждая <спецификация> аналогична соответствующей конст­рукции оператора CREATE INDEX и представляет собой пару вида: <имя стол-бца> [ ASC | DESC ].

Замечание.

Оператор SELECT может иметь и другие более сложные синтаксичес­кие конструкции, которые мы подробно рассматривать не будем, а пояс­ним их смысл.

Одной из таких конструкций, например, являются так называемые под­запросы. Они позволяют формулировать вложенные запросы, когда резуль­таты одного оператора SELECT используются в логическом выражении ус­ловия выборки операнда WHERE другого оператора SELECT.

Вторым примером более сложной формы оператора SELECT является опе­ратор, в котором отобранные записи в дальнейшем предполагается модифи­цировать (конструкция FOR UPDATE OF). СУБД после выполнения такого оператора обычно блокирует (защищает) отобранные записи от модифика­ции их другими пользователями.

Еще один случай специфического использования оператора SELECT -выполнение объединений результирующих таблиц при выполнении несколь­ких операторов SELECT (операнд UNION).

Пример 5. Выбор записей.

Для таблицы ЕМР, имеющей поля: NAME (имя), SAL (зарплата), MGR (руководитель) и DEPT (отдел), требуется вывести имена сотрудников и раз­мер их зарплаты, увеличенный на 100 единиц. Оператор выбора можно запи­сать следующим образом:

SELECT name, sal+100 FROM emp.

Пример 6. Выбор с условием.

Вывести названия таких отделов таблицы ЕМР, в которых в данный мо­мент отсутствуют руководители. Оператор SELECT для этого запроса мож­но записать так:

SELECT dept FROM emp WHERE mgr is NULL.

Пример 7. Выбор с группированием.

Пусть требуется найти минимальную и максимальную зарплаты для каждого из отделов (по таблице ЕМР). Оператор SELECT для этого запроса имеет вид:

SELECT dept, MIN(sal), MAX(sal) FROM emp GROUP BY dept.


 

 

Hosted by uCoz