Лекция 5. Язык SQL
Введение
-
Статический язык программирования SQL
-
Интерактивный язык SQL
-
Операторы DDL
-
Модификация метаданных
Оператор CREATE DATABASE
Оператор CREATE TABLE
Оператор CREATE INDEX
Оператор ALTER TABLE
Оператор DROP
-
Операторы DML
-
Выбор данных
Предложение FROM
Предложение WHERE
Операторы AND, OR и NOT
Предложение ORDER BY
Операторы DCL
Операторы TCL
Операторы CCL
-
Работа с операторами SQL
-
Связывание таблиц
Предложение GROUP BY
-
Модификация данных
Оператор UPDATE
Оператор DELETE
Оператор INSERT
Встроенный язык SQL
Все языки управления данными, созданные до появления реляционных баз данных и разработанные для многих систем управления базами данных персональных компьютеров, были ориентированы на операции с данными, представленными в виде логических записей файлов. Это требовало от пользователей детального знания организации хранения данных и достаточных усилий для указания не только того, какие данные нужны, но и того, где они размещены, и как шаг за шагом получить их.
SQL (Structured Query Language) (“S – Q – L” или “See – Quel”) – структурированный язык запросов. SQL обеспечивает управление структурой БД и манипулирование данными, т. е. сочетает в себе свойства языков обоих типов – описания и манипулирования данными. Является непроцедурным языком.
Э.Ф. Кодд предложил использовать для обработки данных аппарат теории множеств. Появление предложенного Коддом языка запросов "Аlpha", основанного на реляционном исчислении, инициировало разработку ряда языков запросов, которые можно отнести к двум классам:
Алгебраические языки, позволяющие выражать запросы средствами специализированных операторов, применяемых к отношениям (JOIN - соединить, INTERSECT - пересечь, SUBTRACT - вычесть и т.д.).
Языки исчисления предикатов представляют собой набор правил для записи выражения, определяющего новое отношение из заданной совокупности существующих отношений. Другими словами исчисление предикатов есть метод определения того отношения, которое нам желательно получить (как ответ на запрос) из отношений, уже имеющихся в БД.
Разработка, в основном, шла в отделениях фирмы IBM (языки ISBL, SQL, QBE) и университетах США (PIQUE, QUEL). Последний создавался для СУБД INGRES (Interactive Graphics and Retrieval System), которая была разработана в начале 70-х годов в Университете шт. Калифорния. Сегодня из всех этих языков полностью сохранились и развиваются QBE (Query-By-Example - запрос по образцу) и SQL, а из остальных взяты в расширение внутренних языков СУБД только наиболее интересные конструкции.
Почему же это произошло?
Непрерывный рост быстродействия, а также снижение энергопотребления, размеров и стоимости компьютеров привели к резкому расширению возможных рынков их сбыта, круга пользователей, разнообразия типов и цен. Естественно, что расширился спрос на разнообразное программное обеспечение.
Борясь за покупателя, фирмы, производящие программное обеспечение, стали выпускать на рынок все более и более интеллектуальные и, следовательно, объемные программные комплексы. Приобретая (желая приобрести) такие комплексы, многие организации и отдельные пользователи часто не могли разместить их на собственных ЭВМ, однако не хотели и отказываться от нового сервиса. Для обмена информацией и ее обобществления были созданы сети ЭВМ, где обобществляемые программы и данные стали размещать на специальных обслуживающих устройствах - файловых серверах.
СУБД, работающие с файловыми серверами, позволяют множеству пользователей разных ЭВМ (иногда расположенных достаточно далеко друг от друга) получать доступ к одним и тем же базам данных. При этом упрощается разработка различных автоматизированных систем управления организациями, учебных комплексов, информационных и других систем, где множество сотрудников (учащихся) должны использовать общие данные и обмениваться создаваемыми в процессе работы (обучения). Однако при такой идеологии вся обработка запросов из программ или с терминалов пользовательских ЭВМ выполняется на этих же ЭВМ. Поэтому для реализации даже простого запроса ЭВМ часто должна считывать из файлового сервера и (или) записывать на сервер целые файлы, что ведет к конфликтным ситуациям и перегрузке сети.
Для исключения указанных и некоторых других недостатков была предложена технология "Клиент-Сервер", по которой запросы пользовательских ЭВМ (Клиент) обрабатываются на специальных серверах баз данных (Сервер), а на ЭВМ возвращаются лишь результаты обработки запроса. К числу преимуществ систем подобного рода можно отнести высокую производительность, легкость реконфигурации, возможность работы с разнородными источниками данных. При этом, естественно, нужен единый язык общения с Сервером и в качестве такого языка выбран SQL, разработанный в 1974 году фирмой IBM для экспериментальной реляционной СУБД System R.
После появления на рынке двух пионерских СУБД этой фирмы - SQL/DS (1981 год) и DB2 (1983 год) - SQL приобрел статус стандарта де-факто для профессиональных реляционных СУБД. В 1987 году SQL стал международным стандартом языка БД, а в 1992 году вышла вторая версия этого стандарта. К настоящему времени он используется в таких системах управления реляционными базами данных, как Oracle, INGRES, Informix, Sybase, SQLbase, Microsoft SQL Server, DB2 (СУБД самой IBM), SQL/DC, Paradox, Access, FoxPro, dBase, Approach, MySQL, PosgreSQL и многими другими. Уже более 140 продуктов имеют в своем составе SQL-интерфейс. Можно с уверенностью сказать, что если вы собираетесь в ближайшем будущем использовать реляционные базы данных, то вам придется работать с SQL. Зная SQL, можно взаимодействовать практически с любой БД.
Structured Query Language (SQL) — это непроцедурный язык, используемый для формулировки запросов к БД в большинстве современных СУБД. Непроцедурность языка означает, что на нем можно указать, что нужно сделать с БД, но нельзя описать алгоритм этого процесса. Иными словами, в языке SQL отсутствуют алгоритмические конструкции, такие как метки, операторы цикла, условные переходы и т.п. Все алгоритмы обработки SQL-запросов генерируются самой СУБД и не зависят от пользователя.
Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.
SQL позволяет извлекать данные из БД, а также определять структуру данных, добавлять и удалять данные, ограничивать или предоставлять доступ к данным, поддерживать ссылочную целостность.
Выделяют статический и динамический языки программирования SQL. В статическом языке значения всех объектов четко зафиксированы. В динамическом языке SQL вместо значений объектов используются параметры, данные для которых или вводятся в диалоговом режиме пользователем, или заимствуются в процессе выполнения программы из других таблиц (БД).
|