
Визначення умов виборки у функції where.
Синтаксис функції WHERE:
WHERE < ім’я стовпця> <оператор умови> < ім’я стовпця>| <константа>| <список значень>
Умови відбору, що задаються у функції WHERE, можуть бути як простими, так і складними. Для завдання складних умов можуть бути використані предикати OR та AND, які в свою чергу можна поєднувати в одному логічному виразі. Порядок виконання операторів наведений нижче (див. Таблиця 2). Зміна порядку виконання операцій здійснюється за допомогою дужок.
Таблиця 2
Порядок обчислення |
Оператор |
1 |
Всі оператори порівняння (див. Таблиця ) IN, LIKE, IS NULL, BETWEEN |
2 |
AND |
3 |
OR |
Таблиця 3
№ п/п |
Оператор |
Суть оператора |
|
= |
Рівне |
|
!= , ^= АБО <> |
Не рівне |
|
> |
Більше |
|
>= |
Більше або рівне |
|
< |
Менше |
|
<= |
Менше або рівне |
|
[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’ символ % відповідає будь-якому рядку символів(можливо порожній); символ '_' одному символу; [] один символ у вказаному діапазоні; [^] один символ поза указаного діапазону. |
Приклад 10
Задача.
Вивести список студентів з таблиці Student, що навчаються в групі ФБ-03.
Рішення.
SELECT StName ФИО
FROM Student St inner JOIN SGroup SG
ON St.IDGroup =SG.IDGroup
WHERE NameGroup= ‘ФБ-03’;
Як видно з попереднього приклада функція WHERE може бути використана для виконання з’єднання INNER JOIN.
Приклад 11
Задача.
Вивести ім’я викладача, у якого студенти мали оцінки більше 3.
Рішення.
SELECT TeacherName ФИО
FROM Teacher, Progress
WHERE Teacher.PIN=Progress.PIN
AND Mark>3 ;
Приклад 12
Задача.
Вивести ім’я викладачів з вказаного списку кафедр.
Рішення.
SELECT TeacherName ФИО
FROM Teacher
WHERE DeptName IN (‘ММЗІ, ‘ІБ’);
Тут будуть виводитися всі викладачі кафедр ММЗІ та ІБ.
Ще один предикат, що використовується в запитах достатньо часто, предикат BETWEEN працює з будь-якими типами даних, які можна порівняти. У визначення включені кінцеві точки.
Приклад 13
Задача.
Вивести імена викладачів, що оцінили, хоча б раз, роботу студента на 4 або 5.
Рішення.
SELECT TeacherName ФИО
FROM Teacher, Progress
WHERE Teacher.PIN=Progress.PIN
AND MARK BETWEEN 4 AND 5 ;
Приклад 14
Задача.
Вивести імена викладачів, що потрапляють у вказаний інтервал.
Рішення.
SELECT TeacherName
FROM Teacher
WHERE TeacherName BETWEEN ‘Калина’ AND ‘Петренко’ ;
Приклад 15
Задача.
Вивести імена всіх викладачів, які були прийняті на роботу в період з 1.12.2000 по 12.03.2001р.
Рішення.
SELECT TeacherName ФИО
FROM Teacher
WHERE DateHire BETWEEN ‘09.01.2000’ AND ’12.31.2001’;
Зверніть увагу, що в запиті атрибут DateHire має наступний формат ‘ММ.ЧЧ.РРРР’.
Предикат Like дозволяє перевірити відповідність того чи іншого рядка заданому шаблону. Вираз перед ключовим словом like повинен містити рядок. Після ключового слова Like повинен стояти літерал, який і являться шаблоном для перевірки відповідності.
Приклад 16
Задача.
Вивести імена студентів, що починаються на букву П.
Рішення.
SELECT StName
FRom Student
Where StName Like 'П%'
Якщо в шаблоні потрібно вказати знак % або знак підкреслення по своєму прямому призначенню слід помістити їх в квадратні дужки.
Приклад 17
Задача.
Вивести імена студентів, що містять букву ‘а’, в будь-якій позиції починаючи з другої.
Решение.
SELECT StName
FRom Student
Where StName Like '_%а%'
Приклад 18
Задача.
Вивести назви дисциплін, що містять «пробіл».
Рішення.
SELECT NameSubject
From Subject
Where NameSubject Like '%[ ]%'
Приклад 19
Задача.
Вивести список викладачів з таблиці Teacher, у прізвищах яких зустрічаються букви в діапазоні ‘щ-я’.
Рішення.
select TeacherName ФИО
from Teacher
where TeacerhName like '% [щ-я]%'
Велика група запитів включає в себе умов з запереченням. Існує множина способів задання заперечення (див. Таблиця ) .
Таблиця 4
№ |
Оператор |
Опис |
|
!=, <> |
Не рівне |
|
NOT <ім’я стовпця> = |
Значення стовпця не рівне |
|
NOT < ім’я стовпця > > |
Значення стовпця не більше ніж |
|
NOT < ім’я стовпця > < |
Значення стовпця не менше ніж |
|
NOT BETWEEN |
Не лежить в інтервалі |
|
NOT IN |
Не міститься у списку |
|
NOT LIKE |
Не містить підрядка |
|
IS NOT NULL |
Не містить невизначеності |
Приклад 20
Задача.
Вивести імена всіх викладачів, окрім викладачів, що працюють на кафедрах, що вказані у списку.
Рішення.
SELECT TeacherName ФИО
FROM Teacher
WHERE DeptName NOT IN (‘ИСТ’);
Приклад 21
Задача.
Вивести імена і номера залікової книжки студентів, у яких не внесені оцінки по тим чи іншим предметам.
Рішення.
SELECT DISTINCT Student.NRecordBook [№ зачётки], STname ФИО
FROM Student, Progress
WHERE Student.NRecordBook= Progress.NRecordBook
AND Mark IS NULL;
Приклад 22
Задача.
Вивести список імена і номера залікової книжки студентів, що мають хоч одну п’ятірку.
Рішення.
SELECT DISTINCT Student.NRecordBook [№ зачётки],StName ФИО
FROM Student, Progress
WHERE Student.NRecordBook = Progress.NRecordBook
AND Mark=5;