- •Контрольні запитання
- •Контрольні запитання
- •Які головні переваги реляційної моделі?
- •Які види ключів існують і навіщо вони потрібні?
- •Функціональна залежність
- •Найбільш простий вигляд оператора select
- •2. Використання секції where
- •2.1. Порівняння значення стовпчика із константою
- •2.2. Правила виконання однотабличних запитів на вибірку
- •3. Багатотабличні запити
- •3.1. Правила виконання багатотабличних запитів на вибірку
- •4. Використання псевдонімів таблиць
- •Секція order by – визначення порядку сортування
- •Групування записів
- •Правила виконання sql–запиту на вибірку (з врахуванням секції group by)
- •Кілька стовпчиків групування
- •8.3. Обмеження на запити з групуванням
- •8.4. Значення null в стовпчиках групування
- •Правила виконання sql–запиту на вибірку (з врахуванням секції having)
- •9.2. Обмеження на умову відбору груп
- •Значення null і умови відбору груп
- •Секція having без секції group by
- •Складні умови відбору у запитах на вибірку даних Використання логічних виразів
- •Порівняння
- •Перевірка на належність діапазону значень (between…and…)
- •Перевірка на належність множині значень (in)
- •Перевірка на рівність значенню null (is null)
- •Символ пропуску
- •2.1. Режими аутентифікації
- •2.2. Компоненти структури безпеки
- •2.3. Ролі сервера
- •2.4. Ролі баз даних
- •2.5. Ролі програми
- •2.6. Захист даних
- •Шифрування даних
- •Обмеження доступу до файлів sql server
- •3.1. Права доступу
- •3.2. Права на доступ до об'єктів баз даних
- •3.3. Заборона доступу
Перевірка на рівність значенню null (is null)
Значення NULL дозволяють застосовувати трьохзначну логіку в умовах відбору. Для будь-якого заданого рядка результатом умови відбору може бути TRUE, FALSE або NULL (якщо в якомусь стовпчику цього рядка міститься значення NULL).
Інколи буває потрібно явно перевіряти значення стовпчика на рівність NULL і безпосередньо опрацювати такі значення.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NULL – означає невідоме або не визначене значення.
Не можна явно записувати у клітинку ′ NULL′ - це літерна величина.
Щоб клітинка отримала значення NULL при заповненні таблиці – треба її залишити порожньою.
В Delphi є метод Clear – очищає поле, робить відповідну клітинку таблиці – порожньою (<=> заносить в неї значення NULL)
Приклад
Table 1 |
||
Field A |
Field B |
…… |
|
|
|
|
|
|
потрібно очистити це поле
Table 1 Field B . Clear ;
ім’я об’єкта – поля
Але використання метода Clear об’єктів - полів - не відповідає технологіям принципам побудови клієнт-серверних програм – бо цей спосіб очистки поля розрахований на локальні набори даних.
В стандарті SQL є оператор UPDATE, за допомогою якого можна очистити поле – будемо розглядати пізніше.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Для безпосереднього опрацювання NULL – значень в SQL є перевірка IS NULL:
Вивести всі дані про відпуски товарів зі складу, для яких не вказаний покупець:
SELECT *
FROM Vidpusk
WHERE Pokupets IS NULL
Обернена форма перевірки на NULL (IS NOT NULL) дозволяє вибрати рядки, які не містять значення NULL:
Вивести всі дані про відпуски товарів зі складу, для яких вказаний покупець:
SELECT *
FROM Vidpusk
WHERE Pokupets IS NOT NULL
На відміну від всіх інших перевірок, перевірка на NULL не може повертати NULL в якості результату. Вона завжди повертає TRUE або FALSE.
Може здаватися дивним, що не можна перевірити значення на рівність NULL за допомогою порівняння, наприклад:
(неправильно!)
SELECT *
FROM Vidpusk
WHERE Pokupets = NULL
Ключове слово NULL тут не можна використовувати, бо насправді – це не справжнє значення, - це – просто сигнал, що значення – невідоме. Навіть якби порівняння
Pokupets = NULL
було можливим, правила опрацювання значень NULL в порівняннях привели би до того, щоб результат був би зовсім не такий, як очікується:
Коли СУБД виявить рядок, в якому поле Pokupets містить значення NULL, виконалася би наступна перевірка:
NULL = NULL
Що буде в результаті: TRUE чи FALSE?
Оскільки значення по обидві сторони від знаку = - невідомі, то згідно правил виконання порівнянь – повинні отримати NULL.
Оскільки умова відбору має значення, яке не співпадає із TRUE – то цей рядок вилучається із результуючої таблиці – результат – прямо протилежний тому, якого ми прагнули!
Тому, в силу правил логіки SQL та правил опрацювання значень NULL, в таких випадках необхідно виконувати перевірку IS NULL.
Перевірки літерних значень.
Перевірка, чи літерний рядок починається з певного значення (STARTING WITH)
Щоб перевірити, чи значення літерного стовпчика починалось з певної підстрічки. Для такої перевірки потрібно використовувати:
Отримати список товарів, які починаються із літери “С”.
SELECT *
FROM Tovary
WHERE Tovar STARTING WITH “С”
Перевірка, чи літерний рядок містить певне значення (CONTAINING)
Щоб перевірити, чи значення літерного стовпчика містить певний підрядок символів (не має значення, з якої саме позиції) – треба використовувати
Отримати список покупців, чия адреса містить підрядок “Стр”:
SELECT *
FROM Pokupci
WHERE Adresa CONTAINING “Стр”
Перевірка на відповідність шаблону (LIKE)
Це – більш загальний спосіб, який дозволяє замінити і
STARTING WITH
і
CONTAINING
Перевірка на відповідність шаблону дозволяє встановити, чи відповідає значення даних шаблону.
Шаблон – це літерний рядок, в який може входити один або більше підстановочних символів.
Ці символи трактуються особливим чином.
Підстановочні символи
-
Підстановочний символ % (процент) означає послідовність, що складається із нуля або більшої кількості будь-яких символів.
Вивести всю інформацію про товари, назви яких починаються із літери “М”, а закінчуються літерою “О”.
SELECT *
FROM Tovary
WHERE Nazva LIKE “М%О”
-
Nazva
......
Масло
......
Молоко
.......
2). Підстановочний символ _ (підкреслення) означає рівно один і лише один будь-який символ.
Вивести всю інформацію про товари, назви яких починаються із літери “М”, закінчуються літерою “О” і складаються рівно із 5-ти символів.
SELECT *
FROM Tovary
WHERE Nazva LIKE “М_ _ _ О”
-
Nazva
......
Масло
......
Підстановочні символи можна записувати в будь-якому місці шаблону; в одному шаблоні може використовуватися кілька підстановочних символів.
Наступний запит допускає назву компанії як “Smithson”, так і “Smithsen”, а також будь-яке закінчення назви компанії: “Co”, “Corp”, “Inc.” тощо:
SELECT Company
FROM Clienty
WHERE Company LIKE “Smтiths_n %”
За допомогою перевірки NOT LIKE можна вибирати рядки, які не задовольняють шаблону.
Перевірку LIKE (так само, як і STARTING WITH та CONTAINING) можна застосовувати лише до стовпчиків, які мають літерний тип даних. Якщо стовпчик містить значення NULL, то результатом перевірок LIKE, STARTING WITH, CONTAINING – буде NULL.
Щоб подібне є в операційній системах MS DOS, UNIX: в шаблоні можна вказувати групу імен файлів:
* ( % - аналог) - кількість символів
? ( _ - аналог) - 1 символ