WHERE < имя столбца> <оператор условия> < имя столбца>| <константа>| <список значений>
Условия отбора, задаваемые в предложении WHERE, могут быть как простыми, так и сложными. Для задания сложных условий могут быть использованы предикаты OR и AND, которые в свою очередь можно сочетать в одном логическом выражении. Порядок выполнения операторов приведен ниже (см. Таблица 13). Изменение порядка выполнения операций осуществляется с помощью скобок.
Таблица 13
Порядок вычисления
Оператор
Все операторы сравнения (см. Таблица 14) IN, LIKE, IS NULL, BETWEEN
AND
OR
Таблица 14
№ п/п
Оператор
Смысл оператора
1.
=
Равно
2.
!= , ^= ИЛИ <>
Не равно
3.
>
Больше
4.
>=
Больше или равно
5.
<
Меньше
6.
<=
Меньше или равно
7.
[NOT] BETWEEN x AND y
[Не] принадлежит диапазону значений [x;y]
8.
IN (СПИСОК)
Равно любому элементу списка
Эквивалентно “=ANY”
9.
NOT IN (СПИСОК)
Не равно ни одному элементу списка.
Эквивалентно “!=ALL”. Если хоть один из элементов списка NULL, то результатом будет FALSE.
10.
ANY
SOME
Сравнение с каждым из значений списка или подзапроса. Должно следовать за =, !=, >, <, <=, >=. Принимает значение FALSE, если подзапрос не выбирает ни одной строки
11.
ALL
Сравнение с каждым из значений списка или подзапроса. Должно следовать за =, !=, >, <, <=, >=. Принимает значение TRUE если подзапрос не выбирает ни одной строки.
12.
IS [NOT] NULL
Проверка на NULL. Это единственные операторы, которые должны использоваться при проверке значений на NULL.
13.
X [NOT] LIKE ‘y’
TRUE, если x [не]удовлетворяет шаблону ‘y’. В шаблоне ‘y’ символ % соответствует любой строке символов (возможно пустой);
символ '_' - одному символу;
[] - один символ в указанном диапазоне;
[^] - один символ вне указанного диапазона.
Пример 49
Задача.
Вывести список студентов из таблицы Student, обучающихся в группе ИСТ-03.
Решение.
SELECT StName ФИО
FROM Student St inner JOIN SGroup SG
ON St.IDGroup =SG.IDGroup
WHERE NameGroup= ‘ИСТ-03’;
Результат реализации запроса:
Как видно из предыдущего примера предложение WHERE может быть использовано для выполнения соединения INNER JOIN.
Пример 50
Задача.
Вывести имя преподавателя, у которого студенты имели оценки выше 3.
Решение.
SELECT TeacherName ФИО
FROM Teacher, Progress
WHERE Teacher.PIN=Progress.PIN
AND Mark>3 ;
Результат реализации запроса:
Пример 51
Задача.
Вывести имена преподавателей с указанных в списке кафедр.
Решение.
SELECT TeacherName ФИО
FROM Teacher
WHERE DeptName IN (‘ИСТ’, ‘АИС’);
Здесь будут выведены все преподаватели кафедры ИСТ и АИС.
Результат реализации запроса:
Еще один достаточно часто используемый в запросах предикат, предикат BETWEEN работает с любыми типами данных, которые можно сравнивать. В определение включены конечные точки.
Пример 52
Задача.
Вывести имена преподавателей, оценивших хоть один раз работу студента оценкой 4 или 5.
Решение.
SELECT TeacherName ФИО
FROM Teacher, Progress
WHERE Teacher.PIN=Progress.PIN
AND MARK BETWEEN 4AND 5 ;
Результат реализации запроса:
Пример 53
Задача.
Вывести имена преподавателей, попадающие в указанный интервал.
Решение.
SELECT TeacherName
FROM Teacher
WHERE TeacherName BETWEEN ‘Калинина’ AND ‘Николаева’ ;
Результат реализации запроса:
Пример 54
Задача.
Вывести имена всех преподавателей, которые были приняты на работу в период с 1.12.2000 по 12.03.2001г.
Решение.
SELECT TeacherName ФИО
FROM Teacher
WHERE DateHire BETWEEN ‘09.01.2000’ AND ’12.31.2001’;
Результат реализации запроса:
Обратите внимание, что в запросе атрибут DateHire имеет следующий формат ‘ММ.ЧЧ.ГГГГ’.
Предикат Like позволяет проверить соответствие той или иной строки заданному шаблону. Выражение перед ключевым словом like должно содержать строку. После ключевого слова Like должен стоять литерал, который и является шаблоном для проверки соответствия.
Пример 55
Задача.
Вывести имена студентов, начинающиеся на букву П.
Решение.
SELECT StName
FRom Student
Where StName Like 'П%'
Результат реализации запроса:
Если в шаблоне надо указать знак % или знак подчеркивания по своему прямому назначению следует поместить их в квадратные скобки.
Пример 56
Задача.
Вывести имена студентов, содержащие букву ‘а’, в любой позиции начиная со второй.
Решение.
SELECT StName
FRom Student
Where StName Like '_%а%'
Результат реализации запроса:
Пример 57
Задача.
Вывести названия дисциплин, содержащие «пробел».
Решение.
SELECT NameSubject
From Subject
Where NameSubject Like '%[ ]%'
Результат реализации запроса:
Пример 58
Задача.
Вывести список преподавателей из таблицы Teacher, в фамилиях которых встречаются буквы из диапазона ‘э-я’, т.е. ‘э’, ‘ю’ или ‘я’.
Решение.
select TeacherName ФИО
from Teacher
where TeacerhName like '% [э-я]%'
Результат реализации запроса:
Задание 15
Вывести список преподавателей из таблицы Teacher, в фамилиях которых встречается буква ‘Ф’ и следующий за ней символ ‘.’.
Задание 16
Вывести список преподавателей из таблицы Teacher, в фамилиях которых встречается буква ‘Ф’ и следующий за ней символ не «пробел».
Большая группа запросов включает в себя условия с отрицанием. Существует множество способов задания отрицания (см.Таблица 15) .
Таблица 15
№
Оператор
Описание
1.
!=, <>
Не равно
2.
NOT <имя столбца> =
значение столбца не равно
3.
NOT <имя столбца> >
значение столбца не больше чем
4.
NOT <имя столбца> <
значение столбца не меньше чем
5.
NOT BETWEEN
Не лежит в интервале
6.
NOT IN
Не содержится в списке
7.
NOT LIKE
Не содержит подстроки
8.
IS NOT NULL
Не содержит неопределенности
Пример 59
Задача.
Вывести имена всех преподавателей, кроме преподавателей которые работают на кафедрах, указанных в списке.
Решение.
SELECT TeacherName ФИО
FROM Teacher
WHERE DeptName NOT IN (‘ИСТ’);
Результат реализации запроса:
Пример 60
Задача.
Вывести имена и номера зачеток студентов, у которых не внесены оценки по тем или иным предметам.
Для демонстрации примера вставим в таблицу Progress новую строку:
Insert into Progress (NRecordBook, PIN, IDSubject, IDReport, NTerm)