- •Введение
- •Лабораторное занятие № 1
- •Описание учебного примера.
- •Удаление таблиц
- •Создание таблиц
- •Имена ограничений
- •Ограничения null и not null
- •Ограничение primary key
- •IdSubject, idReport, nTerm));
- •Ограничение unique
- •Ограничение Foreign key
- •Ограничение check
- •Вопросы для самоконтроля к лабораторной работе № 1
- •Лабораторная работа № 2
- •Команда вставки - insert
- •Команда обновления - update
- •Команда удаления - delete
- •Вопросы для самоконтроля к лабораторной работе № 2
- •Лабораторная работа №3
- •Команда alter table
- •Модификация ограничений
- •Добавление ограничений с ограниченной областью проверки
- •Отключение и подключение ограничений
- •Правила для изменения и модификации описания столбцов
- •Добавление столбца
- •Модификация столбца
- •Удаление столбца
- •Удаление таблицы
- •Переименование таблицы
- •Вопросы для самоконтроля к лабораторной работе № 3
- •Лабораторная работа № 4
- •Выборка данных из нескольких таблиц
- •Определение условий выборки в предложении where.
- •Групповые функции и предложение group by
- •Наиболее часто встречающиеся ошибки при выполнении group by
- •Предложение order by
- •Вопросы для самоконтроля к лабораторной работе № 4
- •Лабораторная работа № 5
- •Подзапросы
- •Inner join Student s
- •Inner join Student s
- •Inner join
- •Inner join Student s
- •Вопросы для самоконтроля к лабораторной работе № 5
- •Лабораторная работа №6
- •Представления
- •Вопросы для самоконтроля к лабораторной работе № 6
- •Лабораторная работа №7
- •Хранимые процедуры
- •Оператор use
- •Оператор declare
- •Операторы set и select
- •Функция @@identity
- •Функция @@error
- •Объявление параметров
- •Изменение хранимых процедур
- •Удаление хранимой процедуры
- •Лабораторная работа №8
- •If exists
- •Вопросы для самоконтроля к лабораторной работе № 8
- •Задания в тестовой форме
- •Литература Оглавление
Определение условий выборки в предложении 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;
Результат реализации запроса: