Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Особенности построения баз данных. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

предложения модификации данных (добавление, удаление и изменение данных);

предложения управления данными (предоставление и отмена привилегий на доступ к данным, управление транзакциями и др.). Кроме того, он предоставляет возможность выполнять в этих предложениях:

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

упорядочение строк и(или) столбцов при выводе содержимого таблиц на печать или экран дисплея;

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

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

агрегатирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум число элементов и т.п.

Впервые, достаточно полный функционально, вариант языка SQL был разработан и реализован в рамках проекта экспериментальной реляционной СУБД SystemR компании IBM (1974 – 79 гг.). Его исходным на-

званием было SEQUEL (Structured English Query Language).

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

Официальный стандарт языка SQL является совместной разработкой Американским институтом национальных стандартов (American National Standards Institute – ANSI) и Международной организацией по стандартам

(International Standards Organization – ISO).

Работа над официальным стандартом языка SQL началась с 1982 г.

В1989 г. был принят первый стандарт SQL (SQL1 или SQL/89). Он во многих частях имеет чрезвычайно общий характер и допускает очень широкое толкование. Поэтому на фоне завершения разработки этого стандарта была начата работа над стандартом SQL2. Она длилась несколько лет и в 1992 г. был выработан окончательный проект стандарта SQL2 (SQL/92).

В 2000 г. большинство коммерческих продуктов соответствовало SQL92. Даже сейчас еще не все элементы этого стандарта широко реализо-

51

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

В 1999 г. был принят стандарт SQL3 (SQL/99).

Типовые операции по обработке записей реляционной таблицы

Классический состав операций с реляционными таблицами определяет требования к реляционным языкам. Рассмотрим типовые операции по обработке записей в изолированной реляционной таблице.

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

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

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

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

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

Типовые операции совместной обработки реляционных таблиц

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

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

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

52

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

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

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

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

Соединение – две таблицы, имеющие общие поля – внешние ключи, участвуют в создании новой таблицы, схема которой строится объединением всех полей исходных отношений, а результирующие записи формируются по определенным условиям:

для одинаковых значений внешних ключей – симметричное соединение;

для всех записей одной из таблиц и соответствующих им записей другой таблицы – внешнее соединение.

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

1.Сотрудники

КОД_С

 

ФИО

 

ДАТА_Р

 

ЗВАНИЕ

 

 

 

 

 

 

 

1001

 

Иванов С. П.

 

11.12.1969

 

майор

1002

 

Петров А.А.

 

07.08.1971

 

сержант

1003

 

Сидоров С.В.

 

23.03.1965

 

капитан

1004

 

Семенов В.А.

 

15.06.1973

 

сержант

1005

 

Кузьмин О.Н.

 

27.10.1965

 

майор

 

 

 

2. Объекты

 

 

 

 

 

 

 

КОД_О

 

НАЗВАНИЕ

 

УЛИЦА

ДОМ

 

 

 

 

 

 

2001

 

АИСТ

 

Советская

115

2002

 

НАДЕЖДА

 

Коммунальная

10

2003

 

ДЕЛЬФА

 

Интернациональная

34

2004

 

ВАЛЕНТ

 

Советская

83

53

3. Дежурство

КОД_Д

ДАТА_Д

КОД_С

КОД_О

 

 

 

 

3001

01.10.2004

1001

2003

3002

01.10.2004

1004

2004

3003

11.10.2004

1002

2001

3004

23.09.2004

1003

2001

3005

12.09.2004

1002

2004

3006

15.11.2004

1005

2002

3007

11.10.2004

1003

2001

3008

15.12.2004

1001

2003

3009

13.10.2004

1004

2002

3010

12.09.2004

1001

2001

4. Зарплата

КОД_С

ОКЛАД

 

ПРЕМИЯ

 

 

 

1001

5000

 

2000

1002

3500

1500

1003

4000

1500

1004

3500

1500

1005

5000

 

1000

Типы команд SQL

В SQL имеется 6 основных типов команд:

1. Команды языка определения данных (DDL). Они позволяют создавать новые таблицы в БД, добавлять индексы и т.д. Основными командами являются:

CREATE TABLE

Создать таблицу

ALTER TABLE

Модифицировать таблицу

DROP TABLE

Удалить таблицу

CREATE INDEX

Создать индекс

ALTER INDEX

Модифицировать индекс

DROP INDEX

Удалить индекс

2. Команды языка обработки данных (DML). Они используются для добавления, корректировки и удаления строк в таблицах:

INSERT

Вставить данные в таблицу

UPDATE

Обновить данные

DELETE

Удалить данные

3. Команда языка запросов данных (DQL). Она используется для получения данных из таблиц и определения формы представления этих данных:

54

SELECT.

4. Команда языка управления данных (DCL). Они определяют доступ отдельных пользователей и групп пользователей к объектам БД:

GRANT

Предоставить привилегии

REVOKE

Отменить привилегии

5. Команды языка обработки транзакций (TPL).

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

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

BEGIN TRANSACTION

Начать транзакцию

COMMIT TRANSACTION

Завершить транзакцию

SAVE TRANSACTION

Создать точку сохранения внутри тран-

 

закции

6. Команды языка управления курсором (CCL). Они выполняют опе-

рации с отдельными строками одной или нескольких таблиц:

DECLARE CURSOR

Объявить курсор

FETCH INTO

Переместить курсор

UPDATE WHERE CURRENT

Изменить текущее значение

Команда SELECT

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

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

Универсальный оператор SELECT имеет следующую конструкцию:

SELECT [предикат] {*|таблица.*| [таблица.]поле1 [,[таблица.] поле2 [,…]]}

[AS псевдоним1 [, псевдоним2 [, …]]]

FROM выражение [, …] [IN внешняя база данных]

[WHERE …] [GROUP BY …] [HAVING …]

55

[ORDER BY …]

[WITH OWNERACCESS OPTION];

предикат

Используются для ограничения числа возвращаемых

 

записей:

 

ALL – все записи;

 

DISTINCT – записи, различающиеся в указанных для

 

вывода полях;

 

DISTINCTROW – полностью различающиеся записи по

 

всем полям;

 

TOP – возврат заданного числа или процента записей в

 

диапазоне, соответствующем фразе ORDER BY

таблица

Имя таблицы, поля которой формируют выходные дан-

 

ные

поле1, поле2

Имя полей, используемых при отборе. Порядок их следо-

 

вания определяет выходную структуру выборки данных

псевдоним1,

Новые заголовки столбцов результатов данных

псевдоним2

 

FROM

Определяет выражение, используемое для задания ис-

 

точника формирования выборки. Обязательно присутст-

 

вует в каждом операторе

внешняя база данИмя внешней базы данных – источника данных для вы-

ных

борки

WHERE

Определяет условия отбора записей (необязательное)

GROUP BY

Указание полей (максимум 10) для формирования групп,

 

по которым возможно вычисление групповых итогов.

 

Порядок их следования определяет виды итогов (необя-

 

зательное)

HAVING

Определяет условия отбора записей для сгруппирован-

 

ных данных (необязательное)

ORDER BY

Определяет поля, по которым выполняется упорядочение

 

выходных записей:

 

ASC – возрастание;

 

DESC – убывание

WITH

При работе в сети в составе защищенной рабочей группы

OWNERACCESS

для указания пользователям, не обладающим достаточ-

OPTION

ными правами, возможности просматривать результат

 

запроса или выполнять запрос

;Точка с запятой сообщает базе данных, что команда заполнена и готова к выполнению

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

SELECT КОД_С, ФИО, ЗВАНИЕ FROM Сотрудники;

56

Результат этого запроса:

 

 

КОД_С

ФИО

 

ЗВАНИЕ

 

 

 

 

 

 

 

 

 

1001

 

Иванов С. П.

 

майор

 

 

 

1002

 

Петров А.А.

 

сержант

 

 

 

1003

 

Сидоров С.В.

 

капитан

 

 

 

1004

 

Семенов В.А.

 

сержант

 

 

 

1005

 

Кузьмин О.Н.

 

майор

 

 

 

 

Для вывода полного списка столбцов можно использовать звездочку

(*).

 

 

 

 

 

 

 

 

SELECT *

 

 

 

 

 

 

 

FROM Сотрудники;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОД_С

 

ФИО

ДАТА_Р

ЗВАНИЕ

 

 

 

 

 

 

1001

 

Иванов С. П.

11.12.1969

майор

 

 

1002

 

Петров А.А.

07.08.1971

сержант

 

 

1003

 

Сидоров С.В.

23.03.1965

капитан

 

 

1004

 

Семенов В.А.

15.06.1973

сержант

 

 

1005

 

Кузьмин О.Н.

27.10.1965

майор

 

Звездочка (*) покажет все столбцы в их естественном порядке. Но если указать столбцы отдельно, то можно получить их в том порядке, котором хотите.

SELECT КОД_С, ДАТА_Р, ФИО, ЗВАНИЕ

FROM Сотрудники;

КОД_С

ДАТА_Р

ФИО

ЗВАНИЕ

 

 

 

 

1001

11.12.1969

Иванов С. П.

майор

1002

07.08.1971

Петров А.А.

сержант

1003

23.03.1965

Сидоров С.В.

капитан

1004

15.06.1973

Семенов В.А.

сержант

1005

27.10.1965

Кузьмин О.Н.

майор

Исключение дубликатов

 

SELECT ЗВАНИЕ

 

ЗВАНИЕ

FROM Сотрудники;

майор

 

сержант

 

капитан

 

сержант

 

майор

57

Эта команда выводит все значения столбца ЗВАНИЕ из таблицы СОТРУДНИКИ (2 раза – сержант и майор).

Для исключения дубликатов необходимо запрос дополнить ключевым словом DISTINCT:

SELECT DISTINCT ЗВАНИЕ

ЗВАНИЕ

FROM Сотрудники;

капитан

 

майор

 

сержант

DISTINCT – полезный способ избежать избыточности данных, но важно при этом понимать, что вы делаете. Если не хотите потерять некоторые данные, то вы не должны безоглядно использовать DISTINCT, потому что это может скрыть какую-то проблему или какие-то важные данные.

DISTINCT может указываться только один раз в предложении SELECT. Если предложение выбирает несколько полей, то DISTINCT опускает записи, где все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а некоторые различные, будут сохранены.

Параметр ALL

Использование параметра ALL имеет противоположный эффект, будут выводиться все значения. Так как это тот же случай, когда не указывается ни DISTINCT, ни ALL, то ALL – скорее пояснительный, а не действующий аргумент.

Параметр TOP

Использование параметра TOP позволяет выводить заданное количество записей.

SELECT TOP 2 ЗВАНИЕ

ЗВАНИЕ

FROM Сотрудники;

майор

 

сержант

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

WHERE – предложение команд SELECT, которое позволяет устанавливать условия, которые могут быть верными или неверными для любой строки таблицы. Команда извлекает из таблицы только те строки, для которых такое утверждение верно.

SELECT ФИО, ЗВАНИЕ FROM Сотрудники

WHERE ЗВАНИЕ = 'сержант';

ФИО

ЗВАНИЕ

Петров А.А.

сержант

Семенов В.А.

сержант

58

Для числовых значений кавычки не используются.

SELECT ДАТА_Д, КОД_С

ДАТА_Д

КОД_С

FROM Дежурство

01.10.2004

1001

WHERE КОД_С = 1001;

15.12.2004

1001

 

12.09.2004

1001

Реляционные операторы

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

=

Равно

>

Больше

<

Меньше

> =

Больше или равно

< =

Меньше или равно

< >

Не равно

Эти операторы имеют стандартные значения для числовых значений. Для символьных значений, их определение зависит от формата преобразования, ASCII (используется во всех персональных и малых машинах) или EBCDIC (Расширенный Двоично-Десятичный код обмена информации используется в больших компьютерах).

В ASCII все символы верхнего регистра – меньше, чем все символы нижнего регистра («Z» < «a»), а все номера – меньше, чем все символы

(«1» < «Z»).

SELECT *

FROM Сотрудники

WHERE КОД_С>1002;

SELECT *

FROM Сотрудники

WHERE ЗВАНИЕ>'м';

Булевы операторы

Выражения Буля – являются или верными или неверными, подобно предикатам. Операторы Буля и как они работают:

AND берет два аргумента и оценивает их по отношению к истине, верны ли они оба.

OR берет два аргумента и оценивает на правильность, верен ли один из них.

NOT берет одиночный аргумент и заменяет его значение с неверного на верное или верное на неверное.

SELECT * FROM Объекты

59

WHERE УЛИЦА = 'Советская' And ДОМ > 100;

SELECT * FROM Объекты

WHERE УЛИЦА = 'Советская' Or ДОМ <= 10;

NOT может использоваться для инвертирования значений

SELECT *

FROM Сотрудники

WHERE NOT ЗВАНИЕ = 'майор';

SQL может применять NOT с выражением Буля только сразу после него.

SELECT * FROM Объекты

WHERE NOT УЛИЦА = 'Советская' Or ДОМ <= 10;

КОД_О

НАЗВАНИЕ

УЛИЦА

ДОМ

 

 

 

 

2002

НАДЕЖДА

Коммунальная

10

2003

ДЕЛЬФА

Интернациональная

34

NOT применяется только к выражению УЛИЦА = 'Советская'. Вы можете получить другой результат при команде:

SELECT * FROM Объекты

WHERE Not (УЛИЦА = 'Советская' Or ДОМ <= 10);

КОД_О

НАЗВАНИЕ

УЛИЦА

ДОМ

 

 

 

 

2003

ДЕЛЬФА

Интернациональная

34

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

В дополнении к реляционным и булевским операторам, SQL использует специальные операторы IN, BETWEEN, LIKE, и IS NULL.

Оператор IN

Оператор IN проверяет, содержится ли значение в определенном наборе.

SELECT *

FROM Сотрудники

WHERE ЗВАНИЕ IN ('майор', 'капитан');

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]