Определение
Structured Query Language (SQL) — язык программирования, предназначенный для извлечения информации и размещения ее в реляционной базе данных. Запросы создаются с помощью командного языка, который позволяет выбирать, добавлять, обновлять и находить данные. SQL — это стандарт, принятый Американским национальным институтом по стандартам (ANSI) и Международной организацией по стандартам (ISO). В некоторых системах управления базами данных поддерживается расширенный вариант SQL с теми или иными частными дополнениями
Основной механизм, используемый для формирования запросов, чтения и обновления реляционных баз данных, представляет собой язык, получивший название Structured Query Language, или SQL. Язык, созданный для того, чтобы задавать вопросы, касающиеся информации, содержащейся в базе данных, не является процедурным, в отличие от традиционных Фортрана, Бейсика, Си или Кобола, с помощью которых пишутся процедуры, выполняющие одну операцию за другой в заранее определенной последовательности до тех пор, пока не будет выполнена поставленная задача. Это может быть линейная процедура, цикл или переход в другую точку или процедуру. В любом случае программист указывает порядок выполнения.
С помощью SQL, напротив, вы сообщаете системе лишь о том, что вам требуется. Дальше система управления базой данных сама анализирует запрос, сопоставляя его со своими структурами и выясняя, какие операции необходимо выполнить, чтобы получить затребованную информацию.
SQL отличается многофункциональностью и фундаментальностью, а также способностью поддерживать любые действия, связанные с реляционными базами данных, так что практически любое приложение и инструментарий разработки, вне зависимости от своего интерфейса, в конце концов преобразует запросы и другие команды в SQL.
Таким образом, визуальный инструментарий программирования для разработки приложений, рассчитанный на взаимодействие с базами данных, может иметь удобный, объектно-ориентированный графический интерфейс. Но как только процесс программирования завершен, система преобразует все вызовы и команды базы данных в SQL. Это упрощает интеграцию систем front-office и back-office, особенно в многозвенных клиент-серверных приложениях. Единственное существенное исключение из этого правила связано с объектно-ориентированными базами данных, структура и архитектура которых могут не быть согласованными с реляционными.
Реляционные базы данных
В реляционной базе данных информация разделена на наборы, которые хранятся в одной или нескольких таблицах со знакомой многим структурой строк и таблиц. Реляционные базы данных могут быстро извлекать отдельные элементы информации из различных таблиц и передавать их пользователю или приложению как единый унифицированный набор данных, называемый результатом. Поскольку различные элементы могут быть сгруппированы в соответствии с конкретными связями (такими, как связь имени сотрудника с его местонахождением и зарплатой), реляционная модель дает разработчику базы данных большую гибкость в описании взаимосвязей между элементами данных для конкретной системы. Более важный итог состоит в том, что пользователь может лучше понять информацию, размещенную в базе данных.
История SQL
История SQL началась в 70-х годах в IBM Research Laboratory в Сан-Хосе, где Э. Ф. Кодд и другие сотрудники лаборатории разработали реляционную модель баз данных, на основе которой со временем была создана СУБД DB2. По мере широкого распространения в 80-х реляционных баз данных SQL стал применяться в коммерческих информационных технологиях. В 1986 году Американский национальный институт по стандартам и Международная организация по стандартам утвердили первый стандарт на этот язык.
Примерно в то же время появились клиент-серверные локальные сети, в которых работали приложения нового поколения, требующие новых навыков программирования. С помощью SQL и сетевого соединения многочисленные клиентские приложения могли получать доступ к центральной базе данных, размещенной на удаленном сервере.
В середине 80-х годов компании Oracle и Sybase выпустили первые коммерческие системы управления базами данных, которые использовали язык SQL в качестве основного механизма формирования запросов. Спустя некоторое время Microsoft быстро лицензировала технологию Sybase в качестве основы для своего Microsoft SQL Server. Большинство этих продуктов также содержали внутренние библиотеки инструментальных средств, которые разработчики могли применять для того, чтобы заставить приложения работать с базой данных, а также драйверы для поддержки взаимодействия между узлами локальной сети. Все это придавало продуктам необходимую гибкость и масштабируемость.
В 1989 и 1992 годах в стандарт были добавлены функции базового контроля целостности данных, администрирования данных, а также определения и манипуляций с данными. Примерно в это же время в дополняющей стандарт спецификации Open Database Connectivity (ODBC) был описан прикладной программный интерфейс, с помощью которого программное обеспечение могло связываться с другой системой баз данных, совместимой с ODBC. Несколькими годами позже была подготовлена аналогичная спецификация, получившая название Java Database Connectivity, которая определила, как операторы SQL можно преобразовать в программы на Java.
Спецификация SQL в редакции 1992 года стала самой популярной, хотя новая версия — SQL3 (также называемая SQL-99) используется уже несколько лет. Процесс стандартизации SQL3 позволил значительно усовершенствовать язык, дав возможность использовать его со сложными объектами в объектных базах данных. Это значит, что SQL3 должен включать в себя обобщенные и специализированные иерархии, множественное наследование, типы данных, определенные пользователями, переключатели и утверждения, поддержку систем баз знаний, рекурсивные выражения запросов и так далее.
Кроме того, он должен поддерживать все отличительные особенности объектно-ориентированного программирования, в том числе абстрактные типы данных, методы, наследование, полиморфизм и инкапсуляцию.
Пример использования SQL
Рассмотрим очень простую базу данных, состоящую всего из одной таблицы, называющейся Сотрудники
Имя | Возраст | Должность | Зарплата |
Энди Эппл | 28 | программист | 40 000 долл. |
Бренда Беннетт | 40 | менеджер | 50 000 долл. |
Кери Чарлз | 29 | администратор | 35 000 долл. |
Дейв Дункан | 50 | директор | 120 000 долл. |
Элиз Энтерман | 36 | вице-президент | 60 000 долл. |
Френк Фиш | 46 | менеджер | 52 000 долл. |
Теперь создадим запрос на поиск имен и должностей сотрудников в возрасте 40 лет и старше, которые зарабатывают по крайней мере 50 тыс. долл. SQL-оператор может выглядеть следующим образом.
![](/data/164/684/1234/040_0_1.gif)
Результат:
«Бренда Беннетт, менеджер; Дейв Дункан, директор; Френк Фиш, менеджер». Это очень простой пример. На самом деле они могут быть достаточно сложными и запутанными, в тех случаях когда используется множество таблиц и взаимосвязей и приходится создавать нетривиальные булевы выражения.