Синтаксис SQL
Синтаксис SQL играет ключевую роль в работе с базами данных. В статье рассматриваются основные принципы создания запросов с использованием имен таблиц и их псевдонимов, что позволяет значительно упростить структуру SQL-запросов.
Вы узнаете, как правильно использовать алиасы для улучшения читаемости запросов и ускорения работы с данными. Мы подробно объясним, как правильно составлять запросы, чтобы они были эффективными и понятными.
Ключевые слова SQL
Ключевые слова (SELECT, GRANT, DELETE или CREATE) прописаны в синтаксисе SQL и имеют в этом языке предопределенное значение. Можно использовать ключевые слова в верхнем или нижнем регистре. Следующие три запроса равнозначны:
SELECT * FROM EMPLOYEES;
Select * FROM EMPLOYEES;
select * FROM EMPLOYEES;
В некоторых случаях ключевые слова могут быть сокращены. Например, ключевое слово DESCRIBE может быть использовано либо в форме DESC, либо DESCRIBE. Если мы выполним следующие запросы, то в обоих случаях получим структуру таблицы сотрудников.
DESCRIBE EMPLOYEES;
DESC EMPLOYEES;
Идентификаторы
Идентификаторы – это имена заданные разработчиками для структурных элементов базы данных: таблицы, столбцы, псевдонимы, индексы, представления. В синтаксисе последнего SQL запроса 'EMPLOYEES' - это идентификатор, а 'SELECT' - ключевое слово. Правила для создания идентификаторов указываются в спецификации поставщика. Рассмотрим следующую таблицу:
| Правила | Платформа | Описание |
| Идентификатор должен содержать до | SQL2003 | 128 символов. |
| DB2 | 128 символов, в зависимости от платформы. | |
| MySQL | 64 символа. | |
| Oracle | 30 байт; имена базы данных до 8 байт. | |
| PostgreSQL | 31 символ. | |
| Идентификатор может содержать | SQL2003 | Любые цифры, символы и нижнее подчеркивание. |
| DB2 | Любые цифры, символы в верхнем регистре или символ нижнего подчеркивания. | |
| MySQL | Любые цифры или символы. | |
| Oracle | Любые цифры, символы и нижнее подчеркивание (_), знак фунта стерлингов (#) или доллара ($). | |
| PostgreSQL | Любые цифры, символы и нижнее подчеркивание (_). | |
| Первый символ должен быть | SQL2003 | Буквой. |
| DB2 | Буквой. | |
| MySQL | Буквой или цифрой (но не должен содержать только цифры). | |
| Oracle | Буквой. | |
| PostgreSQL | Буквой или нижним подчеркиванием (_). | |
| Идентификатор не может содержать | SQL2003 | Специальные символы или пробелы. |
| DB2 | Специальные символы или пробелы. | |
| MySQL | Точку (.), слэш (/) или ASCII(0) и ASCII(255). Кавычки (') и двойные кавычки (") допускаются только в ссылающихся идентификаторах. | |
| Oracle | Пробелы, двойные кавычки (") или специальные символы. | |
| PostgreSQL | Двойные кавычки ("). | |
| В синтаксисе SQL запросов символ идентификатора | SQL2003 | Двойные кавычки ("). |
| DB2 | Двойные кавычки ("). | |
| MySQL | Кавычки ( ' ) или двойные кавычки (" ) в режиме совместимости с ANSI. | |
| Oracle | Двойные кавычки ("). | |
| PostgreSQL | Двойные кавычки ("). | |
| Идентификатор может быть зарезервирован | SQL2003 | Нет, кроме ссылающихся идентификаторов. |
| DB2 | Да. | |
| MySQL | Нет, кроме ссылающихся идентификаторов. | |
| Oracle | Нет, кроме ссылающихся идентификаторов. | |
| PostgreSQL | Нет, кроме ссылающихся идентификаторов. | |
| Адресация к схеме | SQL2003 | Каталог.схема.объект. |
| DB2 | Схема.объект. | |
| MySQL | База_данных.объект. | |
| Oracle | Схема.объект. | |
| PostgreSQL | База_данных.схема.объект. | |
| Идентификатор должен быть уникальным | SQL2003 | Да. |
| DB2 | Да. | |
| MySQL | Да. | |
| Oracle | Да. | |
| PostgreSQL | Да. |
Конвенции имен
Стандарт SQL не содержит никаких точных указаний по наименованиям, поэтому нужно следовать следующим основным принципам (в том числе и в синтаксисе SQL запросов UPDATE):
- Выбирайте имя, которое содержит смысл и имеет описательный характер. Например, таблица сотрудников не должна называться emp, а столбец имени сотрудника должен называться first_name, а не fname, хотя и «emp », и «fname » это допустимые идентификаторы;
- Используйте для всех объектов в базе данных SQL либо заглавные буквы, либо строчные, поскольку некоторые серверы баз данных чувствительны к регистру.
Литералы SQL
Термин литералы относится к фиксированным значениям данных. SQL распознает четыре типа литералов: числовые значения, строки символов, дата или время, логическое значение. Например, 100, -120, 544, 03, -458, 25, 3e2, 5E-2 являются действительными числовыми литералами. 'США', '2000', 'SQL Синтаксис', '1 января 1981' являются действительными строками символов (должны быть заключены в одинарные кавычки (' ')). Логические литералы и литералы даты/времени выглядят следующим образом: TRUE и 'JAN-28-1976 21:12:40:00 '.
Операторы
Операторы работают с отдельными элементами данных и возвращают результат. Операторы используются в различных операциях SQL, таких как SELECT, INSERT, UPDATE или DELETE. А также при создании различных объектов базы данных, таких как функции, представления, триггеры и хранимые процедуры. MS SQL синтаксис запросов поддерживает различные типы операторов, хотя не все СУБД поддерживают все операторы.
Смотрите таблицу ниже:
| Операторы | Работают во |
| Арифметические операторы | Всех базах данных. |
| Операторы присвоения | Всех базах данных. |
| Побитовые операторы | Microsoft SQL Server. |
| Операторы сравнения | Всех базах данных. |
| Логические операторы | DB2, Oracle, SQL Server и PostgreSQL. |
| Унарные операторы | DB2, Oracle и SQL Server. |
Приоритетность операторов
Приоритетность - это порядок, в котором база данных оценивает различные операторы в одном выражении. В синтаксисе SQL запросов при выполнении выражения, содержащего несколько операторов (например, +, -, /), сначала выполняются операторы с высшей приоритетностью, а затем с более низкой. При оценке операторов с одинаковой приоритетностью операторы выполняются в порядке их расстановки в выражении слева направо.
Если в выражении есть круглые скобки, то операторы в них вычисляется в первую очередь, а остальные части выражения, которые находятся вне скобок, вычисляются после этого. В следующей таблице перечислены уровни приоритетности операторов SQL от высокого к низкому.
| Приоритетность операторов |
| ( ) (выполняются в первую очередь). |
| +, -, ~ (унарные операторы). |
| *, /, % (математические операторы). |
| +, - (арифметические операторы). |
| =, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения). |
| I^ (Побитовый OR), & (Побитовый AND), | (Побитовый OR). |
| NOT. |
| AND. |
| ALL, ANY, BETWEEN, IN, LIKE, OR, SOME. |
| = (присвоение переменных). |
Следующие выражения в запросе MySQL возвращают разные результаты:
SELECT 12 * 2 + 24;
Результат
12 * 2 + 24
48
Приоритетность операторов

SELECT 12 * (2 + 24)
Результат
12 * (2 + 24)
312
Приоритетность операторов

Комментарии SQL
Комментарии в синтаксисе SQL запросов - это необязательный текст, который описывает, что делает программа и почему код был изменен. Компилятор всегда игнорирует комментарии. Комментарий вводится через двойное тире и пробел:
-- Это комментарий SQL
В качестве альтернативы, можно использовать блок комментариев C-стиля:
/ * Это первая строка комментария
Это вторая строка комментария * /.Пробелы
Пробелы, как правило, игнорируются в операторах SQL, что позволяет проще форматировать код для удобства чтения.
На следующей диаграмме приведены элементы синтаксиса SQL запросов, которые составляют одиночный оператор:

Список ключевых слов SQL:
| ABSOLUTE | ACTION | ADD | ADMIN |
| AFTER | AGGREGATE | ALIAS | ALL |
| ALLOCATE | ALTER | AND | ANY |
| ARE | ARRAY | AS | ASC |
| ASSERTION | ASSERTION | AT | ATOMIC |
| AUTHORIZATION | BEFORE | BEGIN | BIGINT |
| BINARY | BIT | BLOB | BOOLEAN |
| BOTH | BREADTH | BY | CALL |
| CASCADE | CASCADED | CASE | CAST |
| CATALOG | CHAR | CHARACTER | CHECK |
| CLASS | CLOB | CLOSE | COLLATE |
| COLLATION | COLLECT | COLUMN | COMMIT |
| COMPLETION | CONDITION | CONNECT | CONNECTION |
| CONSTRAINT | CONSTRAINTS | CONSTRUCTOR | CONTAINS |
| CONTINUE | CORRESPONDING | CREATE | CROSS |
| CUBE | CURRENT | CURRENT_DATE | CURRENT_PATH |
| CURRENT_ROLE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER |
| CURSOR | CYCLE | DATA | DATALINK |
| DATE | DAY | DEALLOCATE | DEC |
| DECIMAL | DECLARE | DEFAULT | DEFERRABLE |
| DELETE | DEPTH | DEREF | DESC |
| DESCRIPTOR | DESTRUCTOR | DIAGNOSTICS | DICTIONARY |
| DISCONNECT | DO | DOMAIN | DOUBLE |
| DROP | ELEMENT | END-EXEC | EQUALS |
| ESCAPE | EXCEPT | EXCEPTION | EXECUTE |
| EXIT | EXPAND | EXPANDING | FALSE |
| FIRST | FLOAT | FOR | FOREIGN |
| FREE | FROM | FUNCTION | FUSION |
| GENERAL | GET | GLOBAL | GOTO |
| GROUP | GROUPING | HANDLER | HASH |
| HOUR | IDENTITY | IF | IGNORE |
| IMMEDIATE | IN | INDICATOR | INITIALIZE |
| INITIALLY | INNER | INOUT | INPUT |
| INSERT | INT | INTEGER | INTERSECT |
| INTERSECTION | INTERVAL | INTO | IS |
| ISOLATION | ITERATE | JOIN | KEY |
| LANGUAGE | LARGE | LAST | LATERAL |
| LEADING | LEAVE | LEFT | LESS |
| LEVEL | LIKE | LIMIT | LOCAL |
| LOCALTIME | LOCALTIMESTAMP | LOCATOR | LOOP |
| MATCH | MEMBER | MEETS | MERGE |
| MINUTE | MODIFIES | MODIFY | MODULE |
| MONTH | MULTISET | NAMES | NATIONAL |
| NATURAL | NCHAR | NCLOB | NEW |
| NEXT | NO | NONE | NORMALIZE |
| NOT | NULL | NUMERIC | OBJECT |
| OF | OFF | OLD | ON |
| ONLY | OPEN | OPERATION | OPTION |
| OR | ORDER | ORDINALITY | OUT |
| OUTER | OUTPUT | PAD | PARAMETER |
| PARAMETERS | PARTIAL | PATH | PERIOD |
| POSTFIX | PRECEDES | PRECISION | PREFIX |
| PREORDER | PREPARE | PRESERVE | PRIMARY |
| PRIOR | PRIVILEGES | PROCEDURE | PUBLIC |
| READ | READS | REAL | RECURSIVE |
| REDO | REF | REFERENCES | REFERENCING |
| RELATIVE | REPEAT | RESIGNAL | RESTRICT |
| RESULT | RETURN | RETURNS | REVOKE |
| RIGHT | ROLE | ROLLBACK | ROLLUP |
| ROUTINE | ROW | ROWS | SAVEPOINT |
| SCHEMA | SCROLL | SEARCH | SECOND |
| SECTION | SELECT | SEQUENCE | SESSION |
| SESSION_USER | SET | SETS | SIGNAL |
| SIZE | SMALLINT | SPECIFIC | SPECIFICTYPE |
| SQL | SQLEXCEPTION | SQLSTATE | SQLWARNING |
| START | STATE | STATIC | STRUCTURE |
| SUBMULTISET | SUCCEEDS | SUM | SYSTEM_USER |
| TABLE | TABLESAMPLE | TEMPORARY | TERMINATE |
| THAN | THEN | TIME | TIMESTAMP |
| TIMEZONE_HOUR | TIMEZONE_MINUTE | TO | TRAILING |
| TRANSACTION | TRANSLATION | TREAT | TRIGGER |
| TRUE | UESCAPE | UNDER | UNDO |
| UNION | UNIQUE | UNKNOWN | UNTIL |
| UPDATE | USAGE | USER | USING |
| VALUE | VALUES | VARCHAR | VARIABLE |
| VARYING | VIEW | WHEN | WHENEVER |
| WHERE | WHILE | WITH | WRITE |
| YEAR | ZONE |
Комментарии