Основные правила написания SQL-операторов
В SQL-операторах необходимо придерживаться точных синтаксических и структурных правил, правильно использовать ключевые слова, а также идентификаторы, операторы и константы. Символы, используемые в различных частях SQL-оператора, могут зависеть от реализации СУБД и определяются в основном множеством символов, которое SQL-сервер использует по умолчанию.
SQL-операторы часто называют инструкциями. Инструкция – это набор ключевых слов, связанных друг с другом и используемых как единое целое в командах SQL. Напомним, что в составе SQL условно выделяют следующие группы инструкций:
- DDL (Data Definition Language) – инструкции языка описания данных;
- DML (Data Manipulation Language) – инструкции языка манипулирования данными.
К общим и наиболее распространенным инструкциям SQL относятся:
- инструкция_авторасширения (AUTOEXTEND), которая указывает, разрешено ли для файла увеличение его размера;
- инструкция_ограничения_столбца (таблицы) (CONSTRAINT), которая задаёт ограничение целостности столбца (таблицы);
- инструкция_состояния_ограничения (DEFERRABLE), которая позволяет избирательно применять и не применять ограничение целостности;
- инструкция_атрибутов_индекса, которая включает инструкцию_физических_атрибутов и инструкцию_хранения и задает физические и логические характеристики индекса;
- инструкция_параметров_LOB, которая опеределяет параметры хранения сегментов данных больших размеров;
- инструкция_хранения_LOB (LOB), которая определяет, каким образом сегменты данных LOB будут храниться в таблице, разделе или подразделе;
- инструкция_раздела (partition by range), которая задает параметры секционирования;
- инструкция_физических_атрибутов, которая определяет характеристики объектов схемы, влияющие на использование пространства в блоке;
- инструкция_хранения STORAGE (), которая определяет метод выделения места в табличном пространстве Oracle для отдельного объекта.
Каждая инструкция SQL начинается с ключевого слова, описывающего действие, выполняемое инструкцией (например, create, insert, delete, commit), после чего следует одно или несколько предложений. Предложение описывает данные, с которыми работает инструкция, или содержит уточняющую информацию о действии, выполняемом инструкцией. Каждое предложение также начинается с ключевого слова, например, такого как WHERE, FROM, into, having. Одни предложения в инструкции являются обязательными, другие - нет. Конкретная структура и содержимое предложения могут изменяться. Многие предложения содержат имена таблиц или столбцов; некоторые из них могут содержать дополнительные ключевые слова, константы и выражения.
В соответствии со стандартом ключевые слова нельзя использовать для именования объектов базы данных, таких как таблицы или столбцы.
При написании SQL-операторов следует учитывать следующее:
1. SQL-операторы не чувствительны к регистру за исключением символьных данных в полях таблиц;
2. запись SQL-оператора имеет свободный формат, однако существует ряд общепринятых рекомендаций, которые облегчают читабельность SQL программ:
- ключевые (зарезервированные) слова следует писать прописными буквами;
- слова, определяемые пользователем, следует писать строчными буквами;
- ключевые слова в пределах одного SQL оператора следует писать с новой строки и выравнивать по одной и той же позиции. При использовании вложенных операторов SELECT их следует сдвигать внутрь предложения на позицию второго слова в предыдущей строке;
- если фраза SQL-оператора превышает длину строки, то ее продолжение следует смещать относительно начала следующей строки;
3. в описании синтаксиса SQL-операторов используются следующие специальные символы:
- вертикальная черта ( | ), которая указывает на необходимость выбора одного из нескольких значений (например, a | b |c );
- фигурные скобки ({}), которые указывают, что заключенный в них элемент является обязательным;
- квадратные скобки ([ ]), которые указывают, что заключенный в них элемент является необязательным;
- многоточие (...), которое используется для указания необязательной возможности повторения указанной конструкции от нуля до нескольких раз (например, запись {a|b}, [c …] означает, что за а или b может следовать от нуля до нескольких повторений c, разделенных запятыми.
- звездочка (*) для обозначения "все" - употребляется в обычном для программирования смысле, т.е. "все случаи, удовлетворяющие определению";
- точка с запятой (;) – завершающий элемент предложений SQL;
- запятая (,) – используется для разделения элементов списков;
- пробелы ( ) – могут вводиться для повышения наглядности между любыми синтаксическими конструкциями предложений SQL.
Имена (идентификаторы) таблиц и столбцов. Имена используются в инструкциях SQL для указания, над каким объектом базы данных инструкция должна выполнить действие. Основными именованными объектами в реляционной базе данных являются таблицы, столбцы и пользователи, схемы, ограничения, домены и ряд других объектов.
Стандарт SQL задает набор символов, который используется по умолчанию, – он включает строчные и прописные буквы латинского алфавита (A-Z, a-z), цифры (0-9) и символ подчеркивания (_). На формат идентификатора накладываются следующие ограничения:
- идентификатор может иметь длину до 128 символов;
- идентификатор должен начинаться с буквы;
- идентификатор не может содержать пробелы.
На практике поддержка имен в различных СУБД реализована по-разному, поэтому для повышения переносимости лучше делать, имена сравнительно короткими и избегать употребления в них специальных символов.
Если в инструкции SQL указано имя таблицы, то СУБД по умолчанию обращается к одной из собственных таблиц пользователя. Обычно таблицам присваиваются короткие и значимые имена. В небольших базах данных, предназначенных для личного или группового использования, выбор имен зависит от разработчика базы данных. В более крупных, корпоративных базах данных могут существовать определенные корпоративные стандарты именования таблиц, позволяющие избежать конфликтов имен.
Кроме этого, пользователь может создавать именованное множество таблиц, называемое схемой. При этом пользователь может создавать таблицы с одинаковыми именами в различных схемах. Обращаться к таблицам, которые имеют одинаковые имена можно с помощью полного имени таблицы, т.е. имени, включающего идентификатор владельца или схемы и непосредственно имя таблицы, указанные через точку. Например, полное имя таблицы branch, владельцем которой является пользователь по имени user, имеет следующий вид: user.branch. При обращении к таблицам другого пользователя необходимо иметь на это соответствующее разрешение.
Если в инструкции задается имя столбца, СУБД сама определяет, в какой из указанных в этой же инструкции таблиц содержится данный столбец. Если в инструкцию требуется включить два столбца из различных таблиц, но с одинаковыми именами, необходимо указать полные имена столбцов. Полное имя столбца состоит из имени таблицы, содержащей столбец, и непосредственно имени столбца, разделенных точкой.
Полные имена таблиц и столбцов можно использовать вместо коротких во всех инструкциях SQL.
Константы. В некоторых инструкциях SQL необходимо явно указывать значения чисел, строк или даты. В стандарте ANSI/ISO определен формат числовых и строковых констант, или литералов, которые представляют конкретные значения данных. Этот формат используется в большинстве СУБД.
Целые и десятичные константы (точные числовые литералы) в инструкциях SQL представляются в виде обычных десятичных чисел с необязательным знаком плюс или минус перед ними.
Константы с плавающей запятой (приблизительные числовые литералы) определяются с помощью символа Е и имеют такой же формат, как и в большинстве языков программирования.
В соответствии со стандартом ANSI/ISO строковые константы (строковые литералы) в SQL должны быть заключены в одинарные кавычки.
Константы типа даты в диалекте SQL для ORACLE имеют специфичный формат представления. Как и строковые литералы, даты при их явном представлении берутся в одинарные кавычки.
Кроме пользовательских констант, в SQL существуют специальные именованные константы, возвращающие значения, хранимые в самой СУБД. Так, например, в ORACLE существует константа SYSDATE, при указании которой в запросе, СУБД возвращает в результат или подставляет в поля базы данных текущую дату и время. Также стандартом регламентировано применение константы USER для фиксации имени пользователя сделавшего изменения в записях таблиц баз данных и т.д.
Учебная БД. Для пояснения работы некоторых инструкций в курсе лекций и лабораторных работах предлагается рассмотреть учебную базу данных малого предприятия по аренде недвижимости, которая содержит шесть таблиц: branch, staff, property_for_rent, renter, owner, viewing.
Таблица branch предназначена для хранения информации об отделениях (офисах) предприятия и имеет следующие атрибуты: bno, street, city, tel_no. Атрибут bno является первичным ключом и в соответствии с правилом целостности сущности не может принимать неопределенных значений.
Таблица staff предназначена для хранения информации о сотрудниках и содержит следующие атрибуты: sno, fname, lname, address, tel_no, position, sex, dob, salary, bno. Sno – первичный ключ, идентификатор записей о сотрудниках; position – строковый атрибут, определяет занимаемую должность; dob – атрибут типа дата\время с данными о днях рождения сотрудников; salary – числовой атрибут с данными о зароботной плате сотрудников. Атрибут bno – внешний ключ для связи с таблицей branch.
Таблица property_for_rent содержит информацию об объектах недвижимости, предлагаемых в аренду и имеет следующие атрибуты: pno, street, city, type, rooms, rent, ono, sno, bno. Где pno – первичный ключ, type – строковый атрибут с информацией о типе предлагаемого объекта недвижимости; в данном случае на значения атрибута наложено ограничение, т.е. данный атрибут может принимать либо значение ’h’, либо ‘f’. Rooms и rent – числовые атрибуты. Ono, sno, bno – внешние ключи таблицы для связи с таблицами owner, staff, branch соответственно.
Таблица renter содержит информацию о потенциальных арендаторах и содержит следующие атрибуты: rno, fname, lname, address, tel_no, pref_type, max_rent, bno. Rno – первичный ключ, pref_type – строковый атрибут, определяющий предпочтительный для клиента тип объекта аренды и ограниченный значениями ‘h’ и ‘f’. Max_rent – числовой атрибут, имеющий смысл максимальной рентной стоимости объекта с точки зрения арендатора, bno – внешний ключ для связи с таблицей branch.
Таблица owner определяет владельцев объектов недвижимости, которые сдаются в аренду и включает следующие поля: ono, fname, lname, address, tel_no.
Таблица viewing содержит результаты осмотра арендаторами предполагаемых объектов аренды и имеет поля: rno, pno, date_o, comment_o. Таблица имеет составной первичный ключ, включающий атрибуты rno и pno, каждый из которых является также внешним ключом для связи с таблицами renter (указывает, кто из потенциальных арендаторов производил осмотр) и property_for_rent (какой из объектов осматривался). Атрибут date_o определяет дату осмотра, а comment_o предназначен для сохранения сделанных потенциальным арендатором комментариев.
Дата добавления: 2015-08-26; просмотров: 1213;