20.Язык запросов SQL. Характеристика языка. Основные операторы.
SQL (Structured Query Language) – структурированный язык запросов – является инструментом, предназначенным для выборки и обработки информации, содержащейся в компьютерной базе данных. SQL является языком программирования, применяемым для организации взаимодействия пользователя с базой данных (рис. 44). SQL работает только с реляционными базами данных и предоставляет пользователю следующие функциональные возможности: •изменение структуры представления данных; •выборка данных из базы данных; •обработка базы данных, т. е. добавление новых данных, изменение, удаление имеющихся данных; •управление доступом к базе данных; •совместное использование базы данных пользователями, работающими параллельно; •обеспечение целостности базы данных.
SQL – это не полноценный компьютерный язык типа PASCAL, C++, JAVA.SQL,как и QBE, является непроцедурным языком. С помощью SQL описываются свойства и взаимосвязи сущностей (объектов, переменных и т. п. ), но не алгоритмы решения задачи. Он не содержит условных операторов, операторов цикла, организации подпрограмм, ввода-вывода и т. п. В связи с этим SQL автономно не используется. Инструкции SQL встраиваются в программу, написанную на традиционном языке программирования и дают возможность получить доступ к базам данных (встроенный SQL). Кроме того, из таких языков, С, C++, JAVA инструкции SQL можно посылать СУБД в явном виде, используя интерфейс вызовов функций.
Язык SQL является многофункциональным языком. Во-первых, SQL используется в качестве языка интерактивных запросов пользователей с целью выборки данных и в качестве встроенного языка программирования баз данных. Кроме того, SQL используется в качестве языка администрирования БД для определения структуры базы данных и управления доступом к данным, находящимся на сервере; в качестве языка создания приложений клиент/сервер, доступа к данным в среде Internet, распределенных баз данных.
С помощью SQL можно динамически изменять и расширять структуру базы данных даже в то время, когда пользователи работают с ее содержимым. Таким образом, SQL обеспечивает максимальную гибкость. Статические языки определения данных запрещают доступ к БД во время изменения ее структуры.
Инструкция создания таблицы имеет формат вида: CREATE TABLE <имя таблицы> (<имя столбца> <тип данных> [NOT NULL] [,<имя столбца> <тип данных> [NOT NULL]]... )
После выполнения инструкции появляется новая таблица, которой присваивается имя, указанное в инструкции. Имя таблицы (как и имена других объектов – столбцов и пользователей) согласно стандарту ANSI/ISO должны содержать от 1 до 18 символов, начинаться с буквы и не содержать пробелов или специальных символов пунктуации (на практике поддержка имен в различных СУБД реализована по-разному).
Обязательными операндами данной инструкции являются имя создаваемой таблицы и имя хотя бы одного столбца с указанием типа данных, хранимых в этом столбце. SQL поддерживает различные типы данных: целые числа, числа с плавающей запятой, строки символов, значения даты и времени и др. В общем случае в современных СУБД могут использоваться самые разнообразные дополнительные типы данных, расширяющие базовый набор SQL.
При создании таблицы для отдельных столбцов могут указываться некоторые дополнительные правила контроля вводимых в них значений. Конструкция – NOT NULL (не пустое) служит именно таким целям и для столбца таблицы означает, что в этом столбце должно быть непустое (определенное) значение.
Пример. Создание таблицы Пусть требуется определить таблицу ORDERS и ее столбцы. Инструкция для определения таблицы может иметь следующий вид: CREATE TABLE ORDERS (ORDER_NUM INTEGER NOT NULL, CUST_NUM INTEGER NOT NULL, PROD_ID INTEGER NOT NULL, QTY INTEGER NOT NULL, DATE_ORDER DATE NOT NULL)где INTEGER обозначает тип данных целое число, а DATE – тип данных, обозначающих значения даты.
Одним из структурных элементов физической памяти является индекс. Индекс – это средство, обеспечивающее быстрый доступ к строкам таблицы на основе значений одного или нескольких столбцов. В индексе хранятся значения данных и указатели на строки, где эти данные встречаются. Данные в индексе располагаются в убывающем или в возрастающем порядке, чтобы СУБД могла быстро найти требуемое значение. Затем по указателю СУБД сможет быстро определить строку, содержащую требуемое значение. Инструкция создания индекса имеет формат вида:
CREATE [UNIQUE] INDEX <имя индекса> ОN <имя таблицы> (<имя столбца> [ ASC| DESC][,<имя столбца> [ASC| DESC],... )
Оператор позволяет создать индекс для одного или нескольких столбцов заданной таблицы с целью ускорения выполнение запросных и поисковых операций с таблицей. Для одной таблицы можно создать несколько индексов.
Запросы являются фундаментом SQL. Многие разработчики используют SQL исключительно в качестве инструмента для создания запросов. Поэтому важнейшей инструкцией является инструкция SELECT, которая используется для построения SQL-запросов: SELECT [ALL | DISTINCT]<список данных> FROM <список таблиц> [WHERE <условие отбора>] [GROUP BY <имя столбца> [,<имя столбца>]... ] [HAVING <условие поиска>] [ORDER BY <спецификация> [,<спецификация>]...]
Оператор SELECT позволяет производить выборку и вычисления над данными из одной или нескольких таблиц. В предложении SELECT указывается список возвращаемых столбцов, разделенных запятыми. Для каждого элемента из списка в ответной таблице будет создан один столбец. Ответная таблица может иметь (ALL), или не иметь (DISTINCT) повторяющиеся строки. По умолчанию в ответную таблицу включаются все строки, в том числе и повторяющиеся. Список данных может содержать выражения над столбцами, показывающие, что наряду с выборкой данных выполняются вычисления, результаты которого попадают в новый (создаваемый) столбец ответной таблицы
В отборе данных участвуют записи одной или нескольких таблиц, перечисленных в списке предложения FROM. Такие таблицы называют исходными таблицами запроса.
При использовании в списках данных имен столбцов нескольких таблиц для указания принадлежности столбца некоторой таблице применяют конструкцию вида: <имя таблицы>.<имя столбца>.
Инструкция удаления строк имеет формат вида: DELETE FROM <имя таблицы> [WHERE <условие>]
Результатом выполнения оператора DELETE является удаление из указанной таблицы строк, которые удовлетворяют условию,определенному предложением WHERE. Если необязательный операнд WHERE опущен, т. е. условие отбора удаляемых записей отсутствует, удалению подлежат все записи таблицы.
Пример. Удаление строк Удалить из таблицы ORDERS сведения о старых заказах. DELETE FROM ORDERS WHERE DATE_ORDER<'17.01.03'