Огляд основних SQL запитів - Блог ITVDN
ITVDN: курси програмування
Відеокурси з
програмування

Замовити дзвінок

Вибери свою IT спеціальність

Підписка

Замовити дзвінок

+38 099 757 27 82

Огляд основних SQL запитів

advertisement advertisement
  1. Види SQL запитів
  2. Типи SQL запитів за їх видами
  3. Створення та налаштування бази даних
  4. Приклади простих запитів SQL до баз даних
  5. SELECT
  6. INSERT
  7. UPDATE
  8. DELETE
  9. DROP
  10. Приклади складних запитів до бази даних MS SQL
  11. Висновки

Кожен сайт в Інтернеті, будь-який проєкт, який обробляє значний обсяг інформації, змушений зберігати цю інформацію у тих чи інших базах даних (БД). Переважна більшість проєктів інформацію зберігають у БД реляційного типу, роблячи записи в різних подобах таблиць. Як внесення нових записів, так і звернення до наявних здійснюється завдяки використанню запитів, що складаються конструкціями 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 запит:

CREATE DATABASE b_library;

Далі виділимо введений текст і натиснемо F5 або кнопку "Виконати". У нас створиться БД "b_library".

Усі подальші маніпуляції ми можемо провести із цією створеною нами БД. Для цього спочатку підключимося до цієї бази:

USE b_library;

У БД "b_library" створимо таблицю авторів "tAuthors" з такими стовпцями: AuthorId, AuthorFirstName, AuthorLastName, AuthorAge:

CREATE TABLE tAuthors (
AuthorId                      INT                  IDENTITY (1, 1) NOT NULL,
AuthorFirstName        NVARCHAR (20)        NOT NULL,
AuthorLastName         NVARCHAR (20)    NOT NULL,
AuthorAge                   INT                              NOT NULL
);

Заповнимо нашу таблицю такими авторами: Олександр Пушкін, Сергій Єсенін, Джек Лондон, Шота Руставелі та Рабіндранат Тагор. Для цього використовуємо такий SQL запит:

INSERT tAuthors VALUES
('Александр', 'Пушкин', '37'),
('Сергей', 'Есенин', '30'),
('Джек', 'Лондон', '40'),
('Шота', 'Руставели', '44'),
('Рабиндранат', 'Тагор', '80');

Ми можемо подивитися в «tAuthors» записи шляхом відправлення до СУБД простого SQL запиту:

SELECT * FROM tAuthors;

У нашій БД «b_library» ми створили першу таблицю «tAuthors», заповнили «tAuthors» авторами книг і тепер можемо розглянути різні приклади запитів SQL, якими ми зможемо взаємодіяти з БД.

Приклади простих запитів SQL до баз даних.

Розглянемо основні запити SQL.

SELECT

1) Виведемо всі наявні у нас БД:

SELECT name, database_id, create_date
FROM sys.databases;

2) Виведемо всі таблиці у створеній нами раніше БД «b_library»:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

3) Виводимо ще раз наявні у нас записи за авторами книг зі створеної вище «tAuthors»:

SELECT * FROM tAuthors;

4) Виведемо інформацію про те, скільки у нас є записів рядків у «tAuthors»:

SELECT count(*) FROM tAuthors;

5) Виведемо з «tAuthors» два записи, починаючи з четвертого. Використовуючи ключове слово OFFSET, пропустимо перші три записи, а завдяки використанню ключового слова FETCH – позначимо вибірку наступних 2 рядків (ONLY):

SELECT * FROM tAuthors
ORDER BY AuthorId
OFFSET 3 ROWS   
FETCH NEXT 2 ROWS ONLY;

6) Виведемо з «tAuthors» всі записи із сортуванням в алфавітному порядку за першою літерою імені автора:

SELECT * FROM tAuthors ORDER BY AuthorFirstName;

7) Виведемо з «tAuthors» дані, попередньо по AuthorId відсортувавши їх за спаданням:

SELECT * FROM tAuthors ORDER BY AuthorId DESC;

8) Виберемо записи з "tAuthors", значення AuthorFirstName у яких відповідає імені "Александр":

SELECT * FROM tAuthors WHERE AuthorFirstName='Александр';

9) Виберемо з "tAuthors" записи, де ім'я автора AuthorFirstName починається з "се":

SELECT * FROM tAuthors WHERE AuthorFirstName LIKE 'се%';

10) Виберемо з "tAuthors" записи, в яких ім'я автора (AuthorFirstName) закінчується на "ат":

SELECT * FROM tAuthors WHERE AuthorFirstName LIKE '%ат' ORDER BY AuthorId;

11) Зробимо вибірку всіх рядків із «tAuthors», значення AuthorId у яких дорівнює 2 або 4:

SELECT * FROM tAuthors WHERE AuthorId IN (2,4);

12) Виберемо в "tAuthors" такий запис AuthorAge, значення якого - найбільше:

SELECT max(AuthorAge) FROM tAuthors;

13) Проведемо вибірку з "tAuthors" по стовпцях AuthorFirstName та AuthorLastName:

SELECT AuthorFirstName, AuthorLastName FROM tAuthors;

14) Отримаємо з "tAuthors" всі рядки, у яких AuthorId не дорівнює трьом:

SELECT AuthorId, AuthorFirstName, AuthorLastName  FROM tAuthors WHERE AuthorId!='3';

INSERT

INSERT – це вид запиту SQL, у разі застосування якого СУБД виконує додавання нових записів у БД.

Додамо до «tAuthors» нового автора – Вільяма Шекспіра, 51 рік. Відповідно, у полі AuthorFirstName додасться Вільям, в AuthorLastName додасться Шекспір, в AuthorAge – 51. До AuthorId, у нашому випадку, автоматично додасться значення, інкрементоване відносно попереднього на 1.

INSERT INTO tAuthors VALUES ('Уильям', 'Шекспир', '51');

Перевіримо:

SELECT * FROM tAuthors;

 

UPDATE

UPDATE – SQL запит, який дозволяє внести зміни або дописувати нову інформацію до тих записів, які вже існують.

Внесемо коригування до шостого запису (AuthorId = 6). Значення змінимо для полів імені, прізвища та віку автора.

UPDATE tAuthors SET AuthorFirstName = 'Лев', AuthorLastName='Толстой', AuthorAge = '82' WHERE AuthorId = '6';

Потім звернімося до БД, щоб вивести всі наявні записи:

SELECT * FROM tAuthors;

Ми бачимо зміни інформації в записі автора під номером 6.

DELETE

DELETE – SQL запит, виконуючи який у СУБД проводиться операція видалення певного рядка з таблиці в БД.

Звернемося до "tAuthors" з командою на видалення рядка, де AuthorId = 5:

DELETE FROM tAuthors WHERE AuthorId = '5';

Щоб побачити зміни, знову звернемося до бази для виведення всіх записів:

SELECT * FROM tAuthors;

Ми бачимо, що запис автора під номером 5 тепер відсутній у tAuthors і, відповідно, не виводиться з іншими записами.

DROP

DROP – ключове слово в SQL, яке використовується для видалення даних за допомогою запиту. Наприклад, видалення деякої таблиці з БД.

Після розгляду ряду простих запитів до БД ми можемо повністю видалити нашу таблицю tAuthors, виконавши простий SQL запит:

DROP TABLE tAuthors;   

Далі розглянемо складні запити SQL.

Приклади складних запитів до бази даних MS SQL

Складні запити SQL представляють собою комбінації простих запитів. Виконуючись, прості запити повертають згруповані в проміжні таблиці набори даних. А складний запит уже маніпулює даними, отриманими завдяки простим «підзапитам».

Складні запити отримуються такими способами:

  1. Переміщенням одного запиту в інший. В цьому випадку зовнішній вираз називатиметься основним запитом, а вкладений вираз - підзапитом.
  2. Застосування з SQL запитами різних операторів об'єднання результатів виконання підзапитів. Такі оператори називають реляційними.

Розглянемо у SQL приклади складних запитів.

Скористаємося нашою попередньою таблицею tAuthors та створимо додатково ще одну таблицю з книгами цих авторів – tBooks. У якості ідентифікатора авторів книг використовуємо значення AuthorId з "tAuthors", а назва книги - BookTitle.

CREATE TABLE tBooks (
BookId             INT                  IDENTITY (1, 1) NOT NULL,
BookTitle        NVARCHAR (20)        NOT NULL,
Author             INT                     NOT NULL
);

Заповнимо «tBooks» такими книгами:

INSERT tBooks VALUES
('Руслан и Людмила', '1'),
('Кавказский пленник', '1'),
('Евгений Онегин ', '1'),
('Радуница', '2'),
('Преображение', '2'),
('Мартин Иден', '3'),
('Морской волк', '3'),
('Белый Клык', '3');

1) Зробимо вибірку з БД усіх книг, у яких ім'я автора – «Александр»:

SELECT BookId, BookTitle
FROM tBooks
WHERE Author = (SELECT AuthorId FROM tAuthors WHERE AuthorFirstName = 'Александр');

Отримаємо:

2) Зробимо вибірку даних із «tBooks» усіх книг, авторами яких є люди з іменами «Александр» або «Сергей»:

SELECT BookTitle
FROM tBooks
WHERE Author = SOME(SELECT AuthorId FROM tAuthors
WHERE AuthorFirstName IN ('Александр', 'Сергей'));

3) Зробимо вибірку за книгами з таблиці «tBooks», у яких імена авторів НЕ «Сергій» та НЕ «Олександр»:

SELECT *
FROM tBooks
WHERE Author != ALL(SELECT AuthorId FROM tAuthors WHERE AuthorFirstName IN ('Александр', 'Сергей'));

4) Візьмемо таблицю «tBooks» і зробимо з неї вибірку всіх книг із зазначенням як імен, так і прізвищ авторів цих книг із «tAuthors»:

SELECT tBooks.BookId, tBooks.BookTitle, tAuthors.AuthorFirstName,
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

КОМЕНТАРІ ТА ОБГОВОРЕННЯ
advertisement advertisement

Купуй передплатуз доступом до всіх курсів та сервісів

Бібліотека сучасних IT знань у зручному форматі

Вибирай свій варіант підписки залежно від завдань, що стоять перед тобою. Але якщо потрібно пройти повне навчання з нуля до рівня фахівця, краще вибирати Базовий або Преміум. А для того, щоб вивчити 2-3 нові технології, або повторити знання, готуючись до співбесіди, підійде Пакет Стартовий.

Стартовий
  • Усі відеокурси на 3 місяці
  • Тестування з 10 курсів
  • Перевірка 5 домашніх завдань
  • Консультація з тренером 30 хв
59.99 $
Придбати
Базовий
  • Усі відеокурси на 6 місяців
  • Тестування з 16 курсів
  • Перевірка 10 домашніх завдань
  • Консультація з тренером 60 хв
89.99 $
Придбати
Преміум
  • Усі відеокурси на 12 місяців
  • Тестування з 24 курсів
  • Перевірка 20 домашніх завдань
  • Консультація з тренером 120 хв
169.99 $
Придбати
Notification success