Слайд 1Заняття 3. Мова SQL: загальний огляд. Формування SQL-запиту. Інструкції маніпуляції
з таблицями.
Слайд 2SQL – структурована мова запитів
SQL (англ. Structured query language –
мова структурованих запитів) – декларативна мова програмування для взаємодії користувача
з базами даних.
Декларативна мова програмування – така мова програмування, за допомогою якої, програма описує, який результат необхідно отримати, замість описання послідовності отримання цього результату.
SQL дає можливість вирішувати наступні задачі:
створення БД і визначення її структури;
виконання запитів до БД;
керування безпекою даних.
Слайд 3Інтерактивна та вбудована SQL
Інтерактивна SQL використовується для роботи безпосередньо в
базі даних, щоб її опрацьовувати. При введенні команди в інтерактивній
формі SQL, вона тут же виконається і виведуться результати.
Вбудована SQL складається з команд та процедур SQL, які розміщені в програмах, написаних іншими мовами програмування. Це робить такі програми більш потужними та більш ефективними.
Слайд 4Деякі популярні діалекти SQL
PL/SQL (Procedural Language/SQL) – використовується в Oracle;
T-SQL
(Transact-SQL) – використовується в Microsoft SQL Server та Sybase Adaptive
Server;
PSQL (Procedural SQL) – використовується в InterBase та Firebird;
SQL PL (SQL Procedural Language) – використовується в IBM DB2;
SQL/PSM (SQL/Persistent Stored Module) – використовується в MySQL;
PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) – використовується в PostgreSQL та є подібний до Oracle PL/SQL.
Слайд 5Субпідрозділи (частини) SQL
Оператори визначення даних – DDL (Data Definition Language).
Призначені для опису структури баз даних. Такі як: CREATE (створити),
ALTER (змінити), DROP (видалити).
Оператори маніпулювання даними – DML (Data Manipulation Language). Призначені для отримання, вставки, видалення чи зміни даних у БД. Такі як: SELECT (вибрати), INSERT (додати), UPDATE (обновити), DELETE (видалити).
Оператори визначення доступу до даних – DCL (Data Control Language). Такі як: GRANT (надати доступ), REVOKE (анулювати видані раніше дозволи чи заборони).
Слайд 6Використання SQL для роботи з базою даних
Слайд 7Загальні типи даних в SQL
Символи
Числа
Логічні дані
Дата і
час
Двійкові дані
Слайд 8Символьні типи даних в SQL
CHARACTER(n) (або CHAR(n) в реальних СУБД)
– символьний рядок фіксованої довжини з n символів (0
n не вказане, то припускається, що рядок складається з одного символу. Якщо у стовпець такого типу вводиться mCHARACTER VARYING(n) (або VARCHAR(n) в реальних СУБД) – символьний рядок змінної довжини, яка не перевищує n символів. Застосовується, коли дані мають різну довжину і не бажано доповнювати їх пропусками. В даному випадку є обов’язковим вказання максимальної кількості символів, на відміну від CHAR.
CHAR та VARCHAR використовують 1-байтний варіант зберігання символів, який базується на ASCII.
Слайд 9Числові типи даних в SQL
INTEGER (INT в реальних СУБД) –
чотирьохбайтне ціле число (до ± 2 147 483 467);
DECIMAL (x, y) – десяткове
число, у якому всього x розрядів, з яких y відведено для дробової частини. Дозволяє вказати максимальне число знаків до коми і після коми. Вимагає 5-17 байтів пам'яті.
DOUBLE (x, y) – дійсне число подвійної точності з плаваючою крапкою. Застосовується для представлення наукових даних, наприклад, дуже близьких до нуля або дуже великих.
FLOAT (n) – дійсне число з плаваючою крапкою і мінімальною точністю, яке займає 8 байтів, де n – точність.
UNSIGNED – умова, що забороняє запис від'ємних значень у поле числового типу!!!
Слайд 10Логічні дані в SQL
BIT може зберігати три значення – 0,
1 або NULL, перші два з яких фактично відповідають значенням
true та false.
BOOL або BOOLEAN – 1-байтовий логічний тип даних, який може приймати два значення – true, false.
Слайд 11Дата і час в SQL
DATE – представлення значень календарної дати.
Дані цього типу можуть містити будь-яку дату з 0001 року
по 9999 рік.
YEAR – представлення лише року.
TIME – представлення часу.
DATETIME – одночасне представлення дати та часу.
TIMESTAMP – одночасне представлення дати та часу із врахуванням поточного часового поясу.
Слайд 12Двійкові дані в SQL
Тип даних BLOB являє собою двійковий об'єкт
великого розміру, який може містити змінну кількість даних.
BINARY і VARBINARY
типи подібні до CHAR і VARCHAR, за винятком того, що вони містять двійкові рядки. Тобто, вони містять рядки байтів, а не символьні рядки.
Слайд 13Перетворення типів в SQL
Функція: CAST(вираз AS тип);
Наприклад,
CAST('1234.56' AS DOUBLE(4,2));
CAST(odate AS
DATE).
Слайд 14SQL-операції
Арифметичні операції в порядку спадання пріоритетів: ( ); *, /;
+, -.
Символьні операції: знаком операції конкатенації (зчіплення) символьних значень є
|| (у Oracle та DB2), або + (у MS SQL Server та MS Access), або функція CONCAT() (у MySQL, Oracle та DB2). Результатом конкатенації є символьне значення з максимальною довжиною 255 символів.
Приклад, CONCAT('My', 'S', 'QL');
Слайд 15SQL-операції
Операції порівняння: =, >, =,
може бути або 'TRUE', або 'FALSE'.
Логічні операції в порядку
спадання пріоритетів:
( ) – змінює нормальні правила пріоритетів;
NOT – інвертує результат логічного виразу;
AND – результат повинен відповідати обом умовам;
OR – результат повинен відповідати одній із умов.
Слайд 16Інструкції маніпуляції з таблицями
Створення таблиць
Обмеження на дані
Модифікація таблиць
Видалення таблиць
Слайд 17Мова визначення даних (DDL – Data Definition Language)
Інструкції DDL:
CREATE
TABLE – створення таблиці;
ALTER TABLE – модифікація структури таблиці;
DROP TABLE
– видалення таблиці.
Слайд 18Інструкція створення таблиці (CREATE TABLE)
Створює порожню таблицю без записів (значення
вводяться засобами DML).
CREATE TABLE, як правило, визначає ім’я таблиці та
набір стовпців, вказаних у певному порядку, тобто визначає структуру таблиці.
Типи даних стовпців повинні бути сумісними зі стандартом ANSI.
Значення розміру стовпця залежить від типу даних.
Кожна таблиця повинна мати хоча б один стовпець.
Слайд 19Інструкція створення таблиці (CREATE TABLE)
Приклад 1. Наступна інструкція створює таблицю
Sellers:
CREATE TABLE Sellers
(snum int,
sname varchar(45),
city varchar(45),
comm
double(3, 2));
Слайд 20Інструкція створення тимчасової таблиці (CREATE TEMPORARY TABLE)
Інструкція подібна до CREATE
TABLE, крім ключового слова TEMPORARY.
Тимчасова таблиця, на відміну від
постійної, існує лише на час сеансу роботи з базою даних, в якому вона була створена.
Тимчасова таблиця може бути доступна іншим користувачам, як і постійна таблиця.
Тимчасові таблиці створюються для представлення в них поточних підсумкових (звітних) даних, які є доступними декільком користувачам бази даних.
Слайд 21Обмеження на значення даних
Обмеження – частина визначення таблиці, яке задає
певні критерії значенням, які вводяться в таблицю.
Обмеження – є одним
із засобів організації підтримки цілісності даних безпосередньо в БД.
CУБД перевіряє відповідність встановлених обмежень і значень при модифікації даних.
Слайд 22Обмеження на значення даних в SQL
NOT NULL
UNIQUE
PRIMARY
KEY
FOREIGN KEY
AUTO_INCREMENT
Слайд 23Обмеження стовпця та обмеження таблиці
Обмеження стовпця застосовується лише до індивідуальних
стовпців.
Обмеження таблиці застосовується до груп стовпців.
Визначаються обмеження наступним чином:
CREATE TABLE <ім’я табл>
(<ім’я стовп> <обмеж на стовп>,
<ім’я стовп> <тип даних> <обмеж на стовп>, ...
CONSTRAINT <ім’я обмеж на табл >
< обмеж на табл> (<ім’я стовп> [,<ім’я стовп>]));
Слайд 24Обмеження NOT NULL
Забороняє використання NULL значень у стовпцях.
Приклад 1
(продовж.): Створимо таблицю Sellers, не дозволяючи поміщати NULL-значення у стовпці
snum або sname:
CREATE TABLE Sellers
(snum int NOT NULL,
sname varchar(45) NOT NULL,
city varchar(45),
comm double(3, 2));
Слайд 25Обмеження унікальності UNIQUE
Використовується, щоб уникнути певного безладдя в БД, коли
необхідно надавати унікальність разом з обмеженнями.
Якщо задати обмеження UNIQUE для
стовпця, то СУБД відхилить будь-яку спробу у певному рядку ввести у це поле значення, яке вже було в іншому рядку.
UNIQUE може застосовуватись лише до полів, які визначені як NOT NULL.
Слайд 26Приклад 1 (продовж.): удосконалимо інструкцію створення таблиці Sellers через надання
обмеження унікальності стовпцям:
CREATE TABLE Sellers
(snum int NOT NULL
UNIQUE,
sname varchar(45) NOT NULL UNIQUE,
city varchar(45),
comm double(3, 2));
Слайд 27Приклад 2: У нашій базі даних кожного замовника обслуговує лише
один продавець. Це означає, що кожна комбінація номера замовника (cnum)
та номера продавця (snum) у таблиці Customers повинна бути унікальною. Отже, створимо таблицю Customers через надання обмеження унікальності групі стовпців.
CREATE TABLE Customers
(cnum int NOT NULL,
cname varchar(45) NOT NULL,
rating int,
city varchar(45),
snum int NOT NULL,
CONSTRAINT UQ_Customers UNIQUE (cnum, snum));
Слайд 28Встановлення значень стовпців за замовчуванням
NULL значення є найбільш поширеним значенням
стовпця за замовчуванням.
Інша альтернатива, щоб не використовувати значення NULL, це
встановити значення нуль (0) для числових полів або пропуски для символьних. У такому випадку під час запитів SQL буде опрацювувати їх як і будь-яке інше значення.
Щоб надати значення за замовчуванням, використовують слово DEFAULT у команді CREATE TABLE.
Слайд 29Приклад 1 (продовж.): Припустимо, що основна філія підприємства знаходиться в
місті London. Удосконалимо інструкцію створення таблиці Sellers через задання значень
за замовчуванням у стопці city:
CREATE TABLE Sellers
(snum int NOT NULL UNIQUE,
sname varchar(45) NOT NULL UNIQUE,
city varchar(45) DEFAULT 'London',
comm double(3, 2) CHECK (comm >= 0.05));
Слайд 30Обмеження первинного ключа PRIMARY KEY
Найбільш викоритовуване обмеження.
Забезпечує визначення первинного
ключа у таблиці.
PRIMARY KEY – це поєднання обмежень NOT NULL
і UNIQUE.
В таблиці допускається лише одне обмеження PRIMARY KEY.
Слайд 31Приклад 1 (продовж.): удосконалимо інструкцію створення таблиці Sellers через надання
обмеження первинного ключа:
CREATE TABLE Sellers
(snum int PRIMARY KEY,
sname varchar(45) NOT NULL UNIQUE,
city varchar(45),
comm double(3, 2));
Слайд 32Приклад 2: Створимо таблицю Customers зі складеним первинним ключем через
надання обмеження первинного ключа групі стовпців:
CREATE TABLE Customers
(cnum
int,
cname varchar(45) NOT NULL,
rating int,
city varchar(45),
snum int,
CONSTRAINT PK_Customers PRIMARY KEY (cnum, snum));
Слайд 33Обмеження зовнішнього ключа FOREIGN KEY
Забезпечують зв'язок між таблицями БД.
Забезпечують правило
цілісності посилань.
В таблиці можуть бути декілька обмежень FOREIGN KEY.
Задається:
CONSTRAINT
<ім’я обмеж>
FOREIGN KEY (<ім’я стовп дочірн_табл>)
REFERENCES <ім’я батьк_табл>(<ім’я первинного ключа батьк_табл>
[ON DELETE <опція зв'язку>] [ON UPDATE <опція зв'язку>]
Опції зв'язку:
RESTRICT | CASCADE | SET NULL | NO ACTION
Слайд 34Приклад 2 (продовж.): Створимо таблицю Customers з первинним ключем cnum
і зовнішнім ключем snum:
CREATE TABLE Customers
(cnum int PRIMARY
KEY,
cname varchar(45) NOT NULL,
rating int,
city varchar(45),
snum int,
CONSTRAINT FK_Customers_Sellers FOREIGN KEY (snum) REFERENCES Sellers (snum) ON DELETE SET NULL ON UPDATE SET NULL);
Слайд 35Обмеження AUTO_INCREMENT
Забезпечує автоматичне заповнення стовпця послідовними числами.
Забезпечує унікальність значень.
Обмеження AUTO_INCREMENT
може бути застосоване тільки для стовпців типу INT.
Обмеження AUTO_INCREMENT
може використовуватись з обмеженням PRIMARY KEY.
Слайд 36Приклад 2 (продовж.): Створимо таблицю Customers з первинним ключем cnum,
зовнішнім ключем snum та автоматично заповнюваним полем cnum:
CREATE TABLE
Customers
(cnum int PRIMARY KEY AUTO_INCREMENT,
cname varchar(45) NOT NULL,
rating int,
city varchar(45),
snum int,
CONSTRAINT FK_Customers_Sellers FOREIGN KEY (snum) REFERENCES Sellers (snum) ON DELETE SET NULL ON UPDATE SET NULL);
Слайд 37Література
Справочное руководство по MySQL (http://www.mysql.ru/docs/man/Reference.html);
Справочное руководство по MySQL версии 5.0.0-alpha
(http://www.codenet.ru/db/mysql5/);
MySQL 5.7 Reference Manual (http://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html);
Мартин Грабер – Понимание SQL
(http://www.sql.ru/docs/sql/u_sql/);
Мартин Грабер "SQL", М., Изд. "ЛОРИ", 2001г. (644 стр.);
Томас Коннолли. Базы данных. Проектирование, реализация и сопровождение. Теория и практика.
Бен Форта – SQL за 10 минут, 4-е издание (2014);
Слайд 38Завдання 1. Створити фізичну базу даних за допомогою MySQL Workbench
Створити
нову модель бази даних!
Слайд 41Завдання 2. Написати скрипт для створення бази даних