
- •Контрольні запитання
- •Контрольні запитання
- •Які головні переваги реляційної моделі?
- •Які види ключів існують і навіщо вони потрібні?
- •Функціональна залежність
- •Найбільш простий вигляд оператора 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. Заборона доступу
2.2. Правила виконання однотабличних запитів на вибірку
Далі буде описана процедура генерації результату SQL – запита на вибірку (потім вона буде доповнюватися). Ці результати отримуються після почергового застосування секцій, які входять в оператор SELECT.
Спочатку виконується секція FROM, потім секція
WHERE, потім секція
SELECT
Дії:
-
Взяти таблицю, вказану в секції FROM;
-
Якщо є секція WHERE – застосувати умову до кожного рядка (запиши лише ті рядки, для яких умова = TRUE. Якщо умова = FALSE або = NULL – рядок відкидається);
-
Для кожного рядка, що залишився – обчислити значення кожного елемента із списку полів секції SELECT – утворити рядок результуючої таблиці. При цьому: звертання до поля відповідає значенню стовпчика у даному біжучому рядку.
-
Якщо є ключове слово DISTINCT – вилучити всі рядки – дублікати (залишити лише унікальні рядки).
3. Багатотабличні запити
Нехай
-
Відпуск
№
Дата
Кількість
Товар
Покупець
1
2.09.
150
цукор
Журавель
2
3.09.
3
дріжджі
Герило
Вибрати всю інформацію про відпуск товарів (із таблиці “Відпуск”) і для кожного товару вказати його ціну із таблиці “Товари”.
потрібно виводити значення всіх стовпчиків із таблиці “Відпуск”. Якщо просто після SELECT вказати: * - то буде системі не відомо, з якої саме таблиці потрібно вибрати значення усіх стовпчиків – чи із таблиці “Відпуск”, чи із таблиці “Товари”. В таких випадках використовуються уточнені імена:
або, - щоб вибрати всі поля:
6). SELECT Vidpusk. , Tovary. Cina
FROM Vidpusk, Tovary
WHERE Vidpusk. Tovar = Tovary. Nazva
-
запит до двох таблиць.
Перед тим як продовжувати, розглянемо.
3.1. Правила виконання багатотабличних запитів на вибірку
Потрібно замінити дію 1. на таку:
-
Сформувати декартовий добуток таблиць, вказаних в секції FROM. Всі інші дії – ті самі. Якщо після FROM вказане лише одне ім’я таблиці – то декартовим добутком буде саме ця таблиця.
Розглянемо, як поетапно буде виконуватися запит
6). SELECT Vidpusk . , Tovary . Cina
FROM Vidpusk, Tovary
WHERE Vidpusk. Tovar . = Tovary. Nazva
де
-
Tovary
Nazva
Odynyci
Cina
цукор
кг.
2.60
молоко
л.
1.00
хліб
Бух.
1.30
дріжджі
кг.
3.60
ковбаса
кг.
17.50
а
-
Vidpusk
№
Data
Kilkist
Tovar
Pokupets
1
2.09.
150
цукор
Журавель
2
3.09.
3
дріжджі
Герило
дія 1 – декартовий добуток. Таблиця – результат: (8 стовпчиків, 10 рядків).
Tovary Vidpusk |
|||||||
T. Nazva |
T. Odynyci |
T. Cina |
V. № |
V. Data |
V. Kilkist |
V. Tovar |
V. Pokupets |
(цукор) |
кг. |
2.60 |
1 |
2.09 |
150 |
(цукор) |
Журавель |
молоко |
л. |
1.00 |
1 |
2.09 |
150 |
цукор |
Журавель |
хліб |
бух. |
1.30 |
1 |
2.09 |
150 |
цукор |
Журавель |
дріжджі |
кг. |
3.60 |
1 |
2.09 |
150 |
цукор |
Журавель |
ковбаса |
кг. |
17.50 |
1 |
2.09 |
150 |
цукор |
Журавель |
цукор |
кг. |
2.60 |
2 |
3.09 |
3 |
дріжджі |
Герило |
молоко |
л. |
1.00 |
2 |
3.09 |
3 |
дріжджі |
Герило |
хліб |
бух. |
1.30 |
2 |
3.09 |
3 |
дріжджі |
Герило |
(дріжджі) |
кг. |
3.60 |
2 |
3.09 |
3 |
(дріжджі) |
Герило |
ковбаса |
кг. |
17.50 |
2 |
3.09 |
3 |
дріжджі |
Герило |
дія 2 – відкидаються закреслені рядки.
Після виконання дії 2 – результуючий НД отримає вигляд:
Tovary Vidpusk |
|||||||
T. Nazva |
T. Odynyci |
T. Cina |
V. № |
V. Data |
V. Kilkist |
V. Tovar |
V. Pokupets |
цукор |
кг. |
2.60 |
1 |
2.09. |
150 |
цукор |
Журавель |
дріжджі |
кг. |
3.60 |
2 |
3.09. |
3 |
дріжджі |
Герило |
Дія 3 – відкидаються непотрібні стовпчики, а потрібні – впорядковуються у належному порядку. Після виконання дії 3:
6) |
|||||
Vidpusk, № |
Vidpusk, Data |
Vidpusk, Kilkist |
Vidpusk, Tovar |
Vidpusk, Pokupets |
Tovary, Cina |
1 |
2.09. |
150 |
цукор |
Журавель |
2.60 |
2 |
3.09. |
3 |
дріжджі |
Герило |
3.60 |
Для 4 – не виконується, бо в секції SELECT немає ключового слова DISTINCT.