- Види SQL запитів
- Типи SQL запитів за їх видами
- Створення та налаштування бази даних
- Приклади простих запитів SQL до баз даних
- SELECT
- INSERT
- UPDATE
- DELETE
- DROP
- Приклади складних запитів до бази даних MS SQL
- Висновки
Кожен сайт в Інтернеті, будь-який проєкт, який обробляє значний обсяг інформації, змушений зберігати цю інформацію у тих чи інших базах даних (БД). Переважна більшість проєктів інформацію зберігають у БД реляційного типу, роблячи записи в різних подобах таблиць. Як внесення нових записів, так і звернення до наявних здійснюється завдяки використанню запитів, що складаються конструкціями SQL (structured query language) – непроцедурної декларативної мови структурованих запитів. У нашому випадку це означає, що, використовуючи конструкції SQL ми будемо звертатися до БД, повідомляючи, що потрібно зробити з даними, але не вказуючи яким саме способом це потрібно зробити.
Фактично SQL є набором стандартів для написання запитів до БД. Остання чинна редакція стандартів мови SQL - ISO/IEC 9075:2016.
Ґрунтуючись на вказаних стандартах мови SQL, ряд організацій випустили свої розширені версії стандартів зазначеної мови. Подібні версії іноді називають діалектами SQL.
Варіанти специфікацій SQL розробляються компаніями та співтовариствами і служать, відповідно, для роботи з різними СУБД (Системами Управління Базами Даних) – системами програм, заточених під роботу з продуктами зі своєї інфраструктури.
Найбільш застосовувані сьогодні СУБД, що використовують свої стандарти (розширення) SQL:
- MySQL — СУБД, що належить компанії Oracle.
- PostgreSQL — вільна СУБД, що підтримується та розвивається спільнотою.
- Microsoft SQL Server — СУБД, що належить компанії Microsoft. Застосовує діалект Transact-SQL (T-SQL).
Діалекти SQL, які створюються, специфікуються і використовуються різними організаціями, мають як спільні риси, так і ряд відмінностей у можливостях розширень.
Загальними рисами діалектів є основні конструкції, які застосовуються практично без відмінностей у багатьох реляційних БД. Основні відмінності діалектів полягають у відмінностях використаних типів даних, кількості, реалізації та детальних можливостей команд. Різні діалекти застосовують як різні набори зарезервованих слів, так і різні набори команд.
Тут ми розглядатимемо запити, застосовуючи конструкції зі специфікацій діалекту T-SQL.
Торкнемося класифікації SQL запитів.
Виділяють такі види SQL запитів:
DDL (Data Definition Language) – мова визначення даних. Завданням DDL-запитів є створення БД та опис її структури. Запитами такого виду встановлюються правила того, в якому вигляді різні дані будуть розміщуватися в БД.
DML (Data Manipulation Language) – мова маніпулювання даними. До запитів цього типу входять різні команди, використовуючи які безпосередньо здійснюються деякі маніпуляції з даними. DML-запити потрібні для додавання змін до вже внесених даних, для отримання даних з БД, для їх збереження, для оновлення різних записів і для їх видалення з БД. До елементів DML-звернень входить основна частина SQL операторів.
DCL (Data Control Language) – мова управління даними. Включає запити та команди, що стосуються дозволів, прав та інших налаштувань СУБД.
TCL (Transaction Control Language) – мова управління транзакціями. Конструкції такого типу застосовують для керування змінами, які здійснюються з використанням DML-запитів. Конструкції TCL дозволяють нам проводити об'єднання DML запитів у набори транзакцій.
Основні типи SQL запитів за їх видами:
Нижче ми розглянемо практичні приклади застосування SQL запитів для взаємодії з БД, використовуючи запити двох категорій – DDL та DML.
Створення та налаштування бази даних
Нам потрібна буде для прикладів БД MS SQL Server 2017 та MS SQL Server Management Studio 2017.
Розглянемо послідовність дій того, як створити запит SQL. Скориставшись Management Studio, спочатку створимо новий редактор скриптів. Щоб це зробити, на стандартній панелі інструментів оберемо «Створити запит», або скористаємось клавіатурною комбінацією Ctrl+N.
Натискаючи кнопку «Створити запит» у Management Studio, ми відкриваємо тестовий редактор, використовуючи який можна виконувати написання SQL запитів, зберігати їх і запускати.
Використовуємо для початку прості запити SQL, завдяки яким можна створити та налаштувати нову БД, щоб отримати можливість надалі з нею працювати.
Створимо нову БД з ім'ям “b_library” для бібліотеки книг. Щоб це зробити, наберемо в редакторі такий SQL запит:
Далі виділимо введений текст і натиснемо F5 або кнопку "Виконати". У нас створиться БД "b_library".
Усі подальші маніпуляції ми можемо провести із цією створеною нами БД. Для цього спочатку підключимося до цієї бази:
У БД "b_library" створимо таблицю авторів "tAuthors" з такими стовпцями: AuthorId, AuthorFirstName, AuthorLastName, AuthorAge:
AuthorId INT IDENTITY (1, 1) NOT NULL,
AuthorFirstName NVARCHAR (20) NOT NULL,
AuthorLastName NVARCHAR (20) NOT NULL,
AuthorAge INT NOT NULL
);
Заповнимо нашу таблицю такими авторами: Олександр Пушкін, Сергій Єсенін, Джек Лондон, Шота Руставелі та Рабіндранат Тагор. Для цього використовуємо такий SQL запит:
('Александр', 'Пушкин', '37'),
('Сергей', 'Есенин', '30'),
('Джек', 'Лондон', '40'),
('Шота', 'Руставели', '44'),
('Рабиндранат', 'Тагор', '80');
Ми можемо подивитися в «tAuthors» записи шляхом відправлення до СУБД простого SQL запиту:
У нашій БД «b_library» ми створили першу таблицю «tAuthors», заповнили «tAuthors» авторами книг і тепер можемо розглянути різні приклади запитів SQL, якими ми зможемо взаємодіяти з БД.
Приклади простих запитів SQL до баз даних.
Розглянемо основні запити SQL.
SELECT
1) Виведемо всі наявні у нас БД:
FROM sys.databases;
2) Виведемо всі таблиці у створеній нами раніше БД «b_library»:
3) Виводимо ще раз наявні у нас записи за авторами книг зі створеної вище «tAuthors»:
4) Виведемо інформацію про те, скільки у нас є записів рядків у «tAuthors»:
5) Виведемо з «tAuthors» два записи, починаючи з четвертого. Використовуючи ключове слово OFFSET, пропустимо перші три записи, а завдяки використанню ключового слова FETCH – позначимо вибірку наступних 2 рядків (ONLY):
ORDER BY AuthorId
OFFSET 3 ROWS
FETCH NEXT 2 ROWS ONLY;
6) Виведемо з «tAuthors» всі записи із сортуванням в алфавітному порядку за першою літерою імені автора:
7) Виведемо з «tAuthors» дані, попередньо по AuthorId відсортувавши їх за спаданням:
8) Виберемо записи з "tAuthors", значення AuthorFirstName у яких відповідає імені "Александр":
9) Виберемо з "tAuthors" записи, де ім'я автора AuthorFirstName починається з "се":
Відео курси за схожою тематикою:
10) Виберемо з "tAuthors" записи, в яких ім'я автора (AuthorFirstName) закінчується на "ат":
11) Зробимо вибірку всіх рядків із «tAuthors», значення AuthorId у яких дорівнює 2 або 4:
12) Виберемо в "tAuthors" такий запис AuthorAge, значення якого - найбільше:
13) Проведемо вибірку з "tAuthors" по стовпцях AuthorFirstName та AuthorLastName:
14) Отримаємо з "tAuthors" всі рядки, у яких AuthorId не дорівнює трьом:
INSERT
INSERT – це вид запиту SQL, у разі застосування якого СУБД виконує додавання нових записів у БД.
Додамо до «tAuthors» нового автора – Вільяма Шекспіра, 51 рік. Відповідно, у полі AuthorFirstName додасться Вільям, в AuthorLastName додасться Шекспір, в AuthorAge – 51. До AuthorId, у нашому випадку, автоматично додасться значення, інкрементоване відносно попереднього на 1.
Перевіримо:
UPDATE
UPDATE – SQL запит, який дозволяє внести зміни або дописувати нову інформацію до тих записів, які вже існують.
Внесемо коригування до шостого запису (AuthorId = 6). Значення змінимо для полів імені, прізвища та віку автора.
Потім звернімося до БД, щоб вивести всі наявні записи:
Ми бачимо зміни інформації в записі автора під номером 6.
DELETE
DELETE – SQL запит, виконуючи який у СУБД проводиться операція видалення певного рядка з таблиці в БД.
Звернемося до "tAuthors" з командою на видалення рядка, де AuthorId = 5:
Щоб побачити зміни, знову звернемося до бази для виведення всіх записів:
Ми бачимо, що запис автора під номером 5 тепер відсутній у tAuthors і, відповідно, не виводиться з іншими записами.
DROP
DROP – ключове слово в SQL, яке використовується для видалення даних за допомогою запиту. Наприклад, видалення деякої таблиці з БД.
Після розгляду ряду простих запитів до БД ми можемо повністю видалити нашу таблицю tAuthors, виконавши простий SQL запит:
Далі розглянемо складні запити SQL.
Приклади складних запитів до бази даних MS SQL
Складні запити SQL представляють собою комбінації простих запитів. Виконуючись, прості запити повертають згруповані в проміжні таблиці набори даних. А складний запит уже маніпулює даними, отриманими завдяки простим «підзапитам».
Складні запити отримуються такими способами:
- Переміщенням одного запиту в інший. В цьому випадку зовнішній вираз називатиметься основним запитом, а вкладений вираз - підзапитом.
- Застосування з SQL запитами різних операторів об'єднання результатів виконання підзапитів. Такі оператори називають реляційними.
Розглянемо у SQL приклади складних запитів.
Скористаємося нашою попередньою таблицею tAuthors та створимо додатково ще одну таблицю з книгами цих авторів – tBooks. У якості ідентифікатора авторів книг використовуємо значення AuthorId з "tAuthors", а назва книги - BookTitle.
BookId INT IDENTITY (1, 1) NOT NULL,
BookTitle NVARCHAR (20) NOT NULL,
Author INT NOT NULL
);
Заповнимо «tBooks» такими книгами:
('Руслан и Людмила', '1'),
('Кавказский пленник', '1'),
('Евгений Онегин ', '1'),
('Радуница', '2'),
('Преображение', '2'),
('Мартин Иден', '3'),
('Морской волк', '3'),
('Белый Клык', '3');
1) Зробимо вибірку з БД усіх книг, у яких ім'я автора – «Александр»:
FROM tBooks
WHERE Author = (SELECT AuthorId FROM tAuthors WHERE AuthorFirstName = 'Александр');
Отримаємо:
2) Зробимо вибірку даних із «tBooks» усіх книг, авторами яких є люди з іменами «Александр» або «Сергей»:
FROM tBooks
WHERE Author = SOME(SELECT AuthorId FROM tAuthors
WHERE AuthorFirstName IN ('Александр', 'Сергей'));
3) Зробимо вибірку за книгами з таблиці «tBooks», у яких імена авторів НЕ «Сергій» та НЕ «Олександр»:
Безкоштовні вебінари за схожою тематикою:
FROM tBooks
WHERE Author != ALL(SELECT AuthorId FROM tAuthors WHERE AuthorFirstName IN ('Александр', 'Сергей'));
4) Візьмемо таблицю «tBooks» і зробимо з неї вибірку всіх книг із зазначенням як імен, так і прізвищ авторів цих книг із «tAuthors»:
tAuthors.AuthorLastName
FROM tBooks
JOIN tAuthors ON tAuthors.AuthorId = tBooks.Author;
Висновки
Ми з вами розглянули декілька варіантів найпростіших і найскладніших SQL запитів. Звичайно цю статтю не варто розглядати ні як навчальний посібник, ні як вичерпний перелік можливостей запитів у T-SQL та інших діалектах. Її швидше за все можна вважати прикладом SQL запитів для початківців. Однак вона може бути для Вас відправною точкою.
Існує набагато більше різних SQL запитів. Це і запити з циклічними конструкціями, і рекурсивні, і різна робота зі змінними, і інші види запитів та підзапитів. Якщо Ви хочете вивчити цю дуже важливу специфічну мову складання запитів до БД – можете пройти відповідні курси на нашому порталі ITVDN.com, обравши відповідний Вам діалект:
Transact-SQL - https://itvdn.com/ru/video/ssms_tsql
SQL Essential - https://itvdn.com/ru/video/sql-essential
SQL Практикум - https://itvdn.com/ru/video/sql-workshop
MySQL - https://itvdn.com/ru/video/mysql-essential
PostgreSQL - https://itvdn.com/ru/video/postgresql