Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD / Labs / Russian / Lab4R-SELECTBasicFeatures.doc
Скачиваний:
39
Добавлен:
20.02.2016
Размер:
346.62 Кб
Скачать

Фраза where

Фраза WHERE позволяет указать условие, которому должны удовлетворять результирующие строки. Мы уже рассмотрели использование WHERE для соединения таблиц.

Использование простых условий Использование операторов сравнения

Пример 1: Выдать всех профессоров:

SELECT Name AS List_of_all_professors

FROM TEACHER

WHERE UPPER(Post) = 'PROFESSOR';

Здесь PROFESSOR- строковый литерал. В SQL строковые литералы заключаются в одинарные кавычки.

Примечание: Обратите внимание, здесь мы воспользовались функцией UPPER для преобразования букв с прописные и указали литерал в виде прописных букв. Рекомендуем использовать эту возможность всякий раз, когда вы сравниваете строки символов, так как в базе данных они могут храниться в виде прописных и/или строчных букв. А Oracle сравнивает строки с учетом регистра.

Пример 2:Привести все факультеты с фондами финансирования, превышающими 30000:

SELECT Name

FROM FACULTY

WHERE Fund > 30000;

Здесь фонд является числовым полем, поэтому 30000 не заключается в кавычки.

Логические операторы

Пример 3 – Логический AND:Выдать факультеты из корпуса 5 с фондами более 20000:

SELECT Name

FROM FACULTY

WHERE Building ='5' AND Fund < 200000;

Пример 4 – Логический OR: Привести кафедры из корпуса 7 или 3:

SELECT Name

FROM DEPARTMENT

WHERE UPPER(Building) ='7' OR UPPER(Building) ='3';

Пример 5 – Логический NOT:Привести факультеты, отличные от ‘informatics:

SELECT Name

FROM FACULTY

WHERE NOT UPPER(Name) ='INFORMATICS';

Пример 6. Комбинирование логических операторов:Выдать преподавателе, имеющих должность ‘assistant' и имеющих ставку менее 150 или надбавку более 100:

SELECT Name

FROM TEACHER

WHERE UPPER(Post) ='ASSISTANT' AND ( Salary < 150 OR Commission > 100 );

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

  • NOT

  • AND

  • OR

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

Выражение над столбцами во фразе where

Пример 7. Выражение над столбцами:Выдать преподавателей, у которых зарплата (то есть ставка + надбавка) превышает 300:

SELECT Name

FROM TEACHER

WHERE Salary + Commission > 300;

Специальные операторы Оператор in

Оператор IN. Он проверяет вхождение аргумента слева во множество, задаваемое аргументом справа.

Пример 8. Оператор IN:Выдать типы лекций, читаемые в Mon, Tue или Wed:

SELECT Type

FROM LECTURE

WHERE UPPER(Day) IN ('MON', 'TUE', 'WED');

Любой оператор IN с множеством, представленным в виде литералов, имеет эквивалентное представление с использованием операторов OR. Например, предыдущий запрос имеет такую эквивалентную запись:

SELECT Type

FROM LECTURE

WHERE UPPER(Day) = 'MON' OR UPPER(Day) = 'TUE' OR UPPER(Day) = 'WED';

Оператор IN также эквивалентен оператору "=ANY" (см. далее).

Оператор NOT IN. Оператор NOT IN является отрицанием к IN.

Пример 9. Оператор NOT IN:Привести факультеты, которые располагаются в корпусах, отличающихся от 1, 7, 8, 11:

SELECT Name

FROM FACULTY

WHERE UPPER(Building) NOT IN ('1', '7', '8', '10');

Правый операнд в [NOT] IN может быть подзапросом. Эта возможность буде изучена в Лаб. 6.

NULL в операторе NOT IN. Если хотя бы один из элементов множества является NOT NULL, то для любого значения левого аргумента NOT IN выдает логическое значение UNKNOWN (и поэтому ни одна строка не может удовлетворить такому условию). Например, следующий запрос выдаст факультеты, которые не располагаются в корпусах 1 или 4:

SELECT Name

FROM FACULTY

WHERE UPPER(Building) NOT IN ( '1', '4' );

Однако следующий запрос ничего не выдаст:

SELECT Name

FROM FACULTY

WHERE UPPER(Building) NOT IN ( '1', '4', NULL );

Здесь условие фразы WHERE эквивалентно следующему:

Building != '1' AND Building != '4' AND Building != null

Так как все условия, которые производят сравнение со значением NULL в качестве результата возвращают UNDEFINED, то и все приведенное выше условие будет всегда равно UNDEFINED не зависимо от значения столбца Building. Такая ситуация вполне возможна в том случае, когда правым аргументом является подзапрос.

Соседние файлы в папке Russian