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






