- •Вступ до баз даних. Загальна характеристика основних понять
- •1.1. Розвиток основних понять представлення даних
- •Лекція 6
- •Друга стадія концептуального проектування бд. (Моделі даних субд. Представлення концептуальної моделі засобами моделі даних субд)
- •6.1. Представлення концептуальній моделі засобами моделі даних субд
- •6.2 Типові моделі даних субд і представлення концептуальної моделі
- •6.2.1. Мережева модель даних
- •6.2.2. Ієрархічна модель даних
- •6.2.3. Реляційна модель даних
- •6.2.4. Багатовимірна модель даних
- •6.3. Засоби автоматизованого проектування концептуальної моделі
- •Лекція 6
- •Друга стадія концептуального проектування бд. (Моделі даних субд. Представлення концептуальної моделі засобами моделі даних субд)
- •6.1. Представлення концептуальній моделі засобами моделі даних субд
- •6.2 Типові моделі даних субд і представлення концептуальної моделі
- •6.2.1. Мережева модель даних
- •6.2.2. Ієрархічна модель даних
- •6.2.3. Реляційна модель даних
- •6.2.4. Багатовимірна модель даних
- •6.3. Засоби автоматизованого проектування концептуальної моделі
- •Лекція 7
- •Формалізація реляційної моделі
- •7.1. Формалізований опис відношень і схеми відношень
- •7.2. Маніпулювання даними в реляційній моделі
- •7.3. Операції реляційної алгебри
- •Лекція 8
- •Використання формального апарату для оптимізації схем відношень
- •8.1. Проблема вибору раціональних схем відношень
- •8.2. Функціональні залежності (залежності між атрибутами відношення)
- •8.3. Декомпозиція схеми відношення
- •8.4 .Вибір раціонального набору схем відношень шляхом нормалізації
- •8.5. Приклад нормалізації до 3нф
- •8.6. Цілісна частина реляційної моделі. Реалізація умови цілісності даних в сучасних субд
- •Лекція 9
- •Фізичні моделі даних (внутрішній рівень)
- •9.1. Структура пам'яті еом
- •9.2. Представлення екземпляра логічного запису
- •9.3. Організація обміну між оперативною і зовнішньою пам'яттю
- •9.4. Структури зберігання даних у зовнішній пам'яті еом
- •9.4.1. Послідовне розміщення фізичних записів
- •Пошук запису із заданим значенням ключа
- •9.4.2. Розміщення фізичних записів у вигляді спискової структури
- •Пошук запису із заданим значенням ключа
- •9.4.3. Використання індексів (індексування)
- •Пошук і читання запису із заданим значенням ключа
- •Модифікація (коректування) запису
- •Видалення запису
- •Додавання запису
- •9.4.5. Розміщення записів з використанням хешування
- •Пошук запису із заданим значенням ключа і читання
- •Модифікації запису
- •Видалення запису
- •Додавання запису
- •9.4.6. Комбіновані структури зберігання
- •Лекція 10
- •Структура сучасної субд на прикладі Microsoft sql Server 2008
- •10.1 Загальна структура субд
- •10.2. Архітектура бази даних. Логічний рівень
- •Тип даних hierarchyid
- •Просторові типи даних
- •Індекси
- •Представлення
- •Складки
- •Обмеження
- •Правила
- •Значення за замовчуванням
- •10.3. Архітектура бази даних. Фізичний рівень
- •Файли і файлові групи
- •Сторінки і екстенти
- •Сторінки файлів даних
- •Організація таблиць та індексів
- •Управління роботою з екстентами і вільним місцем
- •Відстежування вільного місця
- •Лекція 11
- •Програмне забезпечення роботи з сучасними базами даних
- •11.1. Основні завдання програмного забезпечення баз даних
- •11.2. Проблеми створення і ведення реляційних баз даних
- •11.3. Поняття мови sql і його основні частини
- •11.3.1. Історія виникнення і стандарти мови sql
- •11.3.2. Переваги мови sql
- •11.3.2. Загальна характеристика sql
- •Термінологія
- •Різновиди sql
- •Лекція 12
- •Основні оператори мови sql. Інтерактивний sql
- •12.1. Загальне уявлення про основні оператори мови sql
- •12.2 Інтерактивний режим роботи з sql (інтерактивна sql)
- •12.3. Використання мови sql для вибору інформації з таблиці
- •12.4. Використання sql для вибору інформації з декількох таблиць
- •12.5. Використання sql для вставки, редагування і видалення даних у таблицях
- •Лекція 13
- •Використання мови sql у прикладних програмах
- •13.1. Програмний (вбудований) sql
- •13.2. Статичний sql
- •13.3. Динамічний sql
- •13.4. Інтерфейси програмування додатків (api). Db‑Library, odbc, oci, jdbc
- •Протокол odbc
- •Протокол jdbc
- •Лекція 14
- •Напрями розвитку баз даних
- •Бібліотека db-Library
- •14.1. Об'єктно-орієнтований підхід до організації баз даних
- •Об'єктно-орієнтоване програмування
- •Об'єктно-орієнтовані бази даних
- •Об'єктно-реляційні субд
- •14.2. Розподілені бази даних
- •14.3. Сховища даних
- •Основи криптології
12.3. Використання мови sql для вибору інформації з таблиці
Вибірка даних здійснюється за допомогою оператора SELECT, який є найчастіше використовуваним оператором мови SQL. Синтаксис оператора SELECT має такий вигляд:
SELECT [ALL/DISTINCT] <список атрибутів>/*
FROM <список таблиць>
[WHERE <умова вибірки>]
[ORDER BY <список атрибутів>]
[GROUP BY <список атрибутів>]
[HAVING <умова>]
[UNION<вираз з оператором SELECT>]
У квадратних дужках вказуються елементи, які можуть в запиті бути відсутніми.
Ключове слово ALL означає, що результатом будуть всі рядки, що задовольняють умові запиту, в тому числі і однакові рядки. DISTINCT означає, що в результуючий набір не включаються однакові рядки. Далі йде список атрибутів вихідної таблиці, які будуть включені в таблицю-результат. Символ * означає, що в таблицю-результат включаються всі атрибути вихідної таблиці.
Обов'язковим ключовим словом є слово FROM, за ним слідують імена таблиць, до яких здійснюється запит.
У реченні з ключовим словом WHERE задаються умови вибірки рядків таблиці. У таблицю-результат включаються лише ті рядки, для яких умова, вказана в реченні WHERE, набуває значення істина.
Ключове слово ORDER BY задає операцію впорядкування рядків таблиці-результату за вказаним списком атрибутів.
У реченні з ключовим словом GROUP BY задається список атрибутів групування (роз'яснення цього і наступного ключового слова буде представлене трохи пізніше).
У реченні HAVING задаються умови, що накладаються на кожну групу.
Окремо відзначимо, що ключові слова FROM, WHERE, ORDER BY використовуються аналогічним чином і в інших операторах маніпулювання даними мови SQL.
Розглянемо реалізацію запитів для конкретного прикладу, представленого в лекції 8 (див. мал. 8.1)
Видати список всіх студентів.
SELECT *
FROM student
або
SELECT id_st, surname
FROM student
Відмітимо, що якщо додати до даного запиту речення ORDER BY surname, то список буде впорядкований по прізвищу. За замовчуванням мається на увазі, що сортування проводиться за зростанням. Якщо необхідне впорядкування за спаданням, після імені атрибуту додається слово DESC.
Видати список оцінок, які отримав студент з кодом "1".
SELECT id_st, mark
FROM mark_st
Where id_st = 1
Видати список код студентів, які отримали на іспитах хоч би одну двійку або трійку.
У реченні WHERE можна записувати вираз з використанням арифметичних операторів порівняння (<, >, і т. д.) і логічних операторів (AND, OR, NOT) як і у звичайних мовах програмування.
SELECT id_st, mark
FROM mark_st
WHERE ( MARK >= 2 ) AND ( MARK <= 3 )
Разом з операторами порівняння і логічними операторами для складання умов у мові SQL (із-за специфіки сфери застосування) існують ряд спеціальних операторів, які, як правило, не мають аналогів в інших мовах. Ось ці оператори:
IN – входження в деяку множину значень;
BETWEEN – входження в деякий діапазон значень;
LIKE – перевірка на збіг (спів падіння) із зразком;
IS NULL – перевірка на невизначене значення.
Оператор IN використовується для перевірки входження в деяку множину значень. Так, запит
SELECT id_st, mark
FROM mark_st
WHERE mark IN (2,3)
дає той же результат, що і вищезгаданий запит (виведе ідентифікатори всіх абітурієнтів, що отримали хоч би одну двійку або трійку на іспитах).
Того ж результату можна добитися, використовуючи оператора BETWEEN:
SELECT id_st, mark
FROM mark_st
WHERE mark BETWEEN 2 AND 3
Видати список всіх студентів, прізвища яких починаються з букви А.
У цьому випадку зручно використовувати оператора LIKE.
Оператор LIKE застосовується виключно до символьних полів і дозволяє встановлювати, чи відповідає значення поля зразку. Зразок може містити спеціальні символи:
_ (символ підкреслення) – заміщає будь-який одиночний символ;
% (знак відсотку) – заміщає послідовність будь-якої кількості символів.
SELECT id_st, surname
FROM student
WHERE surname LIKE 'А%'
Дуже часто виникає необхідність провести обчислення мінімальних, максимальних або середніх значень у стовпцях. Так, наприклад, може знадобитися обчислення середнього балу. Для здійснення подібних обчислень SQL надає спеціальні агрегатні функції:
MIN – мінімальне значення у стовпці;
MAX – максимальне значення у стовпці;
SUM – сума значень у стовпці;
AVG – середнє значення у стовпці;
COUNT – кількість значень у стовпці, відмінних від NULL.
Наступний запит підраховує середнє серед всіх балів, отриманих студентами на іспитах.
SELECT AVG(mark)
FROM mark_st
Природно, можна використовувати агрегатні функції спільно з реченням WHERE:
SELECT AVG(mark)
FROM mark_st
WHERE id_st = 100
Даний запит обчислить середній бал студента з кодом 100 за результатами всіх складених ним іспитів.
SELECT AVG(mark)
FROM mark_st
WHERE id_ex = 10
Даний запит вирахує середній бал студентів за результатами складання іспиту з кодом 10.І ще окрім розглянутих механізмів мова SQL надає потужний апарат для обчислення агрегатних функцій не для всієї таблиці результатів запиту, а для різних значень по групах. Для цього в SQL існує спеціальна конструкція GROUP BY, призначена для вказівки того стовпця, по значеннях якого проводитиметься групування. Так, наприклад, ми можемо обчислити середній бал по всіх іспитах для кожного студента. Для цього досить виконати наступний запит:
SELECT id_st, AVG(mark)
FROM mark_st
GROUP BY id_st
Все це, як завжди, може бути поєднано з реченням WHERE. При цьому, не вдаючись до тонкощів виконання запиту усередині СУБД, можна вважати, що спочатку виконується вибірка тих рядків таблиці, які задовольняють умовам з реченням WHERE, а потім проводиться групування і агрегація.
Наведемо запит, який обчислює середній бал по оцінках, отриманих на іспиті з кодом 100, для кожного студента.
SELECT id_st, AVG(mark)
FROM mark_st
WHERE id_ex = 100
GROUP BY id_st
Відмітимо, що групування може проводитися більше ніж по одному полю.
Для запитів, що містять секцію GROUP BY існує важливе обмеження: такі запити можуть включати як результат стовпці, по яких проводиться групування, і стовпці, які містять власне результати агрегації.
Для того, щоб форматувати виведення, існують різні можливості SQL. Так, наприклад, допустимим є включення тексту в запит. Розглянемо приклад того, як це робиться:
SELECT 'Середній балл=', AVG(mark)
FROM mark_st
WHERE id_ex = 10
У результаті цього запиту користувач побачить не просто деяке число, а число з супроводжуючим пояснюючим текстом.
