
- •Язык sql: манипулирование данными в этой лекции...
- •Введение в язык sql
- •Назначение языка sql
- •История языка sql
- •Особая роль языка sql
- •Используемая терминология
- •Запись операторов sql
- •Манипулирование данными
- •Литералы
- •Простые запросы
- •Выборка строк, конструкция where
- •Сортировка результатов, конструкция order by
- •5.3.3. Использование агрегирующих функций языка sql
- •Глава 5. Язык sql: манипулирование данными 183
- •5.3.5. Подзапросы
- •Глава 5. Язык sql: манипулирование данными 189
- •5.3.6. Ключевые слова any и all
- •5.3.8. Ключевые слова exists и not exist
- •Глава 5. Язык sql: манипулирование данными 203
Особая роль языка sql
Язык SQL является первым и пока единственным стандартным языком работы с базами данных, который получил достаточно широкое распространение.
Есть еще один стандартный язык работы с базами данных, Network Database Language (NDL), который построен на использовании сетевой модели CODASYL, но он применяется лишь в немногих разработках. Практически все крупнейшие разработчики СУБД в настоящее время создают свои продукты с использованием языка SQL либо интерфейса SQL, и большинство таких компаний участвуют в работе, по меньшей мере, одной организации, которая занимается разработкой стандартов этого языка. В SQL сделаны огромные инвестиции как со стороны разработчиков, так и со стороны пользователей. Он стал частью архитектуры приложений, таких как, System Application Architecture (SAA) корпорации IBM, а также является стратегическим выбором многих крупных и влиятельных организаций, например, консорциума Х/Open, занятого разработкой стандартов для среды UNIX. Язык SQL также принят в качестве федерального стандарта обработки информации Federal Information Processing Standard (FIPS), который должен соблюдаться в СУБД для получения разрешения продавать ее на территории США. Консорциум разработчиков SQL Access Group прилагает усилия по созданию расширений языка SQL, которые позволят обеспечить взаимодействие разнородных систем.
Язык SQL используется в других стандартах и даже оказывает влияние на разработку многих стандартов как инструмент их определения. В качестве примера можно привести стандарты ISO "Information Resource Dictionary System" (IRDS) и "Remote Data Access" (RDA). Разработка языка вызвала определенную заинтересованность научных кругов, выразившуюся как в выработке необходимых теоретических основ, так и в подготовке успешно реализованных технических решений. Это особенно справедливо в отношении оптимизации запросов, методов распределения данных и реализации средств защиты.
Начали появляться специализированные реализации языка SQL, предназначенные для новых рынков, такие как OnLine Analytical Processing (OLAP).
Используемая терминология
Стандарт ISO SQL не поддерживает таких формальных терминов, как отношение, атрибут и кортеж, вместо них применяются термины таблица, столбец и строка. В лекции при обсуждении языка SQL использована в основном терминология ISO. Кроме того, следует отметить, что стандарт SQL не предусматривает строгой поддержки некоторых определений реляционной модели данных. Например, в языке SQL допускается, что созданная в результате выполнения операции SELECT таблица может содержать повторяющиеся строки, устанавливается определенная последовательность столбцов, а пользователю разрешается сортировать строки в таблице.
Запись операторов sql
Оператор SQL состоит из зарезервированных слов, а также из слов, определяемых пользователем. Зарезервированные слова являются постоянной частью языка SQL и имеют определенное значение. Их следует записывать именно так, как указано в стандарте, и нельзя разбивать на части для переноса из одной строки в другую. Слова, определяемые пользователем, задаются самим пользователем, в соответствии с определенными синтаксическими правилами, и представляют собой имена различных объектов базы данных — таблиц, столбцов, представлений, индексов и т.д.
Слова в операторе размещаются в соответствии с установленными синтаксическими правилами. Хотя в стандарте это не указано, многие диалекты языка SQL требуют задания в конце оператора некоторого символа, обозначающего окончание его текста; как правило, с этой целью используется точка с запятой «;».
Большинство компонентов операторов SQL не чувствительно к регистру. Это означает, что могут использоваться любые буквы — как строчные, так и прописные.
Одним важным исключением из этого правила являются символьные литералы — данные, которые должны вводиться точно так же, как были введены соответствующие им значения, хранящиеся в базе данных. Например, если в базе данных хранится значение фамилии ‘Иванов’, а в условии поиска указан символьный литерал ‘Иванов1’ , то эта запись не будет найдена.
Поскольку язык SQL имеет свободный формат, отдельные операторы SQL и их последовательности будут иметь более удобный для чтения вид при использовании отступов и выравнивания. Рекомендуется придерживаться следующих правил:
Каждая конструкция в операторе должна начинаться с новой строки.
Начало каждой конструкции должно быть обозначено таким же отступом, что и начало других конструкций оператора.
Если конструкция состоит из нескольких частей, каждая из них должна начинаться с новой строки с некоторым отступом относительно начала конструкции, что будет указывать на их подчиненность.
Для определения формата операторов SQL мы будем применять следующую расширенную форму системы обозначений Backus Naur Form (BNF) — форма Бэкуса-Наура.
Прописные буквы будут использоваться для записи зарезервированных слов и должны указываться в операторах точно так же, как это будет показано.
Строчные буквы будут использоваться для записи слов, определяемых пользователем.
Вертикальная черта «|» указывает на необходимость выбора одного из нескольких приведенных значений, например «b|с.»
Фигурные скобки определяют обязательный элемент, например {а}.
Квадратные скобки определяют необязательный элемент, например [а].
Многоточие (...) используется для указания необязательной возможности повторения конструкции от нуля до нескольких раз, например{а b} [,с...]. Эта запись означает, что после «а» или «b» может следовать от нуля до нескольких повторений «с», разделенных запятыми.
На практике для определения структуры базы данных, в основном ее таблиц, используются операторы DDL, а для заполнения этих таблиц данными и выборки из них информации с помощью запросов — операторы DML.