Команда SELECT выбирает информацию из базы
данных. Основной блок запроса:
SELECT
[DISTINCT] {*, столбец [псевдоним],
групповая_функция}
FROM
таблица
[WHERE
условие]
[GROUP BY
выражение_группирования]
[HAVING
условие_группы]
[ORDER BY
{столбец, выражение} [ASC|DESC]];
|
где
SELECT |
Список, включающий, по крайней мере, один
столбец. |
DISTINCT |
Подавляет выборку дубликатов. |
* |
Выбирает все столбцы. |
столбец |
Выбирает заданный столбец. |
псевдоним |
Дает выбранным столбцам другие заголовки. |
таблица |
Указывает таблицу, содержащую столбцы. |
|
|
WHERE |
Ограничивает запрос строками,
удовлетворяющими заданному условию. |
условие |
Состоит из имен столбцов, выражений,
констант и операторов сравнения. |
|
|
GROUP BY |
Разбивает строки на группы. |
|
|
выражение_ руппирования |
Определяет столбец, по значениям которого
группируются строки. |
|
|
HAVING |
Вывод конкретных групп. |
|
|
условие_группы |
Задает условие отбора групп для вывода. |
|
|
ORDER BY |
Задает порядок вывода строк. |
|
|
ASC |
Сортирует строки в порядке возрастания;
используется по умолчанию. |
|
|
DESC |
Сортирует строки в порядке убывания. |
В простейшей форме команда SELECT должна
включать следующее:
SELECT [DISTINCT]
{*, столбец [псевдоним]}
FROM
таблица;
|
Предложение SELECT – задает нужные столбцы.
Звездочка (*) означает выбор всех столбцов таблицы. Предложение
FROM указывает, в какой таблице находятся столбцы,
заданные в предложении SELECT.
Пример: Вывод содержимого всех столбцов и строк таблицы
S_DEPT:

Результат:
ID
|
NAME
|
REGION_ID
|
10
|
Finance
|
1
|
31
|
Sales
|
1
|
32
|
Sales
|
2
|
33
|
Sales
|
3
|
34
|
Sales
|
4
|
35
|
Sales
|
5
|
41
|
Operations
|
1
|
42
|
Operations
|
2
|
43
|
Operations
|
3
|
44
|
Operations
|
4
|
45
|
Operations
|
5
|
50
|
Administration
|
1
|
Выборка заданных столбцов
Вывод можно ограничить столбцами, имена которых указаны через
запятую в предложении SELECT.
Пример: Вывод всех номеров отделов, фамилий служащих и
идентификационных номеров их менеджеров из таблицы S_EMP.

DEPT_ID |
LAST_NAME |
MANAGER_ID |
50 |
Velasquez |
|
41 |
Ngao |
1 |
31 |
Nagayama |
1 |
10 |
Quick-To-See |
1 |
50 |
Ropeburn |
1 |
41 |
Urguhart |
2 |
42 |
Menchu |
2 |
43 |
Biri |
2 |
44 |
catchpole |
2 |
… |
|
|
Столбцы в команде SELECT указываются в
последовательности, в которой должен осуществляться их вывод. Запятые между
именами столбцов обязательны.
Формат заголовков столбцов, используемый по умолчанию
Заголовки столбцов и данные, состоящие из символов и даты, выравниваются в
столбце по левому краю, а числа – по правому. В заголовках столбцов,
содержащих символы и даты, лишние символы могут быть отброшены, но числовые
заголовки отображаются полностью. По умолчанию заголовки столбцов
выводятся в символах верхнего регистра. На выводе можно заменить заголовок
столбца псевдонимом.
Псевдонимы столбцов
При выводе результатов запроса в среде SQL*Plus
в качестве заголовков столбцов обычно используются их имена. Такие заголовки
часто трудны для понимания и даже бессмысленны. Изменить заголовок столбца можно
с помощью его псевдонима. Псевдоним указывается в списке команды
SELECT сразу за именем столбца и отделяется от него
пробелом. По умолчанию такие альтернативные заголовки выводятся в символах
верхнего регистра и не могут содержать пробелов, если псевдоним не заключен в
кавычки (" ").
Пример. Вывод фамилии, заработной платы и суммы
компенсационных выплат за год для каждого служащего. Объем выплат за год
вычисляется путем прибавления к заработной плате ежемесячной премии в размере
100 долларов и умножения суммы на 12. Назвать столбец
ANNUAL_SALARY.

Замечание. Для соответствия стандарту
ANSI SQL-92 перед псевдонимом может находиться ключевое слово
AS.
Псевдонимы столбцов в кавычках
Псевдоним, который содержит пробелы или специальные символы (например, # или
_) или в котором различаются символы верхнего и нижнего регистров, должен быть
заключен в кавычки (" ").

Пример. Вывод фамилии, заработной платы, должности и
вычисленных комиссионных.

Предотвращение выборки дубликатов строк
При отсутствии указаний с вашей стороны SQL*Plus
включает в результаты запросов все строки, не изымая дубликаты. Ключевое
слово DISTINCT, следующее сразу за словом
SELECT, исключает дублирование строк.
Пример. Вывод всех названий отделов из таблицы
S_DEPT.

NAME
|
Finance
|
Sales
|
Sales
|
Sales
|
Sales
|
Sales
|
Operations
|
…
|
12 rows selected
|
Пример. Вывод всех неповторяющихся названий
отделов из таблицы S_DEPT.

NAME
|
Administration
|
Finance
|
Sales
|
Operations
|
После квалификатора DISTINCT можно указать
несколько столбцов. В этом случае он будет относиться ко всем выбранным
столбцам.
Пример. Вывод всех возможных комбинаций должностей
и номеров отделов.


Для закрепления материала рекомендуется выполнить Практическое
задание 1.
Порядок строк, возвращаемых в результате запроса, не определен.
Отсортировать строки можно с помощью предложения ORDER BY.
Для сортировки можно задать выражение или позицию столбца в списке предложения
SELECT.
Пример. Вывод из таблицы S_EMP
фамилии, номера отдела и даты начала работы каждого служащего. Результат
сортируется по фамилиям.

LAST_NAME |
DEPT_ID |
START_DATE |
biri |
43 |
07-APR-90 |
Catchpole |
44 |
09-FEB-92 |
Chang |
44 |
30-NOV-90 |
Dancs |
45 |
17-MAR-91 |
Dumas |
35 |
09-OCT-91 |
Giljum |
32 |
18-JAN-92 |
Havel |
45 |
27-FEB-91 |
По умолчанию строки сортируются в порядке возрастания:
- Вывод числовых значений производится от меньших к большим – например, 1
– 999.
- Вывод дат начинается с более ранних – например, 01-ЯНВ-92 предшествует
01-ЯНВ-95.
- Вывод символьных значений производится в алфавитном порядке –например,
от А до Z.
- Неопределенные значения при сортировке по возрастанию выводятся
последними, а при сортировке по убыванию – первыми.
Порядок сортировки, принятый по умолчанию, меняется на противоположный с
помощью слова DESC после имени столбца в
предложении ORDER BY.
Пример. Вывод из таблицы s_emp
фамилии, номера отдела и даты найма каждого служащего. Результат сортируется
таким образом, чтобы служащие, нанятые последними, возглавляли список.

LAST_NAME
|
DEPT_ID
|
START_DATE
|
…
|
|
|
Urquhart
|
41
|
18-JAN-91
|
Chang
|
44
|
30-NOV-90
|
Patel
|
34
|
17-OCT-90
|
Menchu
|
42
|
14-MAY-90
|
…
|
|
|
В предложении ORDER BY можно указать
псевдоним столбца.
Еще один способ сортировки результатов запроса – это сортировка по позиции.
Он особенно полезен при сортировке по длинному выражению. Вместо
повторного ввода выражения можно указать его позицию в списке
SELECT.

Сортировать результат можно и по нескольким столбцам. Предельным
количеством столбцов сортировки является количество столбцов таблицы.
Столбцы указываются в предложении ORDER BY
через запятые. Для изменения порядка сортировки по какому-либо столбцу на
обратный следует задать квалификатор DESC после
его имени или позиции. Сортировать можно и по столбцам, не входящим в
список SELECT.
Пример. Вывод фамилии, номера отдела и заработной платы
всех служащих. Результат сортируется по номерам отделов, а внутри отделов – в
порядке убывания заработной платы.

LAST_NAME
|
DEPT_ID
|
SALARY
|
Quick-To-See
|
10
|
1450
|
Nagayama
|
31
|
1400
|
Magee
|
31
|
1400
|
Giljum
|
32
|
1490
|
Sedeghi
|
33
|
1515
|
Nguyen
|
34
|
1525
|
Patel
|
34
|
795
|
…
|
|
|
Ограничить набор строк, возвращаемых в результате запроса, можно с помощью
предложения WHERE. Предложение
WHERE следует сразу за предложением
FROM и задает условие, которое должно быть выполнено.
Условие состоит из имен столбцов, выражений, констант и операторов сравнения.
Пример. Запрос для вывода имен, фамилий и должностей,
служащих с фамилией «Magee».

В символьных строках различаются символы верхнего и нижнего регистров.
Поэтому, для совпадения, фамилия должна быть написана строчными буквами и
начинаться с заглавной буквы.
Оператор BETWEEN
Оператор BETWEEN используется для проверки
вхождения значения в интервал значений (включая границы интервала). Нижняя
граница должна быть указана первой.
Пример. Вывод имени, фамилии и даты найма служащих,
нанятых между 9 мая и 17 июня 1991 года включительно.

Оператор IN
Для проверки принадлежности значений к заданному списку используется оператор
IN.
Пример. Вывод номера, названия отдела и номера региона для
отделов в регионах 1 и 3.

Оператор LIKE
Используется для поиска строковых значений с помощью метасимволов
(wildcards). Условия для поиска могут содержать символьные литералы или числа:
- ‘%’ означает отсутствие или некоторое количество символов;
- ‘_’ означает один символ.
Пример. Вывод фамилий служащих, начинающихся на букву
“М”.

Оператор LIKE может использоваться в качестве
быстрого эквивалента некоторых операций BETWEEN.
Пример. Вывод фамилий и дат найма для служащих, принятых на
работу в 1991 году.

В критерии поиска символы ‘%’ и ‘_’ можно сочетать с литералами в любой
комбинации.
Пример. Вывод фамилий, второй буквой которых является “а”

Параметр ESCAPE
Поиск символов ‘%’ и ‘_’ требует использования идентификатора ESCAPE
(отменяющего специальное значение метасимволов).
Пример. Вывод названий фирм, содержащих сочетание “X_Y”.

Оператор IS NULL
Неопределенные значения проверяются с помощью оператора IS NULL.
Пользоваться оператором “=“ для сравнения с неопределенными значениями не
следует, так как неопределенное значение не может быть равно или не равно
какому-то другому.
Пример. Вывод номера, наименования и кредитного рейтинга
всех клиентов, не имеющих торгового представителя.

Для
закрепления материала рекомендуется выполнить Практическое занятие 2.
Использование сложных критериев для выборки возможно при сочетании условий с
помощью операторов AND и OR.
Примечание. Оператор AND требует выполнения обоих условий.
Пример. Вывод фамилии, заработной платы, номера отдела и
должности сотрудников, работающих в отделе с номером 41 и имеющих должность «Stock
Clerk».

Примечание. Оператор OR требует
выполнения хотя бы одного из условий.
Пример. Вывод фамилии, заработной платы и номера отдела
для всех служащих, имеющих должность «Stock Clerk» или
являющихся сотрудниками отдела 41.

Пример. Вывод информации о служащих отдела 44 с
зарплатой 1000 и более, а также о всех служащих отдела 42.

Пример. Вывод фамилии, заработной платы и номера
отдела для всех служащих отделов 44 и 42, зарплата которых составляет 1000 и
более.

Пример. Вывод имени и фамилии каждого вице-президента
строчными буквами, идентификатора пользователя с заглавной буквы и должности
заглавными буквами.

Пример. Вывод имени и фамилии всех служащих с фамилией
PATEL. Фамилия выводится в том виде, как она
хранится в базе данных.

Пример. Вывод наименования и страны всех клиентов с
хорошим кредитным рейтингом. Наименование и страна должны быть соединены.

Пример. Вывод всех наименований товаров, три первых
символа которых равны “Ace”, и длины этих
наименований.

Примечание. Функция SYSDATE возвращает текущую
дату и время. DUAL - это фиктивная таблица, используемая для
просмотра SYSDATE.
Пример. Вывод фамилии и количества отработанных недель
для служащих отдела 43.

Пример. Вывод номера служащего, даты начала работы,
количества отработанных месяцев и даты полугодовой аттестации для всех служащих,
работающих менее 48 месяцев.

Пример. Вывод номера и даты каждого заказа, принятого
торговым представителем номера 11. Вывод дат должен производиться в виде 08/92.

Пример. Вывод сообщения о выполнении заказа с указанным
номером для каждого заказа, сделанного 21 сентября 1992 года. Сообщение должно
содержать сумму заказа.

Пример. Вывод фамилии руководителя фирмы, у которого нет
менеджера. Выходная строка должна указывать, что для этой фамилии номера
менеджера нет.

Пример. Вывод даты следующей пятницы, отстоящей на шесть
месяцев от даты заказа. Выходная дата должна иметь следующий вид:
Friday, March 12
th, 1993

Для
закрепления материала рекомендуется выполнить Практическое занятие 3.
Далее |