- •Луцький національний технічний університет
- •Організація баз даних
- •Зміст Вступ
- •1 Теоретичні відомості
- •1.1 Установка mysql під Win9x/nt/2000
- •1.2 Знайомство з mysql-front
- •1.3 Загальна характеристика мови sql
- •1.4 Операції над схемою бази даних
- •2 Завдання на контрольну роботу
- •2.1 Групові завдання
- •2.2 Індивідуальні завдання
- •3 Приклад виконання завдання Постановка задачі.
- •Побудова концептуальної моделі бази даних
- •Створення та заповнення бази даних
- •Sql-запити
- •Віртуальні таблиці
- •Трансакції
- •Перелік рекомендованих джерел
1.2 Знайомство з mysql-front
MySQL-Front є типовою windows-програмою. Запустити її можна з Головного меню . При першому запуску програми потрібно створити профіль (сесію) для під’єднання до сервера (рис.2.1).
Рис.2.1. Створення профілю для під’єднання до сервера
На закладці „Главное/General” ввести назву профілю (будь-яка стрічка, наприклад, Ваше прізвище або ініціали), на закладці „Подключение/Connection” – параметри MySql-сервера, до якого ми хочемо під’єднатись, а саме ім’я або ІР-адресу комп’ютера (поле Server), на якому розміщений MySql-сервер. Наприклад, у нашому випадку, коли використовується локальна машина і віртуальний диск з сервером, ІР-адрес - 127.0.0.1.
На закладці „Пользователь/Login” ввести ім’я користувача і пароль (такі ж, як при встановленні сервера). Також можна встановити опцію „Save Password”, щоб програма при наступних під’єднаннях не перепитувала пароль.
Після введення імені користувача та пароля натискаємо на кнопку „ОК”. З’явиться вікно вибору профілю, вибираємо щойно створений профіль і натискаємо кнопку „ОК”.
Якщо всі параметри задано правильно, то програма повинна успішно з’єднатися з сервером і показати вікно, розділене на дві частини, зі списком баз даних сервера (рис.2.2).
Рис. 2.2. Вигляд головного вікна MySQL-Front
Зверніть увагу: бази даних ті ж, що й у попередній роботі, де ми працювали з PHPMyAdmin, адже під’єднання відбувалося до одного й того ж сервера.
MySQL-Front підтримує багатомовний інтерфейс, у тому числі й українськомовний. Мову інтерфейсу можна змінити в головному меню програми: .
Список баз даних представлений у вигляді дерева (рис.2.3). При розкритті вітки зі значком бази, з’явиться список таблиць. що містяться у цій базі даних.
Рис. 2.3. Список баз даних в MySQL-Front
Щоб редагувати структуру таблиці, слід вибрати таблицю, клацнувши по ній мишкою, тоді в правій частині вікна буде відображено список полів та індексів таблиці.
Права частина вікна може мати три режими роботи:
Перегляд структури (також є можливість редагування).
Перегляд записів таблиці (також є можливість редагування).
Виконання SQL-запитів.
Режими роботи перемикаються кнопками над вікном (рис.2.4). У режимі перегляду даних записи можна редагувати, зробивши подвійний клік на клітинці. При перегляді структури поля також можна редагувати, два рази клацнувши на них або в контекстному меню вибрати „Властивості”.
Рис.2.4. Основні елементи вікна програми MySQL-Front
Щоб створити нову таблицю, зручно використовувати контекстне меню бази даних, до якої ви хочете додати таблицю. В меню слід вибрати . При створенні таблиці необхідно задати ім’я (рис.2.5).
Рис. 2.5. Створення нової таблиці
Поля нової таблиці можна вказати на закладці Fields (рис.2.6).
Рис. 2.6. Поля нової таблиці БД
1.3 Загальна характеристика мови sql
Мова SQL використовується в багатьох відомих СУБД і серверах баз даних, таких як Oracle, SQL Server, SQLBase, Ingres, Sysbase, OS/2 Extended Edition, Informix, dBase IV, FoxPro і т. ін. Цю мову було розроблено фірмою IBM, щоб надати користувачам розвинені засоби формулювання запитів і відображення результатів їх виконання. Хоча мова й стандартизована, але багато розробників програмних продуктів розширюють її власними елементами.
Назва «SQL» є абревіатурою від Structured Query Language (структурована мова запитів). Раніше використовувалася й інша назва — SEQUEL (як вимова «S.Q.L»).
Це непроцедурна мова, що реалізує основні функції реляційних СУБД:
визначення даних (SQL дозволяє визначати структуру таблиць бази даних і відношення між ними);
доступ до даних (SQL забезпечує доступ до даних, що зберігаються, з відображенням отриманих даних і передаванням їх на подальшу обробку);
маніпулювання даними (SQL дозволяє користувачеві або прикладній програмі змінювати вміст бази даних);
управління доступом (SQL забезпечує синхронізацію обробки даних бази);
розподіл даних (SQL координує роботу конкуруючих користувачів і забезпечує тим самим їхню одночасну роботу з базами даних);
забезпечення цілосності даних (за допомогою SQL можна визначити обмеження на модифікацію даних, додержання яких дасть змогу запобігти порушенню цілосності даних).
Команди SQL, які застосовуються для виконання зазначених функцій, поділяють на такі групи:
команди визначення даних (Data Definition Commands);
команди маніпулювання даними (Data Manipulation Commands);
команди вибору даних — утворення вибірки (Data Query Commands);
команди управління транзакціями (Transaction Control Commands);
команди управління даними (Data Control Commands).
Команди визначення даних дозволяють визначати структуру даних і організацію використовуваних реляційних відношень. До цих команд належать:
Команда |
Призначення |
ALTER TABLE |
Змінює структуру таблиці |
CREATE TABLE |
Створює індекс |
CREATE INDEX |
Створює таблицю |
CREATE VIEW |
Створює уявлення (в’ювер) |
DROP |
Вилучає таблицю, індекс, уявлення |
Команди маніпулювання даними дають змогу користувачеві або програмі змінювати вміст бази даних вставлянням нових записів, вилученням записів та модифікацією вмісту полів. Це такі команди:
Команда |
Призначення |
DELET |
Вилучає записи з таблиці |
INSERT |
Додає записи до таблиці |
UPDATE |
Змінює дані таблиці |
Вибір різноманітної інформації з бази даних (утворення вибірки) досягається застосуванням лише однієї команди SELECT.
До команд управління транзакціями, які дозволяють запобігти порушенню цілосності бази даних, належать команди:
Команда |
Призначення |
COMMIT |
Робить зміни, виконані з початку транзакції, постійними |
ROLLBACK |
Відкочує всі проведені зміни до точки зберігання або до початку транзакції |
SAVEPOINT |
Установлює контрольну точку, до якої згодом можна буде виконати відкочування |
Основна функція команд управління даними — надання користувачам відповідного права доступу до даних. Це такі команди:
Команда |
Призначення |
GRANT |
Надає привілеї користувачам для роботи з даними |
REVOKE |
Знімає раніше надані привілеї |
Головною функцією, що використовується при роботі з базами даних, є швидкий пошук потрібних даних і отримання відповідей на різноманітні запити. Результатом виконання запиту завжди є таблиця заданої структури з потрібною інформацією. В окремих випадках вихідна таблиця запиту може складатися з одного стовпця (колонки) і одного рядка, тобто являти собою одне значення.
Команда SELECT
Для формування запитів і вибору потрібної інформації у SQL використовується команда SELECT. Ця команда описує дані, що мають бути відібрані, але не описує конкретних методів, за допомогою яких це слід зробити.
У найпростішій формі команда SELECT інструктує базу даних про те, як витягти інформацію з таблиці. Наприклад, для виведення таблиці телефонів Phone слід вказати:
SELECT Abonent, Street, House, Flat, Phone
FROM Phone
Результат виконання цієї команди буде приблизно таким:
Abonent |
Street |
House |
Flat |
Phone |
ЛНТУ |
Львівська |
75 |
000 |
746101 |
Гуртожиток ЛНТУ |
Даньшина |
8 |
000 |
60915 |
Іванов А.Г. |
Кравчука |
10 |
015 |
61115 |
... |
... |
... |
... |
... |
Тобто, ця команда виведе всі дані з таблиці.
Розглянемо кожну частину цієї команди докладніше:
SELECT |
Ключове слово, яке повідомляє базі даних, що ця команда –запит. Усі запити починаються цим словом, після нього ставиться пробіл. |
Abonent, Street, House, Flat, Phone |
Список стовпців з таблиці, які вибирають шляхом виконання запиту. Будь-які стовпці, які не перераховані тут, не будуть включені в результат команди. Слід відмітити, що цей запит лише показує дані, і якщо якісь дані не відображені, то це не означає, що їх немає в самій таблиці. |
FROM Phone |
Ключове слово, яке слід використовувати в кожному запиті. Воно супроводжується пробілом і потім вказується ім’я таблиці, що є джерелом даних. В нашому випадку – таблиця телефонів (Phone). |
; |
Крапка з комою використовується у всіх інтерактивних командах SQL, як символ закінчення команди. У деяких системах похила риска вліво (\) у рядку є індикатором кінця команди. |
Використання розриву рядка (клавіша ENTER) є довільним. З тих пір, як SQL використовує крапку з комою, щоб вказувати на кінець команди, більшість програм SQL опрацьовують розрив рядка (клавіша ENTER) як пробіл. Тому користувач вибирає самостійно як йому зручніше скласти запит, у кілька рядків чи в один. Проте, краще використовувати розриви рядків, пробіли й табуляцію для вирівнювання, щоб зробити команди легшими для читання.
Якщо потрібно вивести вміст всієї таблиці, то можна використовувати наступну команду:
SELECT * FROM Phone
Це призведе до того ж результату, що й попередня команда.
Повний вигляд цієї команди:
SELECT [DISTINCT | ALL]
<список елементів таблиці запиту | *>
FROM <список вхідних таблиць>
[WHERE <умова вибору>]
[GROUP BY <список імен стовпців таблиці запиту>]
[HAVING <умова включення груп до таблиці запиту>]
[ORDER BY <умова впорядкування записів таблиці запиту>]
Результуюча таблиця запиту може мати рядки, які повторюються. Параметр DISTINCT виключає появу однакових рядків. За замовчуванням виконується режим ALL, тобто всі рядки, отримані при виконанні запиту, будуть включені до вихідної таблиці.
Список елементів таблиці запиту визначає, які колонки повинна мати вихідна таблиця запиту. Символ * означає, що вихідна таблиця повинна включати в себе всі колонки (поля) усіх таблиць бази, на основі яких будується запит. Якщо кілька таблиць бази мають однойменні колонки, то для ідентифікації потрібної колонки необхідно вказати її повне ім’я, яке складається з імені таблиці (чи її псевдоніму) та імені колонки, відокремлених одне від одного символом «крапка». Полем вихідної таблиці запиту може бути:
поле будь-якої таблиці бази, вказане у фразі FROM;
константа. Вказане значення константи з’явиться у кожному рядку вихідної таблиці запиту;
вираз, який крім полів бази може включати константи і стандартні функції. Якщо робота виконується в режимі клієнт/сервер, вибір реалізується із сервера баз даних і результат запиту зберігається в тимчасовому буфері сервера баз даних. Тому в цьому режимі не можна використовувати функції користувачів та змінні, що застосовуються у програмі.
Імені колонки вихідної таблиці запиту може бути надане інше ім’я.
Фраза FROM визначає список таблиць бази даних, на основі яких будується запит. Імена таблиць мають відокремлюватися одне від одного комою. Для кожної таблиці можна вказати ім’я її локального псевдоніму, який у цьому запиті можна використовувати замість імені відповідної таблиці.
Фраза WHERE дозволяє вказувати умови, що їх мають задовольняти значення полів у рядках вихідної таблиці запиту, виконуючи таким чином роль фільтра для добору даних із таблиць бази.
Конструкція GROUP BY
Фраза GROUP BY призначена для групування рядків. Тобто рядки, які належать одній групі, у вихідній таблиці запиту будуть подані одним рядком. У цьому разі використання стандартних функцій для формування поля вихідної таблиці дозволяє визначити параметри груп (такі як кількість рядків у групі, сумарне або середнє значення за вказаним полем у групі, мінімальне або максимальне значення поля у групі). Імена стовпців (поля) вихідної таблиці запиту, що вказуються в цій фразі, записуються через кому. Рядки з однаковими значеннями в цих полях належать до однієї групи. Стандарт мови дозволяє задавати поля групування не лише за іменами, а й числовим виразом, який вказує на положення (порядковий номер) відповідного стовпця у вихідній таблиці запиту.
Конструкція GROUP BY дозволяє визначати підмножину значень і застосовувати агрегатну функцію до цієї підмножини. Це дає можливість поєднувати поля й агрегатні функції в єдиній конструкції SELECT.
Наприклад, потрібно визначити з таблиці film_list скільки фільмів вийшло кожного року. Для цього можна, звичайно, виконати окремий запит для кожного року, вибравши COUNT (Name) з таблиці. Проте GROUP BY дозволяє помістити все в один запит:
SELECT Year, COUNT(Name)
FROM film_list
GROUP BY Year
Результат виконання даного запиту матиме вигляд:
Year |
COUNT(Name) |
0 |
5 |
1996 |
2 |
... |
... |
Можна використовувати конструкцію GROUP BY одразу з кількома полями. Припустимо, потрібно дізнатися для кожної країни, скільки фільмів вона випускала щороку.
SELECT Country, Year, COUNT(Name) FROM film_list
GROUP BY Country, Year
Звичайно порожні групи (роки, коли певна країна не випустила жодного фільму) не будуть показані в результаті.
Конструкція HAVING
Припустимо, з таблиці фільмів потрібно вибрати тільки ті роки, в які було випущено більше 50-ти фільмів. Не можна використати WHERE, наприклад, так:
SELECT Year, COUNT(Name) FROM film_list
WHERE C0UNT(Name)>50
GROUP BY Year
Це буде суперечити строгій інтерпретації ANSI. Щоб побачити список усіх років, кількість фільмів в яких перевищує 50, слід використати конструкцію HAVING. Конструкція HAVING визначає критерії, що використовуються для видалення певних груп з виведення, так само, як конструкція WHERE робить це для окремих рядків. Правильний розв'язок:
SELECT Year, COUNT(Name) FROM film_list
GROUP BY Year
HAVING C0UNT(Name)>50
Результат виконання запиту:
Year |
COUNT(Name) |
1997 |
57 |
1999 |
62 |
... |
... |
Фраза HAVING дозволяє дібрати з множини груп лише ті, які відповідають вказаним умовам. HAVING застосовується для фільтрації груп, як WHERE застосовується для фільтрації запитів, і звичайно використовується разом з GROUP BY.
Форматування
Таблиці — це невпорядковані набори даних, і дані, які містяться в них, не обов'язково з'являються в якійсь певній послідовності. SQL використовує команду ORDER BY, щоб впорядковувати результат виконання запиту. Ця команда впорядковує виведення запиту відповідно до значень у тій або іншій кількості обраних стовпців. Кілька стовпців впорядковуються один усередині іншого. Можна визначати зростаючий (ASC) або спадний (DESC) порядок для кожного стовпця. За замовчуванням встановлено — зростаючий.
Наприклад, такий запит впорядковує таблицю фільмів за полем країна. За умови, що назви країн співпадають, рядки розміщуються у спадному порядку за роком випуску:
SELECT * FROM film_list
ORDER BY Country ASC, Year Desc
Замість імені поля може застосовуватися числовий вираз, що вказує положення (порядковий номер) відповідного стовпця у вихідній таблиці запиту. Для кожного з них можна вибрати впорядкування за зростанням або спаданням.
Оператор LIKE
LIKE застосовують тільки до текстових полів, наприклад, CHAR чи VARCHAR, з якими він використовується, щоб знаходити підстрічки. Тобто він шукає у текстовому полі, чи співпадає з умовою його вміст. Як умову оператор використовує групові символи (wildkards) — спеціальні символи, які можуть відповідати чому-небудь. Є два типи групових символів, що використовуються з LIKE:
символ підкреслення (_) замінює будь-який один символ. Наприклад, 'b_t' буде відповідати словам 'bat' або 'bit', але не буде відповідати 'brat'.
знак відсотка (%) замінює послідовність будь-якого числа символів (включаючи символи нуля). Наприклад, '%p%t' буде відповідати словам 'put', 'posit', 'opt', але не 'spite'.
Наприклад, нам потрібно вивести всіх абонентів, прізвище яких починається на "Гавр":
SELECT * from Phone where Abonent Like 'Гавр%'
Агрегатні функції
Запити можуть видавати узагальнене групове значення полів і значення одного поля. Це робиться за допомогою агрегатних функцій. Агрегатні функції видають одне значення для всієї групи таблиці. Список цих функцій:
Функція |
Обчислює для кожної групи запитів |
Count |
Кількість рядків |
Sum |
Суму значень заданого параметра |
Avg |
Середнє значення заданого параметра |
Max |
Найбільше значення заданого параметра |
Min |
Найменше значення заданого параметра |
Всі агрегатні функції ігнорують порожні (NULL) значення полів. Виняток становить лише функція COUNT. При вказуванні як аргументу символа "*" (зірочка) вона видасть кількість рядків незалежно від того, які значення в них містяться.
Наприклад, потрібно визначити кількість фільмів в таблиці film_list:
SELECT COUNT(Name) FROM film_list
Вивести рік, коли знімався найстаріший фільм з таблиці, враховуючи, що при невідомому році в таблицю заносились нулі.
SELECT MIN(Year)
FROM film_list
where year<>0
Агрегатні функції можуть приймати як аргумент не тільки поля таблиці, але й вирази. Наприклад, визначити максимальну різницю років між датою випуску фільму й датою його додавання до таблиці:
SELECT (Year(‘AddDate’)-'уеаґ)
FROM film_list
where 'year'<>0
В останньому запиті використано функцію Year(), яка виділяє з дати рік. Оскільки в таблиці є поле з аналогічним іменем, то ім'я поля взято у зворотні лапки.
При створенні будь-якого запиту обов’язково потрібно визначити:
поля вихідної таблиці запиту (тобто поля таблиці, яка буде отримана внаслідок виконання запиту);
вхідні таблиці, з яких будуть вибиратися дані для формування вихідної таблиці.
Інші параметри запиту не є обов’язковими і використовуються для визначення додаткових вимог до даних, які мають бути відібрані, щоб сформувати вихідну таблицю.