Тема «Введение в язык sql»

Вид материалаЛекция

Содержание


Create table
Alter table
Выполнение оператора SELECT
Group by zbook
Select zbook
Оператор добавления строк в таблицу INSERT
Оператор добавления строк в таблицу INSERT
Фраза SELECT
Оператор удаления строк DELETE
Оператор обновления строк UPDATE
Оператор создания таблицы CREATE TABLE
Определение ограничений целостности таблицы
Удаление таблицы DROP TABLE
Изменения таблицы ALTER TABLE
Подобный материал:

Курс «Базы данных» Лекция № 4

КУРС «Базы данных»


***


Тема «Введение в язык SQL»





Структурированный язык запросов SQL основан на реляционном исчислении с переменными кортежами. Язык имеет несколько стандартов, наиболее распространенными из которых являются SQL-89 и SQL-92.

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













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

При обсуждении языка SQL. если не указано иное, мы будем основываться на версии стандарта SQL:1999.














Язык SQL первоначально разрабатывался как подъязык данных. Однако после включения в стандарт в конце 1996 года такого средства, как постоянные хранимые модули SQL (SQL Persistent Stored Modules — SQL/PSM. или сокращенно PSM). стандарт SQL стал полностью поддерживать все вычислительные конструкции (и сейчас в нем предусмотрены процедурные операторы, например call, return, set. case. if. loop, leave, while, repeat, а также несколько связанных с ними функциональных возможностей.










SQL — язык очень большого объема.

Спецификация содержит свыше 2000 страниц, не считая больше 300 страниц исправлений.

Достаточно полно мы сможем рассмотреть лишь самые важные его особенности.













В языке SQL вместо терминов отношение и переменная отношения используется термин таблица, а вместо терминов кортеж и атрибут строка и столбец. Именно эти термины используется в стандарте языка SQL и в поддерживающих его продуктах, поэтому в соответствии с ними мы будем использовать указанные термины везде, где речь идет о языке SQL.



































■ Символ "#", который иногда используется, на­пример, в названиях типов и в именах столбцов, на самом деле не определен в стандарте SQL.

■ В качестве признака конца оператора мы здесь используем символ ";". хотя согласно стандарту SQL, выбор используемого для этой цели символа зависит от реализации.

















Определив базу данных, можно начинать выполнять в ней различные операции, задаваемые с помощью операторов манипулирования данными языка SQL:

select,

insert,

update

delete


















Примеры выполнения операций выборки, проекции и соединения на языке SQL






В результате выполнения этого запроса будет получена копия всей таблицы S.







Операторы языка SQL можно условно разделить на два категории:

язык определения данных (Data Definition Language — DDL)

язык манипулирования данными (Data Manipulation Language — DML).

















Вид

Название

Назначение




DML

SELECT

выборка записей

UPDATE

изменение записей

INSERT

вставка новых записей

DELETE

удаление записей

DDL

CREATE TABLE

создание таблицы

DROP TABLE

удаление таблицы

ALTER TABLE

изменение структуры таблицы

CREATE VIEW

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

DROP VIEW

удаление представления

GRANT

назначение привилегий

REVOKE

удаление привилегий

































SELECT

[ALL | DISTINCT] {* | выражение AS [ имя_столбца ] [, …] }

FROM имя_таблицы [псевдоним] [, …]

[WHERE условие_по_исходным_данным]

[GROUP BY столбец [, …] ]

[HAVING условие_по_группе ]

[ORDER BY столбец [DESC] [, …] ]










Выполнение оператора SELECT


1. Выполняется расширенное декартово произведение исходных таблиц;

2. Отбираются те строки получившейся таблицы, которые удовлетворяют (не противоречат) условию_по_исходным_данным;

3. В результирующей таблице добавляются столбцы для всех вычислимых полей:

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

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

Далее удаляются те оставшиеся строки – представители групп, которые не удовлетворяют условию_по_группе из раздела HAVING.

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

4. Если в списке_выборки есть подзапросы, то они вычисляются, и результирующая таблица будет представлять собой расширенное декартово произведение таблицы, созданной на предыдущих шагах и таблиц, полученных вычислением подзапросов.

5. Выполняется проекция полученной таблицы на указанные в списке выборки столбцы результата. В случае, если указано ключевое слово DISTINCT, из всех одинаковых строк оставляется один представитель.

6. Выполняется упорядочивание строк результирующей таблицы по значениям указанных в секции ORDER BY столбцов











Пример: Получить список студентов со средним рейтингом > 90 (см. Лекция №3)

SELECT ZBOOK, AVG (rait) AS r

FROM raiting

GROUP BY ZBOOK

HAVING AVG(rait)>90











Стандарт SQL позволяет использовать стандартные теоретико-множественные операции над множествами – UNION (объединение), INTERSECT (пересечение), EXCEPT (разность).

Пример. Определить список студентов (по номерам зачетных книжек) со средним рейтингом > 90 и не имеющих троек:

(SELECT ZBOOK

FROM raiting

GROUP BY ZBOOK

HAVING AVG(rait)>90)

EXCEPT

(SELECT ZBOOK

FROM raiting

GROUP BY ZBOOK

HAVING MIN(rait)>75)

)

Все запросы могут быть выполнены и без использования теоретико–множественных операций.




















Оператор добавления строк в таблицу INSERT


а) вставка одной новой строки

INSERT

INTO таблица [столбец, …]

VALUES (значение, …)

Выполняется вставка новой строки с заданными значениями указанных столбцов: каждому указанному столбцу в списке столбцов должно соответствовать выражение из списка значений (соответствие определяется по порядку следования), а поля оставшихся столбцов заполняются значением NULL или значением по умолчанию (см. далее оператор CREATE).

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







Оператор добавления строк в таблицу INSERT


б) копирование множества строк из одной таблицы в другую


INSERT

INTO таблица [столбец, …]

предложение_select


В указанную таблицу вставляются строки, полученные в результате выполнения предложения_select, удовлетворяющего рассмотренным выше требованиям синтаксиса SELECT.

Перечень столбцов интерпретируется аналогично первому варианту INSERT: предложения_select должно соответствовать по структуре и порядку следования списку столбцов, а если список столбцов отсутствует – то структуре таблицы.














В этом примере подразумевается, что предварительно создана другая таблица TEMP с двумя столбцами. Р# и WEIGTH. Оператор insert вставляет в нее номера детатей и соот­ветствующие веса всех деталей с цветом' Red' (красный).











Фраза SELECT определяет перечень столбцов в таблице - результате подзапроса.:














Оператор удаления строк DELETE



DELETE FROM таблица

[WHERE условие]


В таблице удаляются все строки, удовлетворяющие условию, синтаксис которого соответствует синтаксису раздела WHERE оператора SELECT. Если WHERE отсутствует, будут удалены все строки.




































P2


Этот оператор DELETE удаляет из таблицы SP все строки с информацией о поставках детали с номером ' Р2 '.
















Оператор обновления строк UPDATE


UPDATE таблица

SET столбец = значение, ...

[WHERE условие]


В таблице модифицируются все строки (если указано условие, то только удовлетворяющие условию строки) внесением нового значения поля в столбец.


































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










Оператор создания таблицы CREATE TABLE


С помощью оператора CREATE TABLE создается новая таблица.


CREATE TABLE имя_таблицы
(определение_столбца | ограничение_целостности_таблицы [,…])


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

Для определения столбцов таблицы и ограничений целостности используются специальные операторы, которые должны быть вложены в оператор определения таблицы.





















Определение ограничений целостности таблицы


Ограничения целостности таблицы обладают следующим синтаксисом:
ограничение_целостности_таблицы:

{ PRIMARY KEY (столбец_к, …) }

| { UNIQUE (столбец_у, …) , … }

| { FOREIGN KEY (столбец_внешнего_ключа, …)

REFERENCES родительская_таблица [(родительский столбец, …)]

[ON UPDATE действие_обновления]

[ON DELETE действие_удаления] }

| { CHECK условие}
















Удаление таблицы DROP TABLE


DROP TABLE имя_таблицы [RESTRICT | CASCADE]

С помощью ключевых слов RESTRICT и CASCADE соответственно указывается, нужно ли удалять каскадно (CASCADE) связанные с таблицей объекты (таблицы, формы, связи и т.д.) или нет (RESTRICT).

















Изменения таблицы ALTER TABLE




Оператор имеет более сложную структуру, чем CREATE TABLE, однако назначение параметров оператора идентично соответствующим параметрам CREATE TABLE.










Представления


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














Приведем пример определения представления на языке SQL.




А ниже приведен пример запроса SQL к этому представлению.



















В стандарте SQL оператор определения представления имеет следующий синтаксис:


CREATE VIEW имя_представления [ столбец, ...]
AS запрос [WITH CHECK OPTION]




























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













© НИЯУ МИФИ Кафедра «Информатика и процессы управления», 2010