Выборка данных

Команды SQL

В SQL имеется множество команд. Следующая таблица содержит команды, которые рассматриваются в данном курсе.

Команда Действие
SELECT Используется для извлечения данных из базы данных. Команда, заменяющая все операторы реляционной алгебры и использующаяся наиболее широко.
INSERT UPDATE DELETE Команды, предназначенные, соответственно, для ввода новых, изменения существующих и удаления ненужных строк из таблиц базы данных. Известны как команды языка манипулирования данными (DML – Data Manipulation Language).
CREATE ALTER DROP RENAME TRUNCATE Используются для создания, изменения и удаления объектов базы данных (таблиц, представлений, последовательностей и т.п.) Известны как команды языка определения данных (DDL – Data Definition Language).
COMMIT ROLLBACK SAVEPOINT Команды управления транзакциями. Управляют изменениями, которые производятся с помощью команд DML.

Условные обозначения синтаксиса:

Обозначение Объект или термин Пример
Прописные буквы Команды, функции, ключевые слова SELECT*FROMтаблица
Строчные буквы Синтаксические переменные, то есть обозначения, вместо которых надо подставить конкретные значения SELECT * FROM таблица
Вертикальная черта Разделяет альтернативные элементы синтаксиса OFF|ON
Квадратные скобки Список необязательных элементов синтаксиса [OFF|ON]
Фигурные скобки Список обязательных элементов синтаксиса {OFF|ON}
Подчеркивание Значение по умолчанию { OFF |ON}
Многоточие Означает, что выражение перед многоточием может быть повторено несколько раз SELECT столбец, … FROM таблица

Для выборки строк из базы данных используется команда SELECT языка SQL. Сокращенный синтаксис команды SELECT:

SELECT [ DISTINCT ] { *| столбец [ псевдоним ], …}

FROM таблица
[WHERE условие]
[ORDER BY {столбец | выражение [ ASC | DESC], … }];

где:

предложение SELECT указывает список выбираемых столбцов;
ключевое слово DISTINCT подавляет выборку дубликатов строк;
столбец выбирает заданный столбец;
* выбирает все столбцы таблицы;
предложение FROM указывает таблицу, из которой производится выборка;
предложение WHERE ограничивает запрос строками, удовлетворяющими заданному условию;
условие логическое выражение, состоящее из имен столбцов, выражений, констант и операторов сравнения;
предложение ORDER BY сортирует строки по значению задаваемых столбцов или выражений;
ASC задает сортировку по возрастанию (используется по умолчанию);
DESC задает сортировку по убыванию.

Команда SELECT используется именно для выборки данных. Получая эту команду от программы-клиента, сервер выбирает нужные строки и столбцы и передает их клиенту. Что произойдет с этими данными в дальнейшем – зависит от конкретной программы-клиента, она может вывести их на экран, на печать, сохранить в файл, передать другой программе на обработку и т.п. За все эти операции команда SELECT уже не отвечает.

Обратите внимание, команду SELECT можно логически разделить на 4 предложения, каждое из которых несет свою смысловую нагрузку: предложение SELECT (содержит список выбираемых столбцов), предложение FROM (содержит имя таблицы), предложение WHERE (содержит условие, ограничивающее выборку) и предложение ORDER BY (задает сортировку строк). При составлении команды принято (но не обязательно) каждое предложение писать с новой строки. Такой подход облегчает восприятие структуры запроса и поиск ошибок. Каждая команда SQL должна оканчиваться символом ‘;’, который является признаком того, что ввод команды закончен и ее можно передать серверу на выполнение.

Команда SELECT обязательно должна содержать список столбцов таблицы, которые пользователь желает выбрать в предложении SELECT, а также имя самой таблицы в предложении FROM. В случае если нужно выбрать все столбцы, можно не затрудняться их перечислением и воспользоваться символом *.

Пример: Вывести все данные из таблицы s_dept:

SELECT *

FROM 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

12 rows selected.

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

Пример: Вывести номера и названия отделов из таблицы s_dept:

SELECT id, name

FROM s_dept;

Результат:

ID NAME

---- -----------

10 Finance

31 Sales

32 Sales

33 Sales

34 Sales

35 Sales

41 Operations

12 rows selected.

В предложении SELECT можно использовать не только имена столбцов, но и выражения, составленные с помощью арифметических операторов (‘+’ - сложение, ‘-‘ - вычитание, ‘*’ - умножение, ‘/’ - деление), имен столбцов и констант.

Пример: Для каждого служащего вывести его фамилию и удвоенную зарплату:

SELECT last_name, salary*2

FROM s_emp;
-- В этом примере в предложении SELECT присутствует арифметическое выражение -- salary*2, где salary – имя столбца, * - оператор умножения, 2 –
-- константа.

Результат:

LAST_NAME SALARY*2

--------------- ---------

Velasquez 5000

Ngao 2900

Nagayama 2800

Quick-To-See 2900

25 rows selected.

При использовании арифметических операторов необходимо помнить об очередности их выполнения: умножение и деление выполняются в первую очередь, затем – сложение и вычитание. Если операторы в выражении имеют один и тот же приоритет, они выполняются слева направо. В случае если Вам необходимо поменять очередность – используйте скобки.

При выводе столбцы получают те имена, которые были указаны для них в предложении SELECT. Часто эти имена бывают трудны для понимания и даже бессмысленны. Если Вы желаете, чтобы при выводе у столбцов были другие имена, можно задать для них псевдонимы. Псевдоним задается в списке команды SELECT сразу за именем столбца и отделяется от него пробелом. Если вы желаете включить в псевдоним пробелы или специальные символы (например, символы русского алфавита), его необходимо заключить в кавычки (“ “). Кавычки также необходимо использовать, если Вы хотите, чтобы в псевдониме различались символы верхнего и нижнего регистра. В противном случае все символы псевдонима выводятся в верхнем регистре.

Пример: Вывод фамилии, заработной платы и суммы компенсационных выплат за год для каждого служащего. Объем выплат за год вычисляется путем прибавления к заработной плате ежемесячной премии в размере 100 долларов и умножения суммы на 12. Назвать столбец ‘годовая зарплата’:

SELECT last_name, salary, 12 * (salary + 100) "годовая зарплата"

FROM s_emp;

Результат:

LAST_NAME SALARY годовая зарплата

-------------- --------- ----------------

Velasquez 2500 31200

Ngao 1450 18600

Nagayama 1400 18000

25 rows selected.

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

Кроме того, в список SELECT можно включать литералы. Литерал – это любой символ, выражение или число, включенные в список SELECT и не являющиеся ни именем, ни псевдонимом столбца. Литералы печатаются для каждой возвращаемой строки. Символьные литералы и литералы-даты должны быть заключены в апострофы (‘ ‘), а числовые литералы – нет.

Пример: Вывести фамилию и заработную плату для каждого сотрудника в виде <фамилия> получает <зарплата>. Столбец назвать ‘служащие’.

SELECT last_name||' получает '||salary "служащие"
FROM s_emp;

Результат:

Служащие
--------------------------
Velasquez получает 2500
Ngao получает 1450
Nagayama получает 1400
Quick-To-See получает 1450
Ropeburn получает 1550
Urguhart получает 1200

25 rows selected.

Если какое-то из полей в БД содержит неопределенное значение, при выводе на экране на его месте отображается пустое поле.

Пример: Вывод фамилии, должности и комиссионного процента для каждого служащего:

SELECT last_name, title, commission_pct

FROM s_emp;

Результат:

LAST_NAME TITLE COMMISSION_PCT

--------------- -------------------- --------------

Velasquez President

Ngao VP, Operations

Nagayama VP, Sales

Quick-To-See VP, Finance

Ropeburn VP, Administration

Urguhart Warehouse Manager

Menchu Warehouse Manager

Biri Warehouse Manager

Catchpole Warehouse Manager

Havel Warehouse Manager

Magee Sales Representative 10

Giljum Sales Representative 12,5

Sedeghi Sales Representative 10

25 rows selected.

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

NVL (выражение1, выражение2)

где:

выражение1 исходное или вычисленное значение, которое может быть неопределенным;
выражение2 значение, которое подставляется вместо неопределенного значения.

Функцию NVL можно применять для преобразования любого типа данных, но необходимо следить, чтобы тип данных выражения2 был тем же, что и у выражения1.

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

SELECT last_name, title, nvl(commission_pct,0) comm

FROM s_emp;

Результат:

LAST_NAME TITLE COMM

------------ --------------------- --------------

Velasquez President 0

Ngao VP, Operations 0

Nagayama VP, Sales 0

Quick-To-See VP, Finance 0

Ropeburn VP, Administration 0

Urguhart Warehouse Manager 0

Menchu Warehouse Manager 0

Biri Warehouse Manager 0

Catchpole Warehouse Manager 0

Havel Warehouse Manager 0

Magee Sales Representative 10

Giljum Sales Representative 12,5

Sedeghi Sales Representative 10

25 rows selected.

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

Пример: Вывод названий отделов из таблицы s_dept:

SELECT name

FROM s_dept;

Результат:

NAME

----------------

Finance

Sales

Sales

Sales

Sales

Sales

Operations

Operations

Operations

Operations

Operations

Administration

12 rows selected.

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

Пример: Вывод названий отделов из таблицы s_dept, исключая дубликаты:

SELECT DISTINCT name

FROM s_dept;

Результат:

NAME

----------------

Administration

Finance

Operations

Sales


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: