Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИОСУ (Лекции).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
858.62 Кб
Скачать

Лекция 8

Раздел 3. Язык sql

Основные понятия языка SQL

SQL (Structured Query Language) – Структурированный Язык Запросов – стан­дартный язык запросов по работе с реляционными БД. Язык SQL появился после реляционной алгебры, и его прототип был разработан в конце 70-х годов в компа­нии IBM Research. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R. В дальнейшем этот язык применялся во многих коммерче­ских СУБД и в силу своего широкого распространения постепенно стал стандар­том для языков манипулирования данными в реляционных СУБД. Первый международный Стандарт языка SQL был принят в 1989 г. (далее мы бу­дем называть его SQL/89 или SQL1). Иногда стандарт SQL1 также называют стандартом ANSI/ISO, и подавляющее большинство доступных на рынке СУБД поддерживают этот стандарт полностью. Однако развитие информационных тех­нологий, связанных с базами данных, и необходимость реализации переносимых приложений потребовали в скором времени доработки и расширения первого стандарта SQL.

В конце 1992 г. был принят новый международный стандарт языка SQL, который в дальнейшим будем называть SQL/92 или SQL2. И он не лишен недостатков, но в то же время является существенно более точным и полным, чем SQL/89. В на­стоящий момент большинство производителей СУБД внесли изменения в свои продукты так, чтобы они в большей степени удовлетворяли стандарту SQL2. В 1999 году появился новый стандарт, названный SQ.L3. Если отличия между стандартами SQL1 и SQL2 во многом были количественными, то стандарт SQL3 соответствует качественным серьезным преобразованиям. В SQL3 введены но­вые типы данные, при этом предполагается возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации. Наконец, добавлен раздел, который вводит стандарты на события и триггеры, которые ранее не затрагивались в стандартах, хотя давно уже широко использовались в коммерческих СУБД. В стандарте определены возможности четкой спецификации триггеров как совокупности события и дей­ствия. В качестве действия могут выступать не только последовательность опе­раторов SQL, но и операторы управления ходом выполнения программы. В рам­ках управления транзакциями произошел возврат к старой модели транзакций, допускающей точки сохранения (savepoints), и возможность указания в операто­ре отката R00L6ACK точек возврата позволит откатывать транзакцию не в на­чало, а в промежуточную ранее сохраненную точку. Такое решение повышает гибкость реализации сложных алгоритмов обработки информации.

SQL (Structured Query Language) – это язык запросов, кото­рый используется при работе с реляционными базами данных в современных СУБД (ORACLE, dBASE IY, dBASE Y, Paradoxe, Access и др.).

Язык SQL стал стандартным языком запросов при работе с реляционными базами данных для архитектуры как файл-сервер, так и клиент-сервер, а также в условиях применения системы уп­равления распределенными БД.

Язык SQL использует ограниченный набор команд, но в то же время – это реляционно полный язык, предназначенный для ра­боты с базами данных, создания запросов выборки данных, вы­полнения вычислений, обеспечения их целостности. Синтаксис версий языка SQL может в определенной степени различаться для отдельных СУБД. Рассмотрим наиболее общие операторы языка SQL.

SQL, хотя и является языком программирования, в силу своей специфической направленности не обладает многими возможно­стями универсальных языков программирования. В нем отсутству­ют традиционные операторы, организующие циклы, позволяющие объявить и использовать внутренние переменные, организовать анализ некоторых условий и возможность изменения хода про­граммы в зависимости от выполненного условия. В общем случае SQL можно назвать подъязыком, который служит исключительно для управления базами данных. Для создания приложений, насто­ящих программ необходимо использовать другие, базовые языки программирования, в которые операторы языка SQL будут встра­иваться.

Процесс выполнения операторов SQL может быть условно раз­делен на пять этапов (рис. 30).

Рис. 30. Последовательность выполнения операторов SQL

На первом этапе выполняется синтаксический анализ операто­ра SQL. На этом этапе проверяется корректность записи операто­ра SQL в соответствии с правилами синтаксиса.

На втором этапе проверяется корректность параметров опера­тора SQL: имен отношений, имен полей данных, привилегий пользователя по работе с указанными объектами. На этом этапе отыскиваются семантические ошибки.

На третьем этапе проводится оптимизация запроса. СУБД про­водит разделение целостного запроса на ряд минимальных опера­ций и оптимизирует последовательность их выполнения с точки зрения временных затрат на выполнения запроса. На этом этапе строится несколько планов выполнения запроса и выбирается из них один – оптимальный для данного состояния БД.

На четвертом этапе СУБД генерирует двоичную версию опти­мального плана опроса, подготовленного на третьем этапе. Дво­ичный план выполнения запроса СУБД фактически является эк­вивалентом объектного кода программы.

На пятом этапе СУБД реализует разработанный план, тем са­мым выполняя запрос.

Табл. 1. Операторы определения данных (Data Definition Language, DDL)

Оператор

Действие

CREATE TABLE

Создает новую таблицу БД

DROP TABLE

Удаляет таблицу из БД

ALTER TABLE

Изменяет структуру существующей таблицы или ограничения целостности, задаваемые для данной таблицы

CREATE VIEW

Создает виртуальную таблицу, соответствующую некоторому SQL-запросу

ALTER VIEW

Изменяет ранее созданное представление

DROP VIEW

Удаляет ранее созданное представление

CREATE INDEX

Создает индекс для некоторой таблицы для обеспечения быстрого доступа по атрибутам, входящим в индекс

DROP INDEX

Удаляет ранее созданный индекс

Табл. 2. Операторы манипулирования данными (Data Manipulation Language, DMP)

Оператор

Действие

DELETE

Удаляет одну или несколько строк, соответству­ющих условиям фильтрации, из базовой таблицы. Применение оператора согласуется с принципами поддержки целостности, поэтому этот оператор не всегда может быть выполнен корректно, даже если синтаксически он записан правильно

INSERT

Вставляет одну строку в базовую таблицу. Допусти­мы модификации оператора, при которых сразу несколько строк могут быть перенесены из одной таблицы или запроса в базовую таблицу

UPDATE

Обновляет значения одного или нескольких столб­цов в одной или нескольких строках, соответству­ющих условиям фильтрации

Табл. 3. Оператор запросов (Data Query Language, DQL)

Оператор

Действие

SELECT

Оператор, заменяющий все операторы реляцион­ной алгебры и позволяющий сформировать резуль­тирующее отношение, соответствующее запросу

Все операторы SQL имеют вид, показанный на рис. 31.

Рис. 31. Структура оператора SQL

Каждый оператор SQL начинается с ключевого слова, определяющего, что именно делает этот оператор (SELECT, INSERT, DELETE...). В операторе содержатся также предложения, содержащие сведения о том, над какими данными производятся операции. Каждое предложение начинается с ключевого слова, такого как FROM, WHERE и др. Структура предложения зависит от его типа.

Примеры команд SQL

Пример 1. Создание таблицы:

CREATE TABLE Студент

([Имя] TEXT,

[Фамилия] TEXT,

[Дата рождения] DATETIME,

CONSTRAINT Инд UNIQUE ([Имя]) )

В результате выполнения данного запроса будет создана таблица СТУ­ДЕНТ, имеющая в своем составе:

  • два текстовых поля – Имя, Фамилия,

  • одно поле типа дата/время – Дата рождения.

Будет также создан индекс с именем Инд по значению указанного поля (полей, который будет иметь уникальное значение, так как в таблице не может быть двух записей с одинаковыми значениями полей, образующих его.)

CREATE TABLE Студенты (id COUNTER PRIMARY KEY, Поле2 TEXT(12), Поле3 MONEY, Поле4 INTEGER)

Пример 2. Изменение структуры таблицы:

ALTER TABLE Студент ADD COLUMN [Группа] TEXT(5)

ALTER TABLE Студент DROP COLUMN [Группа] – удаление поля

Пример 3. Создание индекса таблицы:

CREATE INDEX Гр ON Студент([группа]) WITH DISALLOW NULL

Пример 4. Удаление таблицы. Для удаления таблицы (одновременно и структуры, и данных) используется следующая команда:

DROP TABLE имя таблицы, например DROP TABLE Студент

Пример 5. Удаление только индекса Гр таблицы Студент:

Для удаления только индекса таблицы (сами данные при этом не разрушаются) необходимо выполнить следующую команду:

DROP INDEX имя индекса ON имя таблицы

например, DROP INDEX Гр ON Студент

Пример 6. Добавление данных в таблицу:

INSERT INTO Студент (Имя, Фамилия, Дата рождения) VALUES ('Имя 1', Фамилия 1, 07.06.12);

С параметрами

INSERT INTO Студент (Поле2, Поле3, Поле4) VALUES ([Имя], [Стипендия], [Баллы]);

Пример 7. Добавление / удаление ключевого поля:

ALTER TABLE Студент ADD PRIMARY KEY ([Имя])

ALTER TABLE Студент DROP PRIMARY KEY ([Имя])

Пример 8. Запрос на выборку

Показать все данные таблицы

SELECT * FROM Студент

Показать определенные поля таблицы

SELECT Поле1, Поле2 FROM Студент

Запрос с условиями (с фильтрацией)

SELECT * FROM Студенты WHERE Поле4 > 50

SELECT Поле1, Поле2, Поле3 FROM Студенты WHERE Поле4 < 50

SELECT * FROM Студенты WHERE Поле4 between 1 and 100

SELECT * FROM Студенты WHERE Поле2 like "В*"

SELECT * FROM Студенты WHERE Поле4 is null

SELECT * FROM Студенты WHERE Поле3 > 200 And Поле3 <= 300

48