
- •Лабораторная работа 4
- •Цели лабораторной работы
- •Описание и примеры
- •Основные фразы запроса: select и from Фраза select
- •Фраза from
- •Фраза where
- •Использование простых условий Использование операторов сравнения
- •Логические операторы
- •Выражение над столбцами во фразе where
- •Специальные операторы Оператор in
- •Оператор between
- •Оператор like
- •Операторы is null и is not null.
- •Варианты заданий
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Контрольные вопросы
- •Приложения Приложение a. Операторы sql Oracle
- •Унарные и бинарные операторы
- •Старшинство операторов
- •Арифметические операторы
- •Оператор конкатенации
- •Операторы сравнения
- •Логические операторы
- •Теоретико-множественные операторы
- •Приложение b. Выражения
- •Простые выражения
Фраза 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. Такая ситуация вполне возможна в том случае, когда правым аргументом является подзапрос.