Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Определение условий выборки в предложении where.

Cинтаксис предложения WHERE:

WHERE < имя столбца> <оператор условия> < имя столбца>| <константа>| <список значений>

Условия отбора, задаваемые в предложении WHERE, могут быть как простыми, так и сложными. Для задания сложных условий могут быть использованы предикаты OR и AND, которые в свою очередь можно сочетать в одном логическом выражении. Порядок выполнения операторов приведен ниже (см. Таблица 13). Изменение порядка выполнения операций осуществляется с помощью скобок.

Таблица 13

Порядок вычисления

Оператор

1

Все операторы сравнения (см. ) IN, LIKE, IS NULL, BETWEEN

2

AND

3

OR

Таблица 14

п/п

Оператор

Смысл оператора

=

Равно

!= , ^= ИЛИ <>

Не равно

>

Больше

>=

Больше или равно

<

Меньше

<=

Меньше или равно

[NOT] BETWEEN x AND y

[Не] принадлежит диапазону значений [x;y]

IN (СПИСОК)

Равно любому элементу списка

Эквивалентно “=ANY”

NOT IN (СПИСОК)

Не равно ни одному элементу списка.

Эквивалентно “!=ALL”. Если хоть один из элементов списка NULL, то результатом будет FALSE.

ANY

SOME

Сравнение с каждым из значений списка или подзапроса. Должно следовать за =, !=, >, <, <=, >=. Принимает значение FALSE, если подзапрос не выбирает ни одной строки

ALL

Сравнение с каждым из значений списка или подзапроса. Должно следовать за =, !=, >, <, <=, >=. Принимает значение TRUE если подзапрос не выбирает ни одной строки.

IS [NOT] NULL

Проверка на NULL. Это единственные операторы, которые должны использоваться при проверке значений на NULL.

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 4 AND 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

Оператор

Описание

!=, <>

Не равно

NOT <имя столбца> =

значение столбца не равно

NOT <имя столбца> >

значение столбца не больше чем

NOT <имя столбца> <

значение столбца не меньше чем

NOT BETWEEN

Не лежит в интервале

NOT IN

Не содержится в списке

NOT LIKE

Не содержит подстроки

IS NOT NULL

Не содержит неопределенности

Пример 59

Задача.

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

Решение.

SELECT TeacherName ФИО

FROM Teacher

WHERE DeptName NOT IN (‘ИСТ’);

Результат реализации запроса:

Пример 60

Задача.

Вывести имена и номера зачеток студентов, у которых не внесены оценки по тем или иным предметам.

Для демонстрации примера вставим в таблицу Progress новую строку:

Insert into Progress (NRecordBook, PIN, IDSubject, IDReport, NTerm)

values(‘050004’, 2, 2, 1, ‘5’)

Решение.

SELECT DISTINCT Student.NRecordBook [ зачётки], STname ФИО

FROM Student, Progress

WHERE Student.NRecordBook= Progress.NRecordBook

AND Mark IS NULL;

Результат реализации запроса:

Пример 61

Задача.

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

Решение.

SELECT DISTINCT Student.NRecordBook [ зачётки],StName ФИО

FROM Student, Progress

WHERE Student.NRecordBook = Progress.NRecordBook

AND Mark=5;

Результат реализации запроса: