В большинстве случаев мало кого интересует все содержимое таблиц. Чаще всего при запросе отбирается множество записей, удовлетворяющих тому или иному условию. Реализация оператора выбора осуществляется в SQL посредством применения предложения WHERE. Предложение WHERE позволяет задать критерии отбора строк из таблиц.
Cинтаксис предложения WHERE:
WHERE < имя столбца> <оператор условия> < имя столбца>| <константа>| <список значений>
Условия отбора, задаваемые в предложении WHERE, могут быть как простыми, так и сложными. Для задания сложных условий могут быть использованы предикаты OR и AND, которые в свою очередь можно сочетать в одном логическом выражении. Порядок выполнения операторов приведен ниже (см. Таблица 14). Изменение порядка выполнения операций осуществляется с помощью скобок.
Таблица 14
Порядок вычисления | Оператор |
Все операторы сравнения и предикаты IN, LIKE, IS NULL, BETWEEN (см.Таблица 15) | |
AND | |
OR |
Таблица 15
№ п/п | Оператор | Смысл оператора |
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’ символ % соответствует любой строке символов (возможно пустой); символ '_' - одному символу; [] - один символ в указанном диапазоне; [^] - один символ вне указанного диапазона. |
Таблица 16
|
|
№ | Оператор | Описание |
1. | !=, <> | Не равно |
2. | NOT <имя столбца> = | значение столбца не равно |
3. | NOT <имя столбца> > | значение столбца не больше чем |
4. | NOT <имя столбца> < | значение столбца не меньше чем |
5. | NOT BETWEEN | Не лежит в интервале |
6. | NOT IN | Не содержится в списке |
7. | NOT LIKE | Не содержит подстроки |
8. | IS NOT NULL | Не содержит неопределенности |
Пример 47
Задача.
Сформировать запрос для вывода списка студентов из таблицы Student, обучающихся в группе ИСТ-03.
Решение.
|
|
SELECT SName ФИО
FROM Student St INNER JOIN SGroup SG
ON St.IDGroup =SG.IDGroup
WHERE NameGroup='ИСТ-02';
Результат реализации запроса:
Пример 48
Задача.
Сформировать запрос для вывода имени преподавателя, у которого студенты в 5 семестре имели оценки выше 4
Решение.
SELECT TName ФИО
FROM Teacher, Progress
WHERE Teacher.PIN=Progress.PIN
AND Mark>4 AND NTerm=5;
Результат реализации запроса:
В результате запроса имя одного и того же преподавателя было выведено дважды. Очевидно, что преподаватель дважды в 5 семестре оценивал работу студентов оценкой выше, чем 4. Здесь целесообразно вспомнить о предложении DISTINCT, которое позволит убрать в результате запроса дубли. Теперь запрос будет выглядеть следующим образом
SELECT DISTINCT TName ФИО
FROM Teacher, Progress
WHERE Teacher.PIN=Progress.PIN
AND Mark>4 AND NTerm=5;
Результат реализации запроса:
В предложении WHERE используются различные предикаты (см.Таблица 15), рассмотрим применение некоторых из них.