Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в Веб программирование.doc
Скачиваний:
81
Добавлен:
07.11.2018
Размер:
4.42 Mб
Скачать

Секция where

Для фильтрации результатов выполнения запроса можно использовать условия выборки в секции WHERE. В общем виде синтаксис WHERE выглядит следующим образом:

WHERE [NOT] <условие1> [ AND | OR <условие2>]

Условие представляет собой конструкцию вида:

<столбец таблицы, константа или выражение>

<оператор сравнения> <столбец таблицы, константа или выражение>

или

IS [NOT] NULL

или

[NOT] LIKE <шаблон>

или

[NOT] IN (<список значений>)

или

[NOT] BETWEEN <нижняя граница> AND <верхняя граница>

Операторы сравнения:

<

Меньше

<=

Меньше либо равно

<>

Не равно

>

Больше

>=

Больше либо равно

=

Равно

Примеры запросов с операторами сравнения:

SELECT * FROM Table WHERE Field > 100

SELECT * FROM Table WHERE Field1 <= (Field2 + 25)

Выражение IS [NOT] NULL проверяет данные на [не]пустые значения:

SELECT * FROM Table WHERE Field IS NOT NULL

SELECT * FROM Table WHERE Field IS NULL

Необходимо отметить, что язык SQL, в отличие от языков программирования, имеет встроенные средства поддержки факта отсутствия каких-либо данных. Осуществляется это с помощью NULL-концепции. NULL не является каким-то фиксированным значением, хранящимся в поле записи вместо реальных данных. Значение NULL не имеет определенного типа. NULL – это индикатор, говорящий пользователю (и SQL) о том, что данные в поле записи отсутствуют. Поэтому его нельзя использовать в операциях сравнения. Для проверки факта наличия-отсутствия данных в SQL введены специальные выражения.

Выражение [NOT] LIKE используется при проверке текстовых данных на [не]соответствие заданному шаблону. Символ ‘%’ (процент) в шаблоне заменяет собой любую последовательность символов, а символ ‘_’ (подчеркивание) – один любой символ.

SELECT * FROM Employees WHERE Name LIKE ‘Иван%’

Попадающие под заданное условие фамилии: Иванов

SELECT * FROM Employees WHERE Name LIKE ‘__д%’

Попадающие под заданное условие фамилии: Сидоров

Выражение [NOT] IN проверяет значения на [не]вхождение в определенный список:

SELECT * FROM Employees WHERE Position IN (‘Начальник’, ‘Менеджер’)

Выражение [NOT] BETWEEN проверяет значения на [не]попадание в некоторый диапазон:

SELECT * FROM Employees WHERE Salary BETWEEN 200 AND 500

Этот запрос вернет список работников, зарплата которых больше либо равна 200 у.е. и меньше либо равна 500 у.е.

Несколько условий поиска могут комбинироваться посредством логических операторов AND, OR или NOT:

SELECT *

FROM Employees

WHERE Position IN (‘Начальник’, ‘Менеджер’)

AND Salary BETWEEN 200 AND 500

SELECT *

FROM Employees

WHERE (Position = ‘Начальник’ OR Position =

‘Менеджер’)

AND Salary BETWEEN 200 AND 500

SELECT *

FROM Employees

WHERE NOT (Position = ‘Начальник’ OR Position =

‘Менеджер’)

Секция order by

Необязательная секция ORDER BY в команде SELECT предназначена для сортировки строк результирующего набора данных. Формат этой секции в общем виде выглядит так:

ORDER BY Field1 [ASC | DESC] [, Field2 [ASC | DESC] ] [, …]

Ключевое слово ASC предписывает производить сортировку по возрастанию, а DESC – по убыванию. Если ASC и DESC отсутствуют, по умолчанию подразумевается ASC. Например, выберем записи о начальниках и отсортируем результат в порядке убывания размера зарплат:

SELECT *

FROM Employees

WHERE Position = ‘Начальник’

ORDER BY Salary DESC

Следующий запрос отсортирует сотрудников по отделам (в порядке возрастания номера отдела) и по размеру зарплат внутри каждого отдела (в порядке убывания зарплаты):

SELECT *

FROM Employees

ORDER BY DeptNum ASC, Salary DESC

Ключевое слово ASC можно опустить, ибо оно действует по умолчанию:

SELECT *

FROM Employees

ORDER BY DeptNum, Salary DESC