Синтаксис SQL

Коментар. Всякий коментар – це необов'язковий текст, який друкується в окремому рядку програми, щоб пояснити цю програму. Коментар повинен починатися з двох дефісів. Коли СУБД знаходить їх, вона ігнорує те, що стоїть за ними, тобто сам коментар. Коментарі займають цілий рядок.

Команда SQL. Будь-яка команда SQL – це допустима комбінація лексем, якій передує яке-небудь ключове слово. Тут під лексемою розуміється основна неподільна частинка мови SQL в тому значенні, що граматично ніякої лексеми не можна розділити на більш дрібні складові елементи. Лексемами є ключові слова, ідентифікатори, оператори, літерали і інші символи.

Речення. Будь-яка команда SQL включає не менш одну пропозицію. В найзагальнішому випадку всяка пропозиція SQL – це фрагмент команди SQL, який починається з якого-небудь ключового слова, є обов’язковим або необов’язковим і повинен бути записаний в певному порядку. В даному прикладі ми маємо чотири пропозиції, а саме: SELECT, FROM, WHERE, ОRDER.

Ключові слова. Довільне ключове слово, іноді зване зарезервованим, – це таке слово, яке в мові SQL має певне значення і застосування якого в SQL строго регламентовано. Слід мати на увазі, що використовування будь-якого ключового слова зовні контексту (наприклад, як ідентифікатора) буде вважатися помилкою. В таб. 1.1 перераховані ключові слова SQL, а в таб. 1.2 – потенційні слова SQL (які поки не є офіційно зарезервованими, але одного разу можуть ними стати).

Ідентифікатори. Довільний ідентифікатор – це таке слово, яке розробник бази даних застосовує для того, щоб іменувати об’єкти довільної бази даних, у тому числі таблиці, стовпці, псевдо імена (псевдоніми) і представлення. Ідентифікатор не може бути ключовим словом, і його довжина не може перевищувати 128 знаків. Знаком в SQL може бути будь-який символ алфавіту, включаючи символи латинського алфавіту і латинські ідеограми. В нашому прикладі іменами, зокрема, є au_fname, au_lname, authors і state.

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

Приклад команди SQL:

--Retrieve authors from New York

SELECT au_fname, au_lname

FROM authors

WHERE state = 'Lviv'

ORDER BY au_lname;

Таблиця 1.1. Ключові слова SQL

ABSOLUTE COMMIT ELSE INSERT Null
ACTION CONNECT END INT ONLY
ADD CONNECTION END-EXEC INTEGER OPEN
ALL CONSTRAINT ESCAPE INTERSECT OPTION
ALLOCATE CONSTRAINTS EXCEPT INTERVAL OR
ALTER CONTINUE EXCEPTION INTO ORDER
AND CONVERT EXEC IS OUTER
ANY CORRESPONDING EXECUTE ISOLATION OUTPUT
ARE COUNT EXISTS JOIN OVERLAPS
AS CREATE EXTERNAL KEY PAD
ASC CROSS EXTRACT LANGUAGE PARTIAL
ASSERTION CURRENT FALSE LAST POSITION
AT CURRENT DATE FETCH LEADING PRECISION
AUTHORIZATION CURRENT TIME FIRST LEFT PREPARE
AVG CURRENTJTIMESTAMP FLOAT LEVEL PRESERVE
BEGIN CURRENTJJSER FOR LIKE PRIMARY
BETWEEN CURSOR FOREIGN LOCAL PRIOR
BIT DATE FOUND LOWER PRIVILEGES
BIT LENGTH DAY FROM MATCH PROCEDURE
BOTH DEALLOCATE FULL MAX PUBLIC
  DEC GET MIN READ
CASCADE DECIMAL GLOBAL MINUTE REAL
CASCADED DECLARE GO MODULE REFERENCES
CASE DEFAULT GOTO MONTH RELATIVE
CAST DEFERRABLE GRANT NAMES RESTRICT
CATALOG DEFERRED GROUP NATIONAL REVOKE
CHAR DELETE HAVING NATURAL RIGHT
CHARACTER DESC HOUR NCHAR ROLLBACK
CHARJ.ENGTH DESCRIBE IDENTITY NEXT ROWS
CHARACTER LENGTH DESCRIPTOR IMMEDIATE NO SCHEMA
CHECK DIAGNOSTICS IN NOT SCROLL
CLOSE DISCONNECT INDICATOR NULL SECOND
COALESCE DISTINCT INITIALLY NULLIF SECTION
COLLATE DOMAIN INNER NUMERIC SELECT
COLLATION DOUBLE INPUT OCTET LENGTH SESSION
COLUMN DROP INSENSITIVE   SESSIONJJSER
SET SUM TRAILING UPPER WHENEVER
SIZE SYSTEM USER TRANSACTION USAGE WHERE
SMALLINT TABLE TRANSLATE USER WITH
SOME TEMPORARY TRANSLATION USING WORK
SPACE THEN TRIM VALUE WRITE
SQL TIME TRUE VALUES YEAR
SQLCODE TIMESTAMP UNION VARCHAR ZONE
SQLERROR TIMEZONEJHOUR UNIQUE VARYING  
SQLSTATE TIMEZONE MINUTE UNKNOWN VIEW  
SUBSTRING TO UPDATE WHEN  
  Таблиця 1.2. Потенційні ключові слова SQL
AFTER EQUALS OLD RETURN TEST
ALIAS GENERAL OPERATION RETURNS THERE
ASYNC IF OPERATORS ROLE TRIGGER
BEFORE IGNORE OTHERS ROUTINE TYPE
BOOLEAN LEAVE PARAMETERS ROW UNDER
BREADTH LESS PENDANT SAVEPOINT VARIABLE
COMPLETION LIMIT PREORDER SEARCH VIRTUAL
CALL LOOP PRIVATE SENSITIVE VISIBLE
CYCLE MODIFY PROTECTED SEQUENCE WAIT
DATA NEW RECURSIVE SIGNAL WHILE
DEPTH NONE REF SIMILAR WITHOUT
DICTIONARY OBJECT REFERENCING SQLEXCEPTION  
EACH OFF REPLACE SQLWARNING  
ELSEIF OID RESIGNAL STRUCTURE  
                 

SQL - це мова з вільним форматом речень. Будь-яка його команда може:

• бути надрукована як у верхньому, так і в нижньому регістрі (наприклад, ключові слова SELECT і select вважаються ідентичними);

• продовжуватися на наступному рядку скільки завгодно довго за умови, що ви не будете розбивати на дві частини слова, лексеми і рядки в лапках (тобто рядкові константи);

• бути надрукована на одному рядку з будь-якими іншими командами;

• починатися на будь-якій позиції горизонтальної розмітки екрану/листа.

Проте вам слід дотримуватися певного стилю написання команд SQL, наприклад використовувати верхній регістр для ключових слів і нижній регістр для ідентифікаторів. Крім того, можна починати кожне речення з нового рядка з відповідним відступом. Питання стилю не можна ігнорувати, тому що його відсутність приводить до наступних помилок:

  • неправильна орфографія при написанні якого-небудь ідентифікатора або команди;
  • відсутність завершальної крапки з комою;
  • невірний порядок розміщення речень в тілі команди;
  • відсутність лапок у стрічкових констант (літералів) і констант дати і часу;
  • наявність лапок у цифровых констант;
  • невірне сумісне застосування імен таблиць і імен;

В літературі по SQL ввідне ключове слово будь-якої команди часто називають дієсловом, тому що воно явно вказує на ту дію, яку необхідно вчинити.

Оскільки вживати ключові слова як ідентифікатори заборонено, ви цілком можете вбудовувати будь-які ключові слова всередину ідентифікаторів як складову частину слова. Наприклад: group і max не можна використовувати як ідентифікатор, а ідентифікатор groups і max_price цілком допустимі.

select au fname,

AU_LNAME

FROM

authors WhErE state = 'NY' order

bY AU_lname;

Команда, приведена в прикладі еквівалентна попередній команді.

Застосовувати пропуски в іменах бази даних не рекомендується. Але якщо дуже хочеться, можна вставити пропуски в будь-який ідентифікатор, тоді його треба буде укласти в одинарні лапки, от так:' last name'. Проте підкреслимо ще раз: краще застосовувати не пропуски, а знак підкреслення (last name) або ідентифікатор, набраний заголовними і прописними буквами (LastName).

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

Комерційні СУБД накладають власні, обмеження на довжину ідентифікатора і на алфавіт. Тому має сенс проаналізувати документацію по вашій СУБД, використовуючи ключі пошуку „ідентифікатори” і „імена”.

Більше того, різні СУБД мають свої власні додаткові ключові слова, які, очевидно, не можуть бути ідентифікаторами в „рідній” СУБД (але цілком можуть бути ідентифікаторами по канонах SQL і, можливо, в інших СУБД). От чому непогано було б організувати пошук в документації по вашій СУБД з використанням ключів пошуку „ключові слова” і „зарезервовані слова”.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: