SQL: відмінності між версіями

Вилучено вміст Додано вміст
Bunyk (обговорення | внесок)
Створена сторінка: '''SQL''' (''Structured query language'' — мова структурованих запитів) — [[w:декларативне програмування|де...
 
Bunyk (обговорення | внесок)
Немає опису редагування
Рядок 7:
 
== Підручник ==
SQL краще вчити на практиці, тому треба запустити якусь [[w:СУБД|СУБД]], наприклад [[w:mySQL|mySQL]]. Можна використати [http://www.w3schools.com/sql/sql_tryit.asp веб-інтерфейс w3schools], правда там не можна змінювати базу.
 
Загалом мову SQL поділяють на дві частини: мову маніпуляції даними ( Data Manipulation Language (DML) ), та мову опису даних ( Data Definition Language (DDL) ). Мова SQL не чутлива до регістру, і оператори пишуть великими буквами тільки для зручності.
Рядок 14:
Дозволяє нам описати структуру даних.
 
Для інформації про типи даних можна переглянути: розділ [[SQL/Типи даних MySQL|Типи даних MySQL]].
 
Нехай маємо базу даних університету, і користувача, що має повний доступ до цієї бази. Створимо таблицю з людьми:
<source lang="sql">
CREATE TABLE persons ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, surname VARCHAR(50), name VARCHAR(200), tel VARCHAR(50) );
</source>
 
Щоб потім змінити структуру таблиці використовують команду <code>ALTER</code>, наприклад:
<source lang="sql">
ALTER TABLE persons ADD COLUMN email VARCHAR(100);
</source>
 
Крім цього таблиці можна перейменовувати
<source lang="sql">
ALTER TABLE table RENAME AS new_table;
</source>
 
та звісно видаляти поля:
<source lang="sql">
ALTER TABLE persons DROP COLUMN tel;
</source>
 
=== Мова маніпуляції даними ===
==== SELECT ====
Оператор <code>SELECT</code> дозволяє вибирати дані з бази. Загалом оператор <code>SELECT</code> виглядає так:
<source lang="sql">
SELECT імена_полів
FROM імена_таблиць
WHERE умова;
</source>
 
Імена полів записуються через кому. Якщо потрібно вибрати всі поля, пишуть зірочку ("*"). При потребі можна уточнити з якої таблиці брати поле, додавши перед його іменем.
<code>SELECT</code> може видати нам рядки що повторюються. Якщо ми хочемо мати тільки унікальні значення, то можемо уникнути повторень командою <code>DISTINCT</code>.
 
SELECT DISTINCT поля FROM таблиці;
<source lang="sql">
SELECT DISTINCT поля FROM таблиці;
<source lang="sql">
 
Умова дозволяє відкинути непотрібні нам значення. Загалом в умові певні поля порівнюються з певними значеннями, чи між собою. Текстові значення беруться в одинарні лапки (можна і в подвійні). Для порівняння можна користуватись такими операторами:
Рядок 50 ⟶ 65:
| <, >, <=, >= || Менше, більше, менше рівно, більше рівно || age>=18
|-
| BETWEEN || Всі значення що знаходяться між даними двома включно || <source lang="sql">BETWEEN 'Іванов' AND 'Петров'</source>
|-
| LIKE || Порівняння з шаблоном || <source lang="sql">surname LIKE 'І%'</source>
|-
| IN || Приймає одне з перелічених значень || <source lang="sql">faculty IN ('Кубик','Радіофак','Мехмат')</source>
|}
 
В шаблоні для <code>LIKE</code> можна використовувати '%' як замінник для будь-якого числа будь-яких символів, та '_' як замінник для довільного одного символа.
 
Також в умові можна використовувати оператори OR, AND та NOT, та дужки.
 
Також до запиту SELECT можна додати команду ORDER BY, що дозволяє впорядкувати результат за заданими стовпцями. Щоб сортувати в зворотньому порядку після стовпців за якими сортують пишуть DESC:
 
SELECT name FROM students ORDER BY name DESC;
<source lang="sql">
SELECT name FROM students ORDER BY name DESC;
</source>
 
Варто також зауважити, що ORDER BY не може стояти перед WHERE інакше будуть помилки.
 
Рядок 68 ⟶ 87:
 
'''[[MySQL]]'''
<source lang="sql">
SELECT назви_стовпців FROM назва_таблиці LIMIT кількість
</source>
 
'''SQL Server'''
<source lang="sql">
SELECT TOP кількість|відсоток назви_стовпців FROM назва таблиці
</source>
 
'''Oracle'''
<source lang="sql">
SELECT назви_стовпців FROM назва_таблиці WHERE ROWNUM <= кількість
</source>
 
==== JOIN ====
Рядок 82 ⟶ 107:
 
Пишуть так:
<source lang="sql">
SELECT назви_стовпців
FROM перша_таблиця
INNER JOIN друга_таблиця
INNER JOIN друга_таблиця
ON перша_таблиця.назва_стовпця=друга_таблиця.назва_стовпця
</source>
 
І це буде те ж саме що і
<source lang="sql">
SELECT назви_стовпців
FROM перша_таблиця, друга_таблиця
FROM перша_таблиця, друга_таблиця
WHERE перша_таблиця.назва_стовпця=друга_таблиця.назва_стовпця
</source>
 
LEFT JOIN працює та пишеться майже так само, але повертає таблицю, в яку входять всі записи лівої таблиці (недостаючі записи з правої заповнються NULLами).
Рядок 100 ⟶ 129:
==== INSERT ====
Оператор INSERT додає до таблиці рядок. Має такий синтаксис:
<source lang="sql">
INSERT INTO назва_таблиці VALUES (список_значень);
</source>
 
Значення мають йти в такому ж порядку, як і стопці таблиці. При необхідності можна задати конкретні стовпці, та конкретні значення:
<source lang="sql">
INSERT INTO students(name) VALUES ('Іван');
</source>
 
Всі інші поля отримають значення за замовчуванням.
 
Рядок 112 ⟶ 147:
==== DELETE ====
Найпростіший оператор:
<source lang="sql">
DELETE FROM назва_таблиці WHERE умова;
</source>
 
Знову ж таки, не варто забувати, що немає команди "Відмінити".