Читать книгу Основы программирования в СУБД Oracle. SQL+PL/SQL. - О. А. Ткачев - Страница 8
ЧАСТЬ 2. SQL – ЯЗЫК СТРУКТУРИРОВАННЫХ ЗАПРОСОВ
Глава 2. Структура оператора SELECT и формирование условий выбора
Оператор SELECT
ОглавлениеОператор SELECT предназначен для выборки данных из таблиц, то есть он реализует одно из основных назначений базы данных – предоставлять пользователю информацию. Результатом выполнения оператора SELECT является таблица.
Согласно классической классификации оператор SELECT относится к операторам DML. Однако в Oracle версии SQL к операторам DML относят только INSERT, UPDATE, MERGE и DELETE, а оператор SELECT выделен в отдельную группу.
В общем виде структура оператора SELECT может быть представлена в следующем виде:
SELECT [ALL|DISTINCT] {список столбцов или выражений}
FROM {список таблиц}
[WHERE {условия выбора}]
[ORDER BY {столбцы сортировки [ASC|DESC]]}
[GROUP BY {столбцы группировки}]
[HAVING {условия на группу}];
(Квадратными скобками отмечены необязательные элементы.)
Дадим предварительное описание элементов данного оператора.
Оператор SELECT начинается со списка столбцов или выражений, значения которых будет отображаться в результате выполнения запроса. По умолчанию SELECT не исключает дублирование строк в результате выполнения запроса. Для исключения дублирования следует использовать ключевое слово DISTINCT.
В предложении FROM указываются источники данных. В качестве таких источников можно использовать таблицы базы данных, а также таблицы, которые возвращают подзапросы или представления. В тех запросах, где используется несколько таблиц, необходимо обязательно указывать условия соединения. Если этого не сделать, то будет осуществляться декартово произведение таблиц.
Предложение WHERE содержит условия выбора строк, а также может содержать условия соединения таблиц в многотабличных запросах.
Строки, удовлетворяющие условиям выбора, могут быть упорядочены по значениям одного или нескольких столбцов.
В предложении ORDER BY указываются имена столбцов, по значению которых следует упорядочить результат выполнения запроса. По умолчанию строки упорядочиваются в порядке возрастания значений столбца. Для сортировки в порядке убывания после имени столбца следует указать параметр DESC. Если указать несколько столбцов, то результат будет упорядочиваться сначала по значению первого столбца; строки, имеющие одинаковые значения первого столбца, упорядочиваются по значению второго столбца, и так далее.
В предложении GROUP BY можно указать столбцы, по которым следует осуществить группировку. Группировка состоит в том, что несколько строк, имеющих совпадающие значение столбцов, по которым осуществляется группировка, объединяются в одну строку. Обычно группировка используется в запросах, использующих агрегатные функции, например: Sum (), Max ().
При наличии группировки в предложении HAVING можно указать условия на группу. Результат выполнения запроса будет содержать данные только о тех группах записей, которые удовлетворяют этому условию.
При изучении SQL следует обратить внимание на то, что для формирования запроса необходимо:
– определить структуру запроса, соответствующую заданной задаче обработки данных;
– синтаксически правильно записать запрос.
Перейдем к рассмотрению примеров, которые должны научить нас правильно решать обе задачи. Сначала будут рассмотрены запросы, структура которых очевидна, поэтому основное внимание будет уделяться синтаксису. Потом мы перейдем к рассмотрению более сложных запросов, где основной задачей будет являться определение структуры запроса.
В своей простейшей форме оператор SELECT должен включать в себя следующее:
– предложение SELECT, где указываются имена столбцов, значение которых будет отображаться в результате выполнения запроса;
– предложение FROM, в котором указывается имя таблицы, содержащей данные.
SELECT {список столбцов}
FROM {таблица};
Пример 2.1. Вывод содержимого одного столбца
SELECT employee_id
FROM Employees;
Пример 2.2. Вывод содержимого нескольких столбцов
SELECT employee_id, first_name, last_name, department_id
FROM Employees;
Если в качестве результата выполнения запроса нужно вывести значения всех столбцов, то вместо списка столбцов указывается символ *.
Пример 2.3. Вывод значений всех столбцов
SELECT *
FROM Employees;
Исключение дублирования данных
Рассмотрим запрос, который выводит коды должностей сотрудников.
Пример 2.4. Вывод значений столбца job_id
SELECT job_id
FROM Employees;
Так как одну должность могут занимать несколько сотрудников, то коды должностей будут повторяться. Для того чтобы исключить повторения значений, следует добавить ключевое слово DISTINCT.
Пример 2.5 Вывод значений столбца job_id без дублирования
SELECT DISTINCT job_id
FROM Employees;