Средства манипулирования данными
Оператор SELECT
Позволяет производить выборки из таблиц БД и преобразовывать к нужному виду полученные результаты.
Общий формат оператора SELECT
SELECT [DISTINCT | ALL ] {* | <значение1> [,<значение2> …]}
FROM <таблица1> [ , <таблица2> … ]
[ WHERE <условия_поиска> ]
[ GROUP BY столбец [, столбец1 … ]
[ HAVING < условия_поиска> ]
[ UNION <оператор_select>]
[ PLAN <план_выполнения_запроса>]
[ ORDER BY <список_столбцов>]
Простейший формат:
SELECT { * | <значение1>, <значение1> [,<значение2> …]}
FROM <таблица1> [ , <таблица2 … ]
Например:
SELECT *
FROM RASHOD
Или так:
SELECT N_RASH, DAT_RASH, KOLVO, TOVAR, POKUP
FROM RASHOD
Использование предложения WHERE для задания условия отбора
Предложение WHERE используется для включения в НД лишь нужных записей.
В этом случае имеем следующий формат:
SELECT {* | <значение1> [,<значение2> …]}
FROM <таблица1> [ , <таблица2> … ]
[ WHERE <условия_поиска> ]
Сравнение значения столбца с константой При сравнении столбца с константой условие имеет вид:
<условия поиска > = <оператор> <константа>
Где <оператор> - одна из следующих операций отношения:
<оператор> = { = | < | > | <= | >= | != | !< | !> | <> }
Пример:
SELECT * FROM RASHOD WHERE KOLVO = 20
Использование предложения WHERE. Внутреннее соединение таблиц.
При сравнении значения одной таблицы с со значением столбца другой таблицы условие поиска имеет следующий вид:
<условия поиска > = <имя столбца 1> <оператор> <имя столбца 2>
Пример:
Чтобы выбрать все записи о расходе товара из таблицы RASHOD и для каждого товара указать его цену из таблицы TOVARY, можно использовать такой оператор:
SELECT RASHOD.*, TOVARY.ZENA
FROM RASHOD, TOVARY
WHERE RASHOD.TOVAR = TOVARY.TOVAR
Такой способ соединения называется внутренним соединением.
При внутреннем соединении двух таблиц A и B логический порядок формирования результирующего набора данных можно представить следующим образом.
1. Из столбцов, которые указаны после слова SELECT, составляется промежуточный набор данных путем сцепления результирующих столбцов каждой записи из таблицы А и результирующих столбцов записи из таблицы В.
2. Из получившегося НД отбрасываются все записи , не удовлетворяющие условию в предложении WHERE.
Замечание:
Фактический порядок выполнения запроса для конкретного SQL-сервера может быть другим.
Пример:
Таблица A
Ст. P1 | Ст. P2 | Ст. P3 |
a | x | |
b | x | |
c | y | |
d |
Таблица B
Ст. P1 | Ст. P2 |
x | |
y | |
z |
SELECT A.P1, A.P2, B.P2
FROM A, B
WHERE A.P2 = B.P1
Промежуточный набор
Ст. A.P1 | Ст. A.P2 | Ст. B.P1 | Ст. B.P2 |
a | x | x | |
a | x | y | |
a | x | z | |
b | x | x | |
b | x | y | |
b | x | z | |
c | y | x | |
c | y | y | |
c | y | z |
Окончательный набор
Ст. A.P1 | Ст. A.P2 | Ст. B.P2 |
a | x | |
b | x | |
c | у |
Использование псевдонимов таблиц
SELECT …
FROM < таблица1 псевдоним1> [, таблица2 псевдоним 2 … ]
WHERE …
Пример:
SELECT R.*, P.ADRES
FROM RASHOD R, POKUPATELI P
WHERE P.POKUP = R.POKUP
3.4.1.5. Предложение ORDER BY – определение сортировки
Результирующий набор данных можно отсортировать с помощью предложения:
ORDER BY <список_столбцов>
Пример:
SELECT POKUP, DATRASH, TOVAR, KOLVO
FROM RASHOD
WHERE TOVAR = “Кока-кола”
ORDER BY POKUP, DATARASH
Устранение повторяющихся значений
Часто в результирующий НД необходимо включать не все записи с одинаковым значением комбинации столбцов. Для этого используется ключевое слово
DISTINCT
Пример:
SELECT DISTINCT TOVAR
FROM RASHOD
Замечание:
Использование DISTINCT может существенно замедлить выполнение запроса, т.к. сервер будет тратить дополнительные ресурсы на проверку каждой записи. Обычно применяется в запросах, использующих агрегатные функции.