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 інакше будуть помилки.

Також можна задати максимальну кількість записів в результаті. Корисно для великих таблиць. Правда синтаксис трохи відрізняється для різних систем:

MySQL

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';

Посилання[ред.]