Синтаксис SQL

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Синтаксис мови програмування SQL описується комітетом ISO/IEC SC 32 як частина стандарту ISO/IEC 9075. Цей стандарт не знаходиться у вільному доступі. Незважаючи на існування стандарту, код SQL неможливо переносити між різними системами баз даних без змін.

Елементи мови[ред. | ред. код]

Мова SQL поділяється на кілька видів елементів:

  • Пункти (диз'юнкти) (англ. Clauses), що є складовими частинами інструкцій та запитів. (Іноді вони не обов'язкові.)[1]
  • Вирази (англ. Expressions), які можуть генерувати скалярні значення, або таблиці з стовпчиками і рядками даних
  • Предикати (англ. Predicates), які описують умови, результатом яких є значення тризначної логіки SQL (true/false/unknown) або Булеві значення істинності і які використовуються для обмеження ефекту інструкцій та запитів, або для зміни потоку виконання програми.
  • Запити (англ. Queries), які отримують дані на основі заданих критеріїв.
  • Інструкції (англ. Statements), які чинять дію на схему даних чи самі дані, або контролюють транзакції, потік виконання програми, з'єднання, сесії, та виконують діагностику.
    • Інструкції SQL також включають крапку з комою (";") для позначення кінця інструкції. Хоча вона не є обов'язковою на кожній платформі, вона описується як стандартна частина граматики SQL.
  • Незначимі пропуски загалом ігноруються в інструкціях і запитах SQL, дозволяючи форматувати код SQL з метою покращення читабельності.

Оператори[ред. | ред. код]

Оператор Опис Приклад
= дорівнює Author = 'Alcott'
<> не дорівнює (багато СКБД приймають крім <> також !=) Dept <> 'Sales'
> більше ніж Hire_Date > '2012-01-31'
< менше ніж Bonus < 50000.00
>= більше або дорівнює Dependents >= 2
<= менше або дорівнює Rate <= 0.05
BETWEEN між двома величинами включно Cost BETWEEN 100.00 AND 500.00
LIKE співставлення тексту з шаблоном First_Name LIKE 'Will%'
IN одне з багатьох можливих значень DeptCode IN (101, 103, 209)
IS or IS NOT Порівняння з null (відсутністю даних) Address IS NOT NULL
IS [NOT] TRUE or IS [NOT] FALSE булева перевірка істинності PaidVacation IS TRUE
IS NOT DISTINCT FROM значення рівні або обоє null (обоє відсутні) Debt IS NOT DISTINCT FROM - Receivables
AS використовується для зміни назви колонки в результаті запиту SELECT employee AS "department1"

Іноді пропонувались та розроблялись інші оператори, такі як Skyline operator[en] (для знаходження лише записів які не "гірші" за будь-які інші)s


SQL має вираз case/when/then/else/end, який був впроваджений в SQL-92. В найзагальнішій формі, яка називається стандартом SQL "searched case":

CASE WHEN n > 0
          THEN 'positive'
     WHEN n < 0
          THEN 'negative'
     ELSE 'zero'
END

SQL перевіряє умови WHEN в порядку в якому вони з'являються в коді. Якщо в коді не задано виразу ELSE, SQL за замовчуванням припускає ELSE NULL. Скорочений синтаксис, названий в стандарті SQL простим case (англ. "simple case"), схожий на інструкцію перемикач в інших мовах:

CASE n WHEN 1
            THEN 'One'
       WHEN 2
            THEN 'Two'
       ELSE 'I cannot count that high'
END

Такий синтаксис використовує неявні перевірки рівності, зі звичними пересторогами щодо порівняння з NULL.

Є два скорочення для окремих випадків CASE: COALESCE та NULLIF.

Вираз COALESCE повертає значення першого зліва операнда який не є NULL, або NULL якщо всі операнди є NULL.

COALESCE(x1,x2)

еквівалентно до:

CASE WHEN x1 IS NOT NULL THEN x1
     ELSE x2
END

Вираз NULLIF має два операнди і повертає NULL якщо операнди мають однакове значення, інакше повертає значення першого.

NULLIF(x1, x2)

еквівалентно до:

CASE WHEN x1 = x2 THEN NULL ELSE x1 END

Запити[ред. | ред. код]

Запит - найчастіше виконувана операція в SQL. Для здійснення запитів використовується декларативна інструкція SELECT. SELECT отримує дані з однієї чи більше таблиць, або виразів. Стандартна інструкція SELECT не здійснює постійних змін бази даних. Деякі нестандартні реалізації SELECT можуть мати постійні ефекти, такі як варіант SELECT INTO що зустрічається в деяких базах даних.[2]

Запити дозволяють користувачу описати бажані дані, залишаючи базі даних створення плану запиту, його оптимізацію, і виконання фізичних операцій необхідних для отримання бажаних результатів.

До запиту входить список колонок, які повинні включатись в кінцевий результат, зазвичай одразу після ключового слова SELECT. Можна використати символ "зірочка" ("*"), щоб описати, що запит повинен повертати всі колонки всіх таблиць з якими працює. SELECT - найкладніша інструкція SQL, з необов'язковими ключовими словами і пунктами до яких входять:

  • Пункт FROM, який задає таблиці з яких треба отримати дані. FROM може включати необов'язкові підпункти JOIN щоб задати правила для з'єднаних таблиць.
  • Пункт WHERE що містить предикат який обмежує рядки що повертаються запитом. WHERE видаляє всі рядки з результуючої множини, де предикат порівняння не дорівнює True.
  • Пункт GROUP BY відображає рядки що містять спільні значення в меншу множину рядків. GROUP BY часто використовують в поєднанні з функціями агрегації SQL, або для видалення повторюватих рядків з результуючої множини. Пункт WHERE застосовується до GROUP BY.
  • Пункт HAVING включає предикат що використовується для фільтрування рядків отриманих в результаті обчислення GROUP BY. Через те що він працює з результатами GROUP BY, функції агрегації можуть використовуватись в предикаті пункту HAVING.
  • Пункт ORDER BY визначає які колонки використати для сортування даних результату, і в якому порядку здійснити сортування (зростаючому чи спадаючому). Без пункту ORDER BY, порядок рядків що повертається запитом SQL не визначений.
  • Ключове слово DISTINCT [3] усуває повторення даних.[4]

Зноски[ред. | ред. код]

  1. ANSI/ISO/IEC International Standard (IS).
  2. Transact-SQL Reference. SQL Server Language Reference. SQL Server 2005 Books Online. Microsoft. 15 вересня 2007. Процитовано 17 червня 2007.
  3. SAS 9.4 SQL Procedure User's Guide. SAS Institute. с. 248. ISBN 9781612905686. Процитовано 21 жовтня 2015. Although the UNIQUE argument is identical to DISTINCT, it is not an ANSI standard.
  4. Leon, Alexis; Leon, Mathews (1999). Eliminating duplicates - SELECT using DISTINCT. SQL: A Complete Reference. New Delhi: Tata McGraw-Hill Education. с. 143. ISBN 9780074637081. Процитовано 21 жовтня 2015. [...] the keyword DISTINCT [...] eliminates the duplicates from the result set.