- •Оператор select
- •Простейший вид оператора select
- •Использование предложения where
- •Внутреннее соединение таблиц
- •Использование псевдонимов таблиц
- •Предложение order by - определение сортировки
- •Устранение повторяющихся значений
- •Расчет значений вычисляемых столбцов
- •Агрегатные функции
- •Группировка записей
- •Задание сложных условий поиска
- •Использование подзапросов
- •Дополнительные возможности использования подзапросов, возвращающих единичное значение
- •Использование подзапросов, возвращающих множество значений
- •Внешние соединения
- •Union - объединение результатов выполнения нескольких операторов select
TOVARY (товары)
-
TOVAR
A
Название товара
ED_IZM
A
Единица измерения
ZENA
I
Цена
POKUPATELI (покупатели)
-
POKUP
A
Наименование покупателя
GOROD
A
Город покупателя
TELEFON
A
Телефон покупателя
RASHOD (расход товара)
-
N_RASH
I
Номер расхода (документа)
DAT_RASH
D
Дата расхода
KOLVO
S
Количество расхода
TOVAR
I
Товар
POKUP
I
Покупатель
Оператор select
Оператор SELECT - наиболее часто используемый оператор SQL. Он позволяет производить выборки данных из ТБД и преобразовывать к нужному виду полученные результаты. С его помощью можно реализовать весьма сложные условия выбора данных из различных таблиц.
В самом общем виде он имеет следующий формат:
SELECT [DISTINCT | ALL] {* | <значение1> [, <значение2> ...]} FROM <таблица1> [, < таблица2> . ..]
[WHERE <условия_поиска>]
[GROUP BY столбец [COLLATE collation]]
[,столбец [COLLATE collation] ...]
[HAVING < условия_поиска >]
[UNION <onepaтop_select>]
[PLAN <план_ выполнения_запроса>]
[ORDER BY <список_столбцов>]
Простейший вид оператора select
(SELECT ... FROM)
В простейшем случае, когда требуется создание НД, состоящего из всех записей одной или нескольких таблиц, оператор SELECT имеет такой вид:
SELECT {* | <значение1> [, <значение2> ...]} FROM <таблица1> [, < таблица2> ...]
После ключевого слова SELECT приводится список значений, каждое из которых определяет столбец возвращаемого оператором результирующего набора данных. В большинстве случаев - это имена столбцов таблиц, перечисленных после слова FROM. Звездочка «*» указывает, что в результат выполнения запроса нужно включить все столбцы той или иной таблицы. После FROM указывается список ТБД, из которых будет происходить выборка данных.
Например, создать набор данных, состоящий из всех столбцов и всех записей таблицы RASHOD, можно с помощью такого оператора:
SELECT * FROM RASHOD
Такой же НД можно получить, если вместо звездочки перечислить все столбцы таблицы:
SELECT N_RASH, DAT_RASH, KOLVO, TOVAR, POKUP FROM RASHOD
Использование предложения where
Предложение WHERE используется для включения в НД лишь нужных записей. В этом случае оператор SELECT имеет следующий формат:
SELECT {* | <значение1> [, <значение2> ...]} FROM <таблица1> [, < таблица2> ...] WHERE <условия_поиска>
В набор данных, возвращаемый оператором SELECT, будут включаться только те записи, которые удовлетворяют условию поиска, указанному после WHERE. Далее будут рассмотрены варианты формирования разнообразных условий поиска, а пока разберем два простейших условия.
Внутреннее соединение таблиц
При сравнении значения столбца одной таблицы со значением столбца другой таблицы условие поиска имеет следующий вид:
<имя столбца таблицы1> <оператор> <имя столбца таблицы2>
Чтобы выбрать все записи о расходе товара из таблицы RASHOD и для каждого товара указать его цену из таблицы TOVARY, можно использовать такой оператор:
SELECT RASHOD.*, TOVARY.ZENA
FROM RASHOD, TOVARY
WHERE RASHOD.TOVAR = TOVARY.TOVAR
При выполнении оператора для каждой записи из таблицы RASHOD ищется запись в таблице TOVARY, у которой значение в поле TOVAR совпадает со значением в поле TOVAR текущей записи таблицы RASHOD.
При этом безразлично, в каком порядке перечислять таблицы в условии поиска, т. е. безразлично, какая из таблиц будет упомянута слева, а какая справа. Следующие условия поиска идентичны:
RASHOD.TOVAR = TOVARY.TOVAR TOVARY.TOVAR = RASHOD.TOVAR
Такой способ соединения таблиц называется внутренним соединением.
При внутреннем соединении двух таблиц А и В логический порядок формирования результирующего НД можно представить себе следующим образом.
Из столбцов, которые указаны после слова SELECT, составляется промежуточный НД путем сцепления результирующих столбцов каждой записи из таблицы А и результирующих столбцов записи из таблицы В.
Из получившегося НД отбрасываются все записи, не удовлетворяющие условию поиска в предложении WHERE.
Пример. Получить все записи о расходе товара из таблицы RASHOD. Для каждого покупателя указать его адрес из таблицы POKUPATELI:
SELECT RASHOD.*, POKUPATELI.ADRES
FROM RASHOD, POKUPATELI
WHERE POKUPATELI.POKUP = RASHOD.POKUP
Как можно видеть из примера, в результирующий НД не включены:
записи из таблицы RASHOD с пустым наименованием покупателя, т. к. нет ни одной записи с пустым наименованием покупателя в таблице POKUPATELI;
запись из таблицы POKUPATELI для покупателя Геракл, поскольку для этого покупателя нет записей в таблице RASHOD.
Пример. Получить все записи о расходе товара из таблицы RASHOD. Для каждого покупателя указать его адрес из таблицы POKUPATELI:
SELECT RASHOD.*, POKUPATELI.ADRES
FROM RASHOD, POKUPATELI
WHERE POKUPATELI.POKUP = RASHOD.POKUP
В результирующий НД не включены:
записи из таблицы RASHOD с пустым наименованием покупателя, т. к. нет ни одной записи с пустым наименованием покупателя в таблице POKUPATELI;
запись из таблицы POKUPATELI для покупателя Геракл, поскольку для этого покупателя нет записей в таблице RASHOD.