Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db / Лекции / 6 семестр / Языки запросов.docx
Скачиваний:
134
Добавлен:
23.03.2015
Размер:
280.32 Кб
Скачать
      1. Логические операторы

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

Примечание.В связи с возможным отсутствием данных (их значение при этом считается неопределенным) в SQL используется трехзначная логика (с логическими значениями TRUE, FALSE, UNKNOWN).

Стандартными логическими операторами являются AND, OR и NOT.

Если обобщить, оператор AND истинен только в том случае, когда истинны оба операнда, OR – когда истинен хотя бы один из операндов, a NOT дает противоположное операнду значение.

Использование операторов сравнения вместе с логическими операторами предоставляет возможность формулировать составные условия для отбора строк таблиц. В математике существуют и другие логические операторы, однако они не используются в SQL, так как все их можно выразить через AND, OR и NOT.

Запрос.Вывести фамилии преподавателей, которые являются профессорами и ставка которых превышает 1050.

SELECT Name AS "Проф. со ставкой > 1050"

FROM TEACHER

WHERE UPPER(Post) = 'ПРОФЕССОР' AND Salary > 1050;

Запрос.Вывести названия кафедр корпуса 3 с фондом финансирования в диапазоне 12 000-15 000.

SELECT Name

FROM DEPARTMENT

WHERE Building = '3' AND Fund >= 12000 AND Fund <= 15000;

Запрос.Вывести названия кафедр, фонд финансирования которых меньше 11 000 или больше 25 000.

SELECT Name, Fund

FROM DEPARTMENT

WHERE Fund < 11000 OR Fund > 25000;

Запрос.Вывести номера аудиторий, расположенных в корпусах 4 и 5.

SELECT Num, Building

FROM ROOM

WHERE Building = '4' OR Building = '5';

Запрос.Вывести названия всех факультетов, кроме факультета математики.

SELECTName

FROMFACULTY

WHERE NOT LOWER(Name) = 'информатика';

Запрос.Вывести названия, корпуса и фонды финансирования кафедр, расположенных в корпусах 3 или 6 и имеющих фонд финансирования меньше 11 000 или больше 25 000.

SELECT Name, Post, Salary, Rise

FROM TEACHER

WHERE LOWER(PoSt) = 'ассистент' AND

(Salary < 550 OR Rise > 160);

      1. Использование выражений над столбцами

До сих пор в выражениях фразы WHERE мы использовали в качестве значения одного или обоих аргументов имена столбцов. Однако аргументами могут быть и выражения над столбцами.

Запрос.Вывести фамилии преподавателей, чья зарплата (ставка плюс надбавка) превышает 1500.

SELECT

Name AS "Фамилия преподавателя",

Salary + Rise AS "Его зарплата"

FROM TEACHER

WHERE Salary + Rise > 1500;

Запрос.Вывести фамилии преподавателей, половина зарплаты которых

превышает троекратную надбавку.

SELECT Name

FROM TEACHER

WHERE (Salary + Rise) / 2 > 3 * Rise;

      1. Специальные операторы

В SQL имеются операторы сравнения, позволяющие проверять значения столбцов и выражений над ними на соответствие некоторым специальным условиям:

  • принадлежность множеству;

  • принадлежность диапазону;

  • соответствие шаблону;

  • соответствие регулярному выражению (на самостоятельное изучение);

  • неопределенное значение.

Далее мы узнаем, как их использовать и как с их помощью создавать составные условия.

      1. Проверка на принадлежность множеству

Оператор INпозволяет проверить, входит ли значение в указанное множество значений. В простейшем случае этот оператор имеет следующий синтаксис:

имя_столбца [NOT] IN (список_значений)

Здесь список значений представляет собой перечень разделенных запятыми констант, тип которых должен соответствовать типу столбца, чье имя приведено слева. Семантика этого предиката такова: он принимает значение TRUE, если значение столбца соответствует одной из констант списка. Приведем пример.

Запрос.Вывести типы занятий, проводимых на первой неделе в первые три дня.

SELECT DISTINCT Type AS "Тип занятия"

FROM LECTURE

WHERE WEEK = 1 AND LOWER(Day) IN ('пнд', 'втр', 'срд');

Отметим, что оператор INв варианте с константами в правой части имеет эквивалентное представление с использованием логической связкиOR.

Запрос.Вывести названия и номер корпуса кафедр, расположенных в любых корпусах, кроме 1, 3, 8 или 10.

SELECT Name AS "Название кафедры", Building AS "Корпус"

FROM Department

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

Примечание. Отметим, что, следуя общему принципу применения оператора NOT, можно использовать и такую конструкцию:

NOT (имя_столбца IN(список_значений))