Коментар. Всякий коментар – це необов'язковий текст, який друкується в окремому рядку програми, щоб пояснити цю програму. Коментар повинен починатися з двох дефісів. Коли СУБД знаходить їх, вона ігнорує те, що стоїть за ними, тобто сам коментар. Коментарі займають цілий рядок.
Команда 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 і, можливо, в інших СУБД). От чому непогано було б організувати пошук в документації по вашій СУБД з використанням ключів пошуку „ключові слова” і „зарезервовані слова”.