
Ограничение количества выбираемых строк
Ограничить набор строк, возвращаемых в результате запроса, можно с помощью предложения WHERE. Ограничение количества выбираемых строк с помощью предложения WHERE соответствует операции выборки реляционной алгебры.
Предложение WHERE следует сразу за предложением FROM и задает условие, которое должно быть выполнено. Условие представляет собой некоторое логическое выражение, которое может состоять из имен столбцов, выражений, констант, операторов сравнения и логических операторов. В результирующую выборку попадут только те строки таблицы, для которых заданное логическое выражение будет иметь значение ‘истина’.
I. Простые операторы сравнения.
В предложении WHERE могут использоваться следующие операторы сравнения:
= равно
<> не равно
> больше
>= больше или равно
< меньше
<= меньше или равно
Пример: Вывод должности сотрудника по фамилии Ngao:
SELECT title
FROM s_emp
WHERE last_name=’Ngao’;
Результат:
TITLE
----------------
VP, Operations
Обратите внимание, что строки символов и даты в предложении WHERE должны быть заключены в апострофы (‘ ‘), в то время как числа – нет.
Пример: Вывод фамилий и должностей сотрудников с зарплатой от 2000:
SELECT last_name, title
FROM s_emp
WHERE salary>=2000;
Результат:
LAST_NAME TITLE
------------- -----------
Velasquez President
II. Специальные операторы сравнения sql.
1. BETWEEN…AND… – используется для поиска значений попадающих в заданный интервал (включительно).
Пример: Вывод фамилии сотрудников, чья зарплата больше или равна 1500 и меньше или равна 2000:
SELECT last_name
FROM s_emp
WHERE salary BETWEEN 1500 AND 2000;
Результат:
LAST_NAME
---------
Ropeburn
Sedeghi
Nguyen
2. IN (список) – используется для поиска значений, совпадающих с каким-либо значением из списка.
Пример: Вывод фамилий сотрудников с номерами 1, 3 и 5:
SELECT last_name
FROM s_emp
WHERE id IN (1, 3, 5);
Результат:
LAST_NAME
-----------
Ropeburn
Nagayama
Velasquez
3. LIKE – позволяет производить поиск по некоторому символьному шаблону. Такая операция называется поиском по метасимволам. В SQL можно использовать два метасимвола:
% - заменяет любую последовательность из нуля и более символов;
_ - заменяет любой одиночный символ.
Пример: Вывод фамилий сотрудников с фамилиями, начинающимися на букву ‘C’:
SELECT last_name
FROM s_emp
WHERE last_name like ‘C%’;
Результат:
LAST_NAME
----------
Catchpole
Chang
Пример: Вывод фамилий, второй буквой в которых является “а”:
SELECT last_name
FROM s_emp
WHERE last_name like ‘_a%’;
Результат:
LAST_NAME
---------
Nagayama
Catchpole
Havel
Magee
Maduro
Patel
Markarian
Patel
Dancs
4. IS NULL – используется для поиска неизвестных значений. Как мы уже упоминали в Лекции 3, любые операции сравнения с неизвестным значением дают ‘неизвестно’. Поэтому для поиска неизвестных значений нельзя использовать простые операторы сравнения. Вместо этого используются специальные операторы SQL IS NULL – для поиска неизвестных значений, IS NOT NULL – для поиска значений не являющихся неизвестными.
Пример: Вывод фамилий и должностей для всех служащих, не получающих комиссионные:
SELECT last_name, title
FROM s_emp
WHERE commission_pct = NULL;
Результат:
no rows selected
-- Запрос не вернул ни одной строки, так как при любом значении -- commission_pct выражение commission_pct = NULL дает значение -- ‘неизвестно’.
Правильный запрос:
SELECT last_name, title
FROM s_emp
WHERE commission_pct IS NULL;
Результат:
LAST_NAME TITLE
-------------- ---------------------
Velasquez President
Ngao VP, Operations
Nagayama VP, Sales
Quick-To-See VP, Finance
Ropeburn VP, Administration
Urguhart Warehouse Manager
Menchu Warehouse Manager
Biri Warehouse Manager
…
20 rows selected.
Пример: Вывод фамилий и должностей для всех служащих, получающих комиссионные:
SELECT last_name, title
FROM s_emp
WHERE commission_pct <> NULL;
Результат:
no rows selected
-- Запрос не вернул ни одной строки, так как при любом значении -- commission_pct выражение commission_pct <> NULL дает значение -- ‘неизвестно’.
Правильный запрос:
SELECT last_name, title
FROM s_emp
WHERE commission_pct IS NOT NULL;
Результат:
LAST_NAME TITLE
---------------- ----------------------
Magee Sales Representative
Giljum Sales Representative
Sedeghi Sales Representative
Nguyen Sales Representative
Dumas Sales Representative