Ms Sql Server Start

Огляд мови SQL та запитів

Вступ до SQL - історія, стандарти, діалекти, T-SQL та категорії операторів DDL/DML/DCL

Огляд мови SQL та запитів

Навіщо нам потрібна спеціалізована мова?

Уявіть, що ви в бібліотеці і хочете знайти книгу. Ви могли б:

  1. Написати програму на C#/Java, яка:
    • Відкриє файл з каталогом
    • Прочитає кожен рядок
    • Порівняє з назвою книги
    • Поверне результат
  2. Або просто сказати бібліотекарю: "Дайте мені Кобзар Шевченка"

SQL — це і є та "мова спілкування з бібліотекарем" (базою даних). Ви кажете ЩО потрібно, а не ЯК це отримати.

SQL (Structured Query Language) — це декларативна мова для роботи з реляційними базами даних. Ви описуєте результат, який хочете отримати, а СУБД сама вирішує, як його отримати оптимально.

Імперативна vs Декларативна парадигма

// Ви ВКА "ЯК" отримати дані
List<Student> result = new List<Student>();

foreach (var student in students)
{
    if (student.Age > 18 && student.Grade >= 90)
    {
        result.Add(student);
    }
}

return result.OrderBy(s => s.LastName).ToList();

Ви контролюєте:

  • Як перебирати дані (foreach)
  • Як фільтрувати (if)
  • Як сортувати (OrderBy)
Перевага декларативності: SQL Server має query optimizer, який автоматично обирає найоптимальніший план виконання запиту. У імперативній мові ви повинні самі це робити!

Історія SQL: Від SEQUEL до SQL:2016

Часова лінія розвитку

Loading diagram...
timeline
    title Еволюція мови SQL
    section 1970s - Народження
        1974 : SEQUEL - IBM System/R project<br/>Donald Chamberlin, Raymond Boyce
        1979 : Перейменування на SQL<br/>(через trademark issues)
    section 1980s - Стандартизація
        1986 : SQL-86 (ANSI)<br/>Перший офіційний стандарт
        1987 : SQL-87 (ISO)<br/>Міжнародний стандарт
        1989 : SQL-89<br/>Мінорне оновлення
    section 1990s - Розширення
        1992 : SQL-92 (SQL2)<br/>Великі розширення<br/>JOIN, новіsyntax
        1999 : SQL:1999 (SQL3)<br/>Тригери, рекурсія<br/>LOB types
    section 2000s - Сучасна епоха
        2003 : SQL:2003<br/>XML, WINDOW functions
        2006 : SQL:2006<br/>XML/SQL розширення
        2008 : SQL:2008<br/>TRUNCATE, INSTEAD OF
    section 2010s - Сучасність
        2011 : SQL:2011<br/>Temporal data
        2016 : SQL:2016<br/>JSON, полі­морфізм

Ключові віхи

SQL-86 (1986) — Перший стандарт:

  • SELECT, INSERT, UPDATE, DELETE
  • CREATE TABLE, DROP TABLE
  • Базовий WHERE, GROUP BY

SQL-92 (1992) — Найважливіша версія:

  • JOIN syntax (INNER, LEFT, RIGHT, FULL)
  • Subqueries
  • UNION
  • Стала основою для більшості СУБД

SQL:1999 (1999) — Об'єктно-орієнтовані features:

  • Triggers
  • Recursive queries (WITH)
  • BOOLEAN type

SQL:2003 (2003) — XML та аналітика:

  • XML data type
  • WINDOW functions (ROW_NUMBER, RANK)
  • MERGE statement

SQL:2016 (2016) — JSON та Big Data:

  • JSON support
  • Pattern matching
  • Полі­морфні table functions

Діалекти SQL: Різні виробники

Хоча існують стандарти, кожен виробник СУБД має свій діалект SQL із унікальними розширеннями.

Порівняння діалектів

СУБДДіалектВиробникОсобливості
SQL ServerT-SQLMicrosoftДуже багатофункціональний, stored procedures, CLR integration
OraclePL/SQLOracleНайстаріший, найпотужніший для ентерпрайзу
MySQLSQL/PSMOracle (раніше Sun)Простий, популярний у веб-розробці
PostgreSQLPLpgSQLPostgreSQL Global Development GroupOpen-source, стандарто­сумісний
DB2SQLPLIBMEnterprise-oriented, mainframe roots
MS AccessJet SQLMicrosoftСпрощений для desktop БД

Приклад відмінностей

-- Обмеження результату
SELECT TOP 10 * FROM Products;

-- Змінні
DECLARE @count INT = 0;

-- String concatenation
SELECT FirstName + ' ' + LastName AS FullName;

-- Auto-increment
CREATE TABLE Users (
    Id INT IDENTITY(1,1)
);
Переносимість коду: Через різницю діалектів SQL код НЕ завжди портабельний між різними СУБД!

T-SQL: Діалект Microsoft SQL Server

Transact-SQL (T-SQL) — розширення SQL, розроблене Microsoft та Sybase, яке додає програмні конструкції та процедурну логіку.

Основні можливості T-SQL

  1. Змінні та присвоєння
  2. Контрольні структури (IF, WHILE, CASE)
  3. Обробка помилок (TRY...CATCH)
  4. Stored Procedures та Functions
  5. Тригери
  6. Курсори
  7. Динамічний SQL

Синтаксис змінних

-- Оголошення змінної
DECLARE @studentName NVARCHAR(50);
DECLARE @age INT = 20;

-- Множинне оголошення
DECLARE
    @firstName NVARCHAR(50),
    @lastName NVARCHAR(50),
    @fullName NVARCHAR(100);

-- Присвоєння через SET
SET @studentName = 'Іван';

-- Присвоєння через SELECT
SELECT @fullName = FirstName + ' ' + LastName
FROM Students
WHERE StudentId = 1;

Контрольні структури

DECLARE @grade INT = 85;

IF @grade >= 90
    PRINT 'Відмінно!';
ELSE IF @grade >= 75
    PRINT 'Добре!';
ELSE
    PRINT 'Потрібно поліпшити';

Оператори

ОператорЗначенняПриклад
+ДодаванняSELECT 5 + 3 → 8
-ВідніманняSELECT 10 - 4 → 6
*МноженняSELECT 6 * 7 → 42
/ДіленняSELECT 20 / 4 → 5
%ОстачаSELECT 17 % 5 → 2

Функції T-SQL

-- Підрахунок
SELECT COUNT(*) FROM Students;

-- Сума
SELECT SUM(Price) FROM Orders;

-- Середнє
SELECT AVG(Grade) FROM Exams;

-- Мінімум/Максимум
SELECT MIN(Price), MAX(Price) FROM Products;

Коментарі

-- Однорядковий коментар

/*
   Багаторядковий
   коментар
*/

SELECT
    ProductName,  -- Назва товару
    Price         -- Ціна
FROM Products;

DDL, DML, DCL: Категорії операторів

SQL оператори поділяються на три основні категорії залежно від призначення.

DDL (Data Definition Language) — Мова опису даних

Призначення: Робота зі структурою бази даних.

Loading diagram...
graph LR
    DDL[DDL] --> CREATE[CREATE<br/>Створення об'єктів]
    DDL --> ALTER[ALTER<br/>Зміна об'єктів]
    DDL --> DROP[DROP<br/>Видалення об'єктів]
    DDL --> TRUNCATE[TRUNCATE<br/>Очищення таблиць]

    style DDL fill:#ef4444,color:#fff
    style CREATE fill:#10b981,color:#fff
    style ALTER fill:#f59e0b,color:#333
    style DROP fill:#dc2626,color:#fff
    style TRUNCATE fill:#fb923c,color:#333

Приклади:

-- CREATE: Створення таблиці
CREATE TABLE Students (
    StudentId INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50)
);

-- ALTER: Додавання стовпця
ALTER TABLE Students
ADD Email NVARCHAR(100);

-- ALTER: Зміна типу даних
ALTER TABLE Students
ALTER COLUMN Email NVARCHAR(150);

-- DROP: Видалення таблиці
DROP TABLE OldData;

-- TRUNCATE: Очищення таблиці (залишає структуру)
TRUNCATE TABLE TempData;
DROP видаляє об'єкт НАЗАВЖДИ! Будьте обережні.

DML (Data Manipulation Language) — Мова керування даними

Призначення: Робота з даними всередині таблиць.

Loading diagram...
graph LR
    DML[DML] --> SELECT[SELECT<br/>Вибірка даних]
    DML --> INSERT[INSERT<br/>Вставка даних]
    DML --> UPDATE[UPDATE<br/>Оновлення даних]
    DML --> DELETE[DELETE<br/>Видалення даних]

    style DML fill:#3b82f6,color:#fff
    style SELECT fill:#10b981,color:#fff
    style INSERT fill:#8b5cf6,color:#fff
    style UPDATE fill:#f59e0b,color:#333
    style DELETE fill:#ef4444,color:#fff

Приклади:

-- SELECT: Вибірка даних
SELECT FirstName, LastName, Grade
FROM Students
WHERE Grade >= 90;

-- INSERT: Вставка нового запису
INSERT INTO Students (FirstName, LastName, Grade)
VALUES ('Іван', 'Петренко', 95);

-- UPDATE: Оновлення існуючих записів
UPDATE Students
SET Grade = 100
WHERE StudentId = 1;

-- DELETE: Видалення записів
DELETE FROM Students
WHERE Grade < 60;
SELECT — найчастіше використовується оператор у SQL (до 90% всіх запитів у production БД).

DCL (Data Control Language) — Мова керування доступом

Призначення: Керування правами доступу до об'єктів БД.

Loading diagram...
graph LR
    DCL[DCL] --> GRANT[GRANT<br/>Надання прав]
    DCL --> DENY[DENY<br/>Заборона прав]
    DCL --> REVOKE[REVOKE<br/>Скасування прав]

    style DCL fill:#f59e0b,color:#333
    style GRANT fill:#10b981,color:#fff
    style DENY fill:#ef4444,color:#fff
    style REVOKE fill:#64748b,color:#fff

Приклади:

-- GRANT: Надати права на SELECT
GRANT SELECT ON Students TO [UserName];

-- GRANT: Надати повні права
GRANT ALL PRIVILEGES ON DATABASE::University TO [AdminUser];

-- DENY: Явна заборона (перекриває GRANT!)
DENY DELETE ON Students TO [UserName];

-- REVOKE: Забрати надані права
REVOKE SELECT ON Students FROM [UserName];
DENY сильніше за GRANT: Якщо користувач має GRANT через роль, але DENY особисто — він НЕ зможе виконати операцію.

Базовий синтаксис SELECT

Хоча детальний розбір SQL запитів буде в наступних темах, розглянемо базову структуру:

SELECT <стовпці>
FROM <таблиця>
WHERE <умови>
ORDER BY <сортування>;

Приклад:

SELECT LastName, FirstName, BirthDate
FROM Students
WHERE MONTH(BirthDate) = 11
ORDER BY LastName ASC;

Анатомія запиту:

  • SELECT LastName, FirstName, BirthDate — які стовпці вибрати
  • FROM Students — з якої таблиці
  • WHERE MONTH(BirthDate) = 11 — умова фільтрації (листопад)
  • ORDER BY LastName ASC — сортування за прізвищем (A→Z)

Практичні завдання

Завдання 1: Теоретичне розуміння

Поясніть різницю між:

  1. DDL та DML
  2. DELETE та TRUNCATE
  3. GRANT та DENY
💡 Розв'язок

1. DDL vs DML:

  • DDL змінює структуру (CREATE TABLE)
  • DML змінює дані (INSERT, UPDATE)

2. DELETE vs TRUNCATE:

  • DELETE — DML, видаляє рядки (можна з WHERE), можна відкотити
  • TRUNCATE — DDL, очищує всю таблицю, неможливо відкотити, швидше

3. GRANT vs DENY:

  • GRANT надає права
  • DENY явно забороняє (має пріоритет над GRANT)

Завдання 2: Визначення категорії

До якої категорії (DDL/DML/DCL) належать ці команди?

1. CREATE INDEX IX_Students_Email ON Students(Email);
2. UPDATE Products SET Price = Price * 1.1;
3. REVOKE INSERT ON Orders FROM [User];
4. ALTER TABLE Customers ADD Phone NVARCHAR(20);
5. SELECT * FROM Employees WHERE Salary > 50000;
💡 Розв'язок
  1. DDL (CREATE INDEX — структура)
  2. DML (UPDATE — дані)
  3. DCL (REVOKE — права)
  4. DDL (ALTER — структура)
  5. DML (SELECT — дані)

Резюме

Ключові висновки:
  1. SQL — декларативна мова: Ви описуєте ЧО потрібно, не ЯК
  2. Історія: SQL-86 → SQL-92 (JOIN) → SQL:1999 (triggers) → SQL:2016 (JSON)
  3. Діалекти: T-SQL (MS SQL Server), PL/SQL (Oracle), кожен має особливості
  4. T-SQL розширення: Змінні, IF/WHILE, функції, процедури
  5. Три категорії:
    • DDL: структура (CREATE, ALTER, DROP)
    • DML: дані (SELECT, INSERT, UPDATE, DELETE)
    • DCL: права (GRANT, DENY, REVOKE)
Important: У цій темі ми НЕ розглядали детальний синтаксис SELECT, JOIN, підзапити тощо. Це буде в наступних матеріалах курсу!

Попередні теми:

Copyright © 2026