В предыдущей лекции мы рассмотрели основной блок запроса:
SELECT [DISTINCT] {*, столбец [псевдоним], …} FROM таблица;
Такой запрос всегда возвращает все строки таблицы. Если Вам надо ограничить количество выбираемых строк, необходимо использовать в запросе предложение WHERE. Предложение WHERE следует сразу же за предложением FROM и задает условие, которому должны соответствовать возвращаемые строки.
SELECT [DISTINCT] {*, столбец [псевдоним], …} FROM таблица [WHERE условие];
WHERE предложение, которое ограничивает возвращаемые строки
условие состоит из столбцов, литералов, выражений и операторов сравнения (выражение оператор выражение)
Символьные строки и даты должны быть заключены в апострофы, числовые литералы – нет. Верхний и нижний регистры в символьных литералах различаются, это надо учитывать при составлении запроса.
SQL> SELECT ename, job, sal FROM emp WHERE job='CLERK';
ENAME JOB SAL
---------- --------- ---------
SMITH CLERK 800
ADAMS CLERK 1100
JAMES CLERK 950
MILLER CLERK 1300
SQL> SELECT ename, job, sal FROM emp WHERE job='clerk';
no rows selected
SQL> SELECT ename, job, sal, deptno FROM emp WHERE deptno=10;
ENAME JOB SAL DEPTNO
---------- --------- ---------- ----------
CLARK MANAGER 2450 10
KING PRESIDENT 5000 10
MILLER CLERK 1300 10
Оператор |
Значение |
= |
Равно |
> |
Больше |
>= |
Больше или равно |
< |
Меньше |
<= |
Меньше или равно |
<> |
Не равно |
Оператор |
Значение |
BETWEEN … AND … |
Между двумя значениями (включительно) |
IN (список) |
Совпадает со значением в списке |
LIKE шаблон |
Подобно заданному шаблону |
IS NULL |
Является неопределенным значением |
Оператор сравнения BETWEEN используется для вывода строк, содержащих значения из некоторого диапазона значений. Диапазон задается верхней и нижней границами, которые, также, входят в диапазон. Причем нижняя граница задается первой.
SQL> SELECT ename, job, sal FROM emp WHERE sal BETWEEN 1100 AND 2000;
ENAME JOB SAL
---------- --------- ----------
ALLEN SALESMAN 1600
WARD SALESMAN 1250
MARTIN SALESMAN 1250
TURNER SALESMAN 1500
ADAMS CLERK 1100
MILLER CLERK 1300
Оператор сравнения IN используется для проверки, совпадает ли значение с каким-либо элементом списка. Если элементами списка являются символьные литералы и даты, их необходимо заключить в апострофы. Символы верхнего и нижнего регистров различаются.
SQL> SELECT ename, job, sal FROM emp WHERE sal IN (1100, 1250, 1600);
ENAME JOB SAL
---------- --------- ----------
ALLEN SALESMAN 1600
WARD SALESMAN 1250
MARTIN SALESMAN 1250
ADAMS CLERK 1100
SQL> SELECT ename, job, sal FROM emp WHERE job IN ('clerk', 'SALESMAN');
ENAME JOB SAL
---------- --------- ----------
ALLEN SALESMAN 1600
WARD SALESMAN 1250
MARTIN SALESMAN 1250
TURNER SALESMAN 1500
Оператор сравнения LIKE позволяет искать строки, значения которых соответствуют заданному шаблону. Шаблон может содержать символьные литералы, числа или метасимволы (wildcards):
· Процент (%) используется для представления любого количества символов (нуль и более)
SQL> SELECT ename, job, sal FROM emp WHERE ename LIKE 'A%';
ENAME JOB SAL
---------- --------- ----------
ALLEN SALESMAN 1600
ADAMS CLERK 1100
Для поиска самих метасимволов (процент и подчеркивание) используется опция ESCAPE, которая отменяет специальное значение метасимвола.
SQL> SELECT * FROM dept WHERE loc LIKE 'NEW\_%' ESCAPE '\';
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW_YORK
Для сравнения с неопределенным значением всегда используйте оператор сравнения IS NULL или IS NOT NULL. При использовании других операторов (= или <>) результатом сравнения всегда будет ЛОЖЬ, т.к. неопределенное значение не может быть равно никакому значению, даже неопределенному.
SQL> SELECT empno, ename, sal, comm FROM emp WHERE comm IS NOT NULL;
EMPNO ENAME SAL COMM
------------ ---------- ---------- ----------
7499 ALLEN 1600 300
7521 WARD 1250 500
7654 MARTIN 1250 1400
7844 TURNER 1500 0
Для создания сложных логических выражений используются логические операторы AND, OR, NOT.
§ AND - для объединения условий поиска, каждый из которых должен быть истинным
§ OR - для объединения условий поиска, из которых хотя бы один должен быть истинным
§ NOT - для выбора строк, в которых условие поиска ложно
SQL> SELECT ename, job, sal FROM emp WHERE sal>2800 AND job='MANAGER';
ENAME JOB SAL
---------- --------- ----------
JONES MANAGER 2975
BLAKE MANAGER 2850
SQL> SELECT ename, job, sal FROM emp WHERE sal>2800 OR job='MANAGER';
ENAME JOB SAL
---------- --------- ----------
JONES MANAGER 2975
BLAKE MANAGER 2850
CLARK MANAGER 2450
SCOTT ANALYST 3000
KING PRESIDENT 5000
FORD ANALYST 3000
Логические операторы можно сочетать в одном выражении, при этом порядок выполнения операций зависит от приоритета операторов:
1. Сначала проверяются все операторы сравнения (=, >, >=, <, <=, <>, BETWEEN, IN, LIKE, IS NULL)
2. Из логических операторов наивысший приоритет имеет оператор NOT
3. Затем выполняется каждый оператор AND
4. И, наконец, каждый оператор OR
Операторы с одинаковым приоритетом выполняются слева направо. Стандартный порядок выполнения операторов можно изменить с помощью скобок.
SQL> SELECT ename, job, sal FROM emp
2 WHERE sal<2800 AND job='MANAGER' OR job='PRESIDENT';
ENAME JOB SAL
---------- --------- ----------
CLARK MANAGER 2450
KING PRESIDENT 5000
SQL> SELECT ename, job, sal FROM emp
2 WHERE sal<2800 AND (job='MANAGER' OR job='PRESIDENT');
ENAME JOB SAL
---------- --------- ----------
CLARK MANAGER 2450
Неопределенные значения влияют на результат как простых, так и составных условий поиска. В таблице приведены условия истинности для логических операций AND, OR, NOT с учетом влияния неопределенных значений.
TRUE |
FALSE |
NULL |
|
AND |
|||
TRUE |
TRUE |
FALSE |
NULL |
FALSE |
FALSE |
FALSE |
FALSE |
NULL |
NULL |
FALSE |
NULL |
OR |
|||
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
NULL |
NULL |
TRUE |
NULL |
NULL |
NOT |
|||
FALSE |
TRUE |
NULL |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.