SQL
SQL (Structured query language — мова структурованих запитів) — декларативна мова програмування для взаємодії користувача з базами даних, що застосовується для формування запитів, оновлення і керування реляційними БД, створення схеми бази даних і її модифікація, система контролю за доступом до бази даних.. Сам по собі SQL не є ні системою керування базами даних, ні окремим програмним продуктом.
SQL – це діалогова мова програмування для здійснення запиту і внесення змін до бази даних, а також управління базами даних. Багато баз даних підтримує SQL з розширеннями до стандартної мови. Ядро SQL формує командна мова, яка дозволяє здійснювати пошук, вставку, обновлення, і вилучення даних, використовуючи систему управління і адміністративні функції. SQL також включає CLI (Call Level Interface) для доступу і управління базами даних дистанційно.
Перша версія SQL була розроблена на початку 1970-х років у IBM. Ця версія носила назву SEQUEL і була призначена для обробки і пошуку даних, що містилися в реляційній базі даних IBM, System R . Мова SQL пізніше була стандартизована Американськими Держстандартами (ANSI) в 1986. Спочатку SQL розроблялась як мова запитів і управління даними, пізніші модифікації SQL створено продавцями системи управління базами даних, які додали процедурні конструкції, control-of-flow команд і розширення мов. З випуском стандарту SQL:1999 такі розширення були формально запозичені як частина мови SQL через Persistent Stored Modules (SQL/PSM).
Підручник
[ред.]SQL краще вчити на практиці, тому треба запустити якусь СУБД, наприклад mySQL. Можна використати веб-інтерфейс w3schools, правда там не можна змінювати базу.
Загалом мову SQL поділяють на дві частини: мову маніпуляції даними ( Data Manipulation Language (DML) ), та мову опису даних ( Data Definition Language (DDL) ). Мова SQL не чутлива до регістру, і оператори пишуть великими буквами тільки для зручності.
Мова опису даних
[ред.]Дозволяє нам описати структуру даних.
Для інформації про типи даних можна переглянути розділ Типи даних MySQL.
Нехай маємо базу даних університету, і користувача, що має повний доступ до цієї бази. Створимо таблицю з людьми:
CREATE TABLE persons (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
surname VARCHAR(50),
name VARCHAR(200),
tel VARCHAR(50)
);
Щоб потім змінити структуру таблиці використовують команду ALTER
, наприклад:
ALTER TABLE persons ADD COLUMN email VARCHAR(100);
Крім цього таблиці можна перейменовувати
ALTER TABLE table RENAME AS new_table;
та звісно видаляти поля:
ALTER TABLE persons DROP COLUMN tel;
Мова маніпуляції даними
[ред.]SELECT
[ред.]Оператор SELECT
дозволяє вибирати дані з бази. Загалом оператор SELECT
виглядає так:
SELECT імена_полів
FROM імена_таблиць
WHERE умова;
Імена полів записуються через кому. Якщо потрібно вибрати всі поля, пишуть зірочку ("*"). При потребі можна уточнити з якої таблиці брати поле, додавши перед його іменем.
SELECT
може видати нам рядки що повторюються. Якщо ми хочемо мати тільки унікальні значення, то можемо уникнути повторень командою DISTINCT
.
SELECT DISTINCT поля FROM таблиці;
Умова дозволяє відкинути непотрібні нам значення. Загалом в умові певні поля порівнюються з певними значеннями, чи між собою. Текстові значення беруться в одинарні лапки (можна і в подвійні). Для порівняння можна користуватись такими операторами:
Оператор | Опис | Приклад |
---|---|---|
= | Рівність | surname='Іванов' |
<> (можливо також != ) | Нерівність | surname!='Іванов' |
<, >, <=, >= | Менше, більше, менше рівно, більше рівно | age>=18 |
BETWEEN | Всі значення що знаходяться між даними двома включно | BETWEEN 'Іванов' AND 'Петров'
|
LIKE | Порівняння з шаблоном | surname LIKE 'І%'
|
IN | Приймає одне з перелічених значень | faculty IN ('Кубик','Радіофак','Мехмат')
|
В шаблоні для LIKE
можна використовувати '%' як замінник для будь-якого числа будь-яких символів, та '_' як замінник для довільного одного символа.
Також в умові можна використовувати оператори OR, AND та NOT, та дужки.
Також до запиту SELECT можна додати команду ORDER BY, що дозволяє впорядкувати результат за заданими стовпцями. Щоб сортувати в зворотньому порядку після стовпців за якими сортують пишуть DESC:
SELECT name FROM students ORDER BY name DESC;
Варто також зауважити, що ORDER BY не може стояти перед WHERE інакше будуть помилки.
Також можна задати максимальну кількість записів в результаті. Корисно для великих таблиць. Правда синтаксис трохи відрізняється для різних систем:
SELECT назви_стовпців FROM назва_таблиці LIMIT кількість
SQL Server
SELECT TOP кількість|відсоток назви_стовпців FROM назва таблиці
Oracle
SELECT назви_стовпців FROM назва_таблиці WHERE ROWNUM <= кількість
JOIN
[ред.]З'єднання використовуються для запитів з кількох таблиць, що базуються на зв'язках між певними стовпцями таблиць.
З'єднання бувають різні. Наприклад INNER JOIN (теж саме що і JOIN), де є хоч одне співпадіння в стовпцях таблиці.
Пишуть так:
SELECT назви_стовпців
FROM перша_таблиця
INNER JOIN друга_таблиця
ON перша_таблиця.назва_стовпця=друга_таблиця.назва_стовпця
І це буде те ж саме що і
SELECT назви_стовпців
FROM перша_таблиця, друга_таблиця
WHERE перша_таблиця.назва_стовпця=друга_таблиця.назва_стовпця
LEFT JOIN працює та пишеться майже так само, але повертає таблицю, в яку входять всі записи лівої таблиці (недостаючі записи з правої заповнються NULLами).
RIGHT JOIN відповідно навпаки.
FULL JOIN повертає об'єднання результатів RIGHT та LEFT JOIN.
INSERT
[ред.]Оператор INSERT додає до таблиці рядок. Має такий синтаксис:
INSERT INTO назва_таблиці VALUES (список_значень);
Значення мають йти в такому ж порядку, як і стопці таблиці. При необхідності можна задати конкретні стовпці, та конкретні значення:
INSERT INTO students(name) VALUES ('Іван');
Всі інші поля отримають значення за замовчуванням.
UPDATE
[ред.]Змінює значення полів в уже існуючих записах. Синтаксис:
UPDATE назва_таблиці SET стовпець1=значення1, стовпець2=значення2, ... WHERE умова;
З цим оператором треба обережно, бо якщо забути задати умову, то зміняться всі записи таблиці.
DELETE
[ред.]Найпростіший оператор:
DELETE FROM назва_таблиці WHERE умова;
Знову ж таки, не варто забувати, що немає команди "Відмінити".
Транзакції
[ред.]Насправді можна скасувати незавершену транзакцію командою
rollback;
Для цього треба бути певним, що ваш клієнт не налаштований автоматично завершувати транзакцію після кожної sql команди.
Зміни у транзакції застосовуються командою
commit;
MySQL
[ред.]Створення нової бази даних та її користувача:
create database database_name character set utf8 collate utf8_bin;
create user 'user_name'@'localhost' identified by 'some_password';
grant all privileges on database_name.* to 'user_name';