Предложение WHERE в операторе SELECT. Формирование запроса по условию поиска и внутреннее соединение таблицы

Операнд WHERE задает критерии, которым должны удовлетворять записи в результирующем наборе данных. Выражение, описывающее условие отбора, является логическим. Его элементами могут быть имена полей, операции сравнения, арифметические и логические операции, скобки, функции LIKE, NULL, IN И др.

SELECT (*/(знач.1),(знач.2)…/)- список полей.

FROM (табл.1),(табл.2)… - имена набора данных (таблиц)

WHERE (условие внутреннего соединения (поиска))

 

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

Если сравнивать значение столбца одной таблицы со значением столбца другой таблицы, то условие поиска будет выглядеть так:

<Выражение1> <Операция сравнения> <Выражение2>

Выражение состоит из имен полей, функций, констант, значений, знаков операций и круглых скобок. В простейшем случае выражение состоит из имени поля или значения.

Пример:

SELECT Rashod.*, Tovary.Cena

FROM Rashod, Tovary

WHERE Rashod.Tovar=Tovary.Tovar, Rashod.Kolvo<20

 

При соединении таблиц внутренним соединением должны быть выполнены правила:

1) Из столбцов, указанных после SELECT, составляется промежуточный набор данных путем сцепления этих столбцов.

2) Из получившегося набора данных отбрасываются те записи, которые не удовлетворяют условию после служебного слова WHERE.


Использование оператора SELECT для сортировки НД и устранения повторяющихся значений.

Сортировка — это упорядочение записей по возрастанию или убыванию значений полей. Поля, по которым выполняется сортировка, указываются в операнде ORDER BY. Порядок следования полей определяет порядок сортировки. Сначала записи упорядочиваются по значениям поля, указанного в этом списке первым (глобальная сортировка). Затем записи, имеющие одинаковое значение первого поля, упорядочиваются по второму полю и т. д. (Сортировка внутр. группы).

SELECT Pokup, Data_Rash, Kolvo, Tovar

FROM Rashod

ORDER BY Pokup, Data_Rash

Используя WHERE можно ограничить сортировку по значениям какого либо поля:

SELECT Pokup, Data_Rash, Kolvo, Tovar

FROM Rashod

WHERE Tovar=’Мышь’

ORDER BY Pokup

По умолчанию сортировка происходит в порядке возрастания значений полей. Для задания указания обратного порядка сортировки по какому-либо полю нужно указать после имени этого поля описатель DESC.

Устранение повторяющихся записей.

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

SELECT DISTINCT/ALL {*/(знач.1),(знач.2)}

FROM (табл.1),(табл.2)…

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

Например, получим наименования всех товаров таблицы расходов, исключая повтор наименований товаров:

SELECT DISTINCT Tovar

FROM Rashod

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

- AVG () — среднее значение. - MAX () — максимальное значение

- MIN () - минимальное значение. - SUM () - сумма значений

- COUNT () — подсчитывает число вхождений значения выражения во все записи набора данных

- COUNT (*) —количество ненулевых значений

1) Посчет количества заказчиков конкретного товара

SELECT COUNT (DISTINCT Pokup) as COUNT Pokup

FROM Rashod

2) Вычисление общей стоимости

SELECT SUM (R.Kolvo*T.Cena) as ABS_CENA

FROM Rashod R, Tovary T

WHERE (R.Tovar=T.Tovar) AND (R.DAT_RAS=”18.03.10”)

3) Общее количество товара на каждую дату

SELECT R.Tovar, SUM (R.Kolvo*T.Cena)

FROM Rashod R, Tovary T

WHERE (R.Tovar=T.Tovar)

Group By R.Tovar, R.Data_Rash