Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция SELECT.docx
Скачиваний:
4
Добавлен:
21.09.2019
Размер:
44.22 Кб
Скачать

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.