Лабораторна робота № 4
Тема: Побудова запитів для вибирання записів з однієї таблиці, що відповідають заданому критерію
Мета: Навчитися конструювати запити на мові SQL для вибирання даних за певними критеріями. Вміти конструювати складні умови вибору записів
1 Короткі теоретичні відомості
Запити на вибірку. Особливість реляційних СУБД полягає у тому, що результатом дії мовного оператора є таблиця, яка містить множину даних. Мова SQL дозволяє відобразити тільки ті записи таблиці, що задовольняють певну умову. Щоб виконати фільтрацію записів слід задати критерій вибору.
Основна конструкція у мові SQL, призначена для вибирання даних, складається з фраз SELECT і FROM. Фраза FROM вказує, з якої таблиці потрібно вибрати дані, а фраза SELECT - які саме атрибути (стовпці) з цієї таблиці мають бути вибрані. Запит має вигляд:
SELECT Назва поля або полів
FROM Назва таблиці;
Його результатом є виведення значень поля (полів) з вказаної таблиці. Ці дві фрази обов'язково мають бути в будь-якому запиті на вибірку. Запити на вибірку даних не змінюють даних в базі, а лише вибирають їх з таблиць. Результатом виконання будь-якого вибіркового запиту є віртуальна таблиця, що існує нетривалий час.
Побудова запитів на умовне вибирання записів. Для вибирання потрібних записів необхідно задати умови їх вибору. Для цього використовується фраза WHERE. У ній зазначено, якій умові мають відповідати дані, що підлягають вибору. Алгоритм обробки запиту з фразою WHERE має вигляд:
вибрати рядки із таблиці;
перевірити їх відповідність вказаній умові;
якщо рядок відповідає умові, то вивести значення стовпців, вказаних у фразі SELECT.
Запиті на умовне вибирання записів має формат:
SELECT список полів, значення яких треба отримати
FROM список таблиць, з яких вибираються дані
WHERE умова, яку мають задовольняти записи, що вибираються;
Даний запит виводить список прізвищ усіх професорів вузу:
SELECT Прізвище
FROM ВИКЛАДАЧ
WHERE Посада = "професор"
Умова вибирання записів. У мові SQL існує багато різновидів виразів, у яких використовуються дані різних типів — рядки, числа, логічні значення. Умова — це вираз, що повертає логічне значення – 1 (TRUE) або 0 (FALSE). Умовні вирази обов'язково використовуються у фразі WHERE, а також можуть застосовуватися в інших фразах, наприклад SELECT. Прикладом умовного виразу є конструкція Посада = <професор> в попередньому заптсі.
Оператори — це конструкції, що використовуються у виразах для означення певних дій над даними. Є кілька типів операторів:
Оператори порівняння арифметичних виразів (табл. 1);
Оператори порівняння рядків;
Логічні оператори (табл. 2).
Операції порівняння в MySQL виконуються за правилами:
Якщо один або обидва аргументи - NULL, то і результат порівняння буде NULL, для всіх операторів, крім <=>.
Якщо 2 аргументи є рядками, то вони порівнюються як рядки.
Якщо обидва аргументи - цілі числа, то вони порівнюються як цілі числа.
Шістнадцяткові величини, якщо вони не порівнюються з числом, трактуються як рядки з двійковими даними.
Якщо один із аргументів є стовпець типу TIMESTAMP або DATETIME, а другий аргумент - константа, то константа перед виконанням порівняння перетворюється до типу TIMESTAMP.
В всіх інших випадках аргументи порівнюються як дійсні числа.
По замовчуванню порівняння рядків проводиться без врахування регістра символів з використанням поточного набору символів. В табл. 1 наведено оператори порівняння.
Таблиця 1Оператори порівняння
Знак |
Назва |
Приклади |
||||
=
|
Рівно: SELECT 1 = 0; -> 0 SELECT '0' = 0; -> 1 |
mysql> SELECT '0.0' = 0; -> 1 mysql> SELECT '0.01' = 0; -> 0 mysql> SELECT '.01' = 0.01; -> 1 |
||||
<> !=
|
Не рівно:
|
mysql> SELECT '.01' <> '0.01'; -> 1 mysql> SELECT .01 <> '0.01'; -> 0 mysql> SELECT 'zapp' <> 'zappp'; -> 1 |
||||
<= |
Менше або рівно: |
mysql> SELECT 0.1 <= 2; -> 1 |
||||
< |
Менше ніж: |
mysql> SELECT 2 < 2; -> 0 |
||||
>= |
Більше або рівно |
mysql> SELECT 2 >= 2; -> 1 |
||||
> |
Більше ніж |
mysql> SELECT 2 > 2; -> 0 |
||||
<=>
|
NULL- порівняння (рівно): |
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1 1 0 |
||||
SIGN() |
Повертає -1, 0 або 1 (знак аргументу). |
|||||
| & |
Бітові функції (використовується 48 біт). |
|||||
BETWEEN(A,B,C) |
(A >= B) AND (A <= C).А між В і С, то істина |
|||||
Х BETWEEN min AND max |
(min <= Х <= max), то оператор повер- тає 1, інакше 0. Аргументи однотипні |
SELECT 1 BETWEEN 2 AND 3; -> 0 SELECT 'b' BETWEEN 'a' AND 'c'; -> 1 SELECT 2 BETWEEN 2 AND '3'; -> 1 SELECT 2 BETWEEN 2 AND 'x-3'; -> 0 Якщо Х незалежний від регістра, то прово- диться порівняння без врахування регістра. |
||||
Х NOT BETWEEN min AND max |
То що і для функції NOT (Х BETWEEN min AND max). |
SELECT 1 NOT BETWEEN 2 AND 3;->1
|
||||
IS NULL |
Чи є величина рівною NULL |
SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL; -> 0 0 1 |
||||
IS NOT NULL |
Чи є величина не рівною NULL |
SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL; -> 1 1 0 |
||||
IFNULL(A,B) |
Якщо A не null, то A, інакше B. |
|
||||
ISNULL(A) |
Поверне 1, якщо A == NULL, інакше поверне 0. |
|||||
IF(A,B,C) |
Якщо A істина (!= 0 and != NULL), то поверне B, інакше C. |
|||||
Х IN (value,...)
|
Повертає 1, якщо вираз Х рівний величині із списку IN, інакше - 0. Якщо величини - константи, то вони оцінюються з типом виразу Х і сортуються. Якщо Х є залежним від регістра рядком, то порівняння з враху- ванням регістра: |
mysql> SELECT 2 IN (0,3,5,'wefwf'); -> 0 mysql> SELECT 'wefwf' IN (0,3,5,'wefwf'); -> 1
|
||||
Логічні оператори Всі логічні оператори дають в результаті значення 1 (TRUE), 0 (FALSE) або NULL (невизначене, яке в більшості є як FALSE)
Знак |
Назва |
Приклади |
|
NOT !
|
Логічне НЕ. Повертає 1, якщо операнд = 0, в інакше - 0. NOT NULL визначається як NULL: |
mysql> SELECT NOT 1; -> 0 SELECT NOT NULL; -> NULL mysql> SELECT ! (1+1); -> 0 mysql> SELECT ! 1+1; -> 1 |
|
OR ||
|
Логічне АБО. Повертає 1, якщо хоча б один із операндів не рівний ні 0, ні NULL: |
mysql> SELECT 1 || 0; -> 1 mysql> SELECT 0 || 0; -> 0 mysql> SELECT 1 || NULL; -> 1 |
|
AND &&
|
Логічне І. Для операндів, які не рівні NULL і не нульові, дає 1, і 0 - в противному випадку. |
mysql> SELECT 1 && 1; -> 1 mysql> SELECT 1 && 0; -> 0 SELECT 1 && NULL; -> NULL |
|
Складні умови вибирання рядків. З таблиці можна вибрати тільки потрібні рядки. В умовах можуть вказуватися будь-який з стовпців або сукупність стовпців. Умови можна і комбінувати. Для цього використовуються логічні оператори AND і OR. Оператори AND і OR можна використати разом. За допомогою дужок можна вказати порядок групування умов. Приклад запиту з використанням складних умов:
SELECT * FROM name_table
WHERE (col1= "aaa" AND col2 = "bbb") OR (col3 = "ccc" AND col4 = "ddd");
