Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция SELECT

Инструкция SELECT извлекает строки, столбцы и производные значения из одной или нескольких таблиц базы данных.


Синтаксис SQL 2003

Полный синтаксис инструкции SELECT очень мощный и сложный, но его можно разделить на следующие основные предложения.

SELECT [{ALL | DISTINCT}] отбираемый_элемент [AS псевдоним] [, …]
FROM [ONLY | OUTER]
{имя_таблицы [[AS] псевдоним] | имя_представления [[AS] псевдоним]} […] [[тип_ соединения]
JOIN условие соединения]
[WHERE условие_поиска] [{AND | OR | NOT} условие_поиска […]]
[GROUP BY группировка_по_выражению {группировка_по_столбцам | ROLLUP
группировкам Столбцам | CUBE группировка_по_столбцам |
GROUPING SETS
(список_наборов_группировок) | () | набору группировок,
список_наборов_группировок}
[HAVING условие_поиска]]
[ORDER BY {выражение_для_сортировки [ASC | DESC]} […, …]]


Ключевые слова

Все показанные ниже ключевые слова, за исключением параметра отбираемый элемент, описываются более подробно в следующем разделе «Общие правила».

[ALL | DISTINCT] отбираемый_элемент

Извлекаются значения, которые образуют результирующий набор данных. отбираемый_элемент может представлять собой константу, агрегат или скалярную функцию, математическое выражение, параметры или переменную или же подзапрос, но наиболее часто отбираемый элемент — это столбец таблицы или представления. Несколько таких элементов должны разделяться запятыми. Если данные извлекаются из контекста, отличного от контекста текущего пользователя, перед столбцом нужно указывать префикс в виде схемы или имени владельца. Если таблица принадлежит другому пользователю, то в ссылке на столбец нужно указывать имя этого пользователя. Например, предположим, что пользователю jake нужно обратиться к данным из схемы katie.

SELECT
emp_id
FROM katie, employee;

Чтобы извлечь все столбцы всех таблиц или представлений, указанных в предложении FROM, можно использовать краткое написание в виде звездочки (*). Хорошей практикой является использование этой формы только в запросах к одиночной таблице.

Предложение ALL, заданное по умолчанию, приводит к извлечению всех записей, удовлетворяющих критерию отбора. Предложение DISTINCT заставляет базу данных отфильтровывать все дублирующиеся записи и возвращать только один экземпляр из нескольких идентичных записей.

AS псевдоним

Заменяет заголовок столбца (если находится в предложении отбираемый_эле-мент) или имя таблицы или представления (если находится в предложении FROM) более кратким заголовком или именем. Это предложение особенно полезно для замены непонятных или длинных имен понятными обозначениями или если столбец содержит только производные данные, чтобы не было таких названий, как ORA000189 x 7/0.02. Это также очень полезно при рефлексивных соединениях (self-joins) и коррелированных подзапросах, где один запрос ссылается на одну таблицу несколько раз. Если в списке элементов для отбора или в предложении FROM содержится несколько элементов, ставьте запятые после предложений AS. Вводя псевдонимы в запрос, используйте их постоянно.

FROM имя_таблицы

Это предложение служит для указания всех таблиц и/или представлений, из которых запрос получает данные. Разделяйте имена таблиц и представлений запятыми. Предложение FRОМ также позволяет назначать псевдонимы длинным именам таблиц или представлений, а также подзапросам при помощи предложения AS. Применение кратких псевдонимов вместо длинных имен таблиц и представлений упрощает программирование. (Конечно, это может нарушить тщательно спланированные администратором базы соглашения об именах, но псевдонимы действуют только в пределах одного запроса. Обращайтесь к следующему разделу «Общие правила».) Предложения FROM могут содержать подзапрос (обращайтесь к разделу «Инструкция SUBQUERY»).

ONLY

Указывается, что в результирующий набор данных будут извлекаться только строки из указанной таблицы или представления, но не строки из подтаблиц и представлений-потомков. При использовании предложения ONLY обязательно заключайте имя_таблицы или имя представления в скобки. Предложение ONLY игнорируется, если в таблице или представлении нет подтаблиц или представлений-потомков.

OUTER

Указывается, что в результирующий набор данных будут извлекаться как строки из указанно таблицы или представления, так и строки из подтаблиц и представлений-потомков. Столбцы подтаблиц (или представлений-потомков) будут добавляться справа, в порядке иерархии подтаблиц, в соответствии с глубиной вложенности. В случае сложной иерархии подтаблицы, имеющие общих родителей, добавляются в порядке создания типов. При использовании предложения OUTER обязательно заключайте имя_таблицы или имя представления в скобки. Предложение OUTER игнорируется, если в таблице или представлении нет подтаблиц или представлений-потомков.

JOIN условие_соединения

Результирующий набор, полученный из таблицы, указанной в предложении FROM, соединяется с другой таблицей, которая имеет с ней логическую связь, основанную на общем наборе значений. Эти значения обычно содержатся в столбцах с одним именем и типом данных, которые есть в обеих таблицах. Этот столбец или столбцы в каждой таблице называются ключом соединения или общим ключом. В большинстве случаев, хотя и не всегда, ключ соединения представляет собой первичный ключ одной таблицы и внешний ключ другой таблицы. Если данные в столбцах совпадают, соединение можно выполнить. (Обратите внимание, что соединения можно также осуществлять при помощи предложения WHERE. Этот метод иногда называют тета-соединением.) Условия соединения чаще всего описываются следующей формой.

JOIN имя_таблицы2 ON имя_таблицы1. столбец1 имя_таблицы2. столбец2 JOIN имя_таблицыЗ ON имя_таблицы1 столбец А < оператор_сравнения >

имя_таблицыЗ. столбецА […]

Если оператор уравнения представляет собой знак равенства (=), то говорят, что соединение представляет собой экви соединеиие. Однако при сравнении может использоваться любой допустимый оператор сравнения (, = или даже ). Оператор AND используется для выполнения соединений с несколькими условиями. Также вы можете использовать оператор OR для указания альтернативных условий соединения.

Если тип_соединения явно не указан, подразумевается INNER JOIN. Обратите внимание, что существует много типов соединений, каждый из которых имеет свои правила и функциональность, которые описываются в разделе «Общие правила» (и более подробно — в разделе «Инструкция JOIN»). Обратите внимание, что существует альтернативный подход к указанию условий соединения, при помощи предложения USING.

USING (имя_столбца [, …])

Играет роль альтернативы предложению ON. Вместо описания условий соединения просто укажите имя_столбца (или несколько имен столбцов, разделенных запятыми), которое существует в обеих таблицах. (Имена столбцов в обеих таблицах должны совпадать.) В следующем примере два запроса имеют идентичные результаты.

SELECT
emp_id
FROM employee
LEFT JOIN sales USING (emp_id, region_id);

SELECT
emp_id
FROM employee AS e
LEFT JOIN sales AS s ON e.emp_id=s.emp_id AND e.region_id=s.region_id;

WHERE условие_поиска

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

WHERE [схема, [имя_таблицы.]]столбец оператор значение

Предложения WHERE обычно сравнивают значения, содержащиеся в столбце таблицы. Значения в столбце сравниваются с помощью какого-нибудь оператора (за дополнительной информацией обращайтесь к разделу «Операторы»). Например, значение в столбце может быть равным (=) данному значению, быть больше (>) данного значения или входить в диапазон (BETWEEN) значений. Предложения WHERE могут содержать много условий поиска, соединяемых при помощи булевых операторов AND и OR. Для определения порядка приоритета условий поиска можно использовать скобки. Предложения WHERE могут содержать подзапросы (обращайтесь к разделу «Инструкция SUBQUERY»).

GROUP BY выражение_для группировки

Используется в запросах, применяющих агрегатные функции, такие, как AVG, COUNT, COUNT DISTINCT, MAX, MIN и SUM, для распределения результирующих запросов по категориям, определенным в выражении_для группировки. (Обсуждение агрегатных функций, существующих в SQL, приводится в главе 4.) Для выраже-иия_длягруппировки предложения GROUP BY существует свой синтаксис.

GROUP BY выражение_для_группировки

Где выражение_для группировки представляет собой следующее.

{(столбец_для_группировки [, …]) | R0LLUP (столбец_для_группировки [, …]) | CUBE

(столбец_для_группировки [, …]) | GROUPING SETS

(список_наборов_для_группировки) | () | набор_для_группировки

список_наборов_для_группировки}

Обращайтесь к подразделу «Предложение GROUP BY» в разделе «Общие правила» за дополнительной информацией по ключевым словам ROLLUP, CUBE и GROUPING SETS.

НАVING условие_поиска

Добавляются условия поиска по результатам предложения GROUP BY, сходные по форме с предложением WHERE. Предложения HAVING не влияют на строки, используемые при вычислении агрегатов. Предложения HAVING могут содержать подзапросы (за дополнительной информацией обращайтесь к разделу «Инструкция SUBQUERY»).

ORDER BY выражение_для_сортировки [ASC DESC]

Указывается способ сортировки результирующего набора по возрастанию (ASC) или но убыванию (DESC) с использованием выражения_для_сортировки. Выражение для сортировки представляет собой список столбцов, разделенных запятыми, по которым нужно производить сортировку.

Источник