Базы данных. Учебное пособие
.pdf(SELECT номер_клиента
FROM Клиенты_счета)
Если будет возвращено пустое множество, то это озна- чает лишь одно – у каждого клиента есть, по крайней мере, один счет.
4.3.5Модификация данных
Оператор UPDATE (коррекция)
Для изменения значений в одном или нескольких столбцах таблицы используется оператор UPDATE. Синтак- сис этого оператора имеет вид:
UPDATE таблица
SET столбец1= выражение1 [, столбец2= выражение2]
[…]
[WHERE условие]
Выражение в предложении SET может быть константой или результатом вычислений.
UPDATE Счет
SET баланс=баланс+1000.00 WHERE баланс>0
Оператор DELETE
Оператор используется для удаления строк из таблиц, синтаксис оператора имеет вид:
DELETE FROM таблица
[WHERE условие]
Предложение WHERE не является обязательным, однако, ес- ли его не включить, то будут удалены все записи таблицы. Полезно использовать оператор SELECT c тем же синтакси- сом, что и оператор DELETE, чтобы предварительно прове- рить, какие записи будут удалены.
Оператор INSERT (включить)
Оператор выполняет функцию добавления записей в таблицу и имеет следующий синтаксис:
81
INSERT INTO
([список столбцов]
{VALUES ({DEFAULT|NULL|выражение} } [,..]
)
4.3.6 Определение данных в SQL
Создание таблиц – CREATE TABLE
Чтобы из таблицы извлекать данные, необходимо ее существование в базе данных; базовое отношение создается с помощью оператора CREATE TABLE. Синтаксис этого опе- ратора имеет вид:
CREATE TABLE таблица
(столбец1 тип1 [(размер1)] [,...]
)
В этом операторе следует указать имя поля, тип данных для него, длину (для некоторых типов данных). Например, создадим таблицу Заказ с полями: номер_заказа, ФИО_исполнителя, сумма_заказа, где номер_заказа – первич- ный ключ:
CREATE TABLE Заказ
(номер_заказа Integer(6) NOT NULL PRYMARY KEY,
ФИО_исполнителя CHAR (20), Сумма_заказа Integer(4)
)
Нельзя использовать оператор создания таблицы не- сколько раз для одной и той же таблицы. Если после ее созда- ния обнаружились неточности в ее определении, то внести изменения можно с помощью оператора ALTER.
Оператор ALTER TABLE (изменение таблицы)
Оператор ALTER TABLE предназначен для изменения структуры существующей таблицы; применяя его можно уда- лить или добавить поле (COLUMN -столбец) к существующей таблице:
82
1. Добавление поля
ALTER TABLE таблица ADD [COLUMN] столбец тип столбца [(размер)].
2. Удаление поля
ALTER TABLE (таблица DROP [COLUMN] столбец [(раз-
мер)] .
Дополнительные ограничения
Для того чтобы указать, что данное поле должно иметь определенное значение в каждой строке таблицы, необходи- мо указывать ограничение NOT NULL. Это ограничение можно накладывать на любой столбец таблицы, если необхо- димо запретить задание неопределенных значений.
Для указания того факта, что атрибут является первич- ным ключом, указывается ограничение PRIMARY KEY (пер- вичный ключ); данное ограничение не прикрепляется к от- дельному столбцу, а относится ко всей таблице в целом. Пер- вичный ключ может распространяться более чем на один ат- рибут таблицы, тогда ограничения налагаются следующим образом:
CREATE TABLE Заказ
(
номер_товара NOT NULL ,
цена NOT NULL,
PRYMARY KEY (номер_товара, цена)
)
Существует ограничение на уникальность атрибутов, не являющихся первичным ключом отношения – UNIQUE (уни- кальный). Это ограничение можно использовать, если есть необходимость определить потенциальные ключи отношения.
Для реляционной модели данных существенным являет- ся указания внешнего ключа. При объявлении внешних клю-
чей необходимо наложить соответствующие ограничения на столбец. Например, в таблице Счета клиентов существует два внешних ключа «номер_счета» и «номер_клиента». Они за- даются следующим образом (REFERENCES – ссылки):
83
CREATE TABLE Счета_клиентов
(номер_счета NOT NULL REFERENCES Счет,
номер_клиента NOT NULL RFERENCES Клиент, PRYMARY KEY (номер_счета, номер_клиента)
На отдельные атрибуты могут накладываться семанти- ческие ограничения, обеспечивающие целостность данных. В таких случаях можно использовать предложение CHECK, чтобы ограничить множество допустимых значения опреде- ленного столбца:
CREATE TABLE Товар
(
номер_товара INTEGER (5) NOT NULL PRIMARY KEY,
категория_товара CHAR (1)
CHECK (категория_товара = ‘A’ OR категория_товара=’D’ );
При таком задании ограничения атрибута «катего- рия_товара» любая попытка ввести значения, отличные от ‘А’ и ‘D’ будет отклонена.
Создание представлений
Представление – логическое отношение, содержимое которого является производным уже существующим отноше- ниям. В языке SQL представление создается при помощи опе- ратора SELECT, который позволяет задать содержимое пред- ставления:
CREATE VIEW Счет1
AS
SELECT * FROM Cчет
WHERE тип_счета = ‘депозитный’
Удаление объектов базы данных
Таблицы и представления удаляются из базы данных при помощи оператора DROP.
DROP TABLE Клиент;
DROP VIEW Счета_клиентов.
84
При удалении таблицы удаляются все представления, которые ссылаются на нее.
4.3.7Управление доступом к данным в SQL
По соображениям безопасности не каждому пользова-
телю прикладной системы может быть разрешено получать информацию из какой-либо таблицы, а тем более изменять в ней данные. Для определения прав пользователей относи- тельно объектов базы данных (таблицы, представления, ин- дексы) в SQL определена пара команд GRANT и REVOKE. Синтаксис операции передачи прав на таблицу:
GRANT <тип_права_на_таблицу>
ON <имя_таблицы> [<список_столбцов>] TO <имя_пользователя>
Права пользователя на уровне таблицы определяются ключе- выми словами:
SELECT - получение информации из таблицы
UPDATE - изменение информации в таблице INSERT - добавление записей в таблицу DELETE - удаление записей из таблицы INDEX - индексирование таблицы
ALTER - изменение схемы определения таблицы ALL - все права
Вполе <тип_права_на_таблицу> может быть указано либо ключевое слово ALL, либо любая комбинация других ключевых слов. Например, предоставим все права на таблицу публикации пользователю Андрей:
GRANT ALL ON публикации TO Андрей;
Пользователю Петр предоставим права на извлечение и добавление записей на эту же таблицу:
GRANT SELECT INSERT ON публикации TO Петр;
Втом случае, когда одинаковые права надо предоста- вить сразу всем пользователям, вместо выполнения команды GRANT для каждого из них, можно вместо имени пользова- теля указать ключевое слово PUBLIC:
GRANT SELECT ON публикации TO PUBLIC;
85
Отмена прав осуществляется командой REVOKE:
REVOKE <тип_права_на_таблицу>
ON <имя_таблицы> [<список_столбцов>] FROM <имя_пользователя>
Вопросы для самопроверки
1.Изложите тезисно историю развития языка структуриро- вания данных.
2.Дайте характеристику разных категорий операторов, ко- торые включает в себя язык SQL.
3.Объясните порядок следования фраз в операторе SELECT. Какие фразы в операторе являются обязательными, а ка- кие — нет?
4.Объясните порядок использования в стандарте языка SQL агрегатных функций.
5.Какие ограничения на агрегатные функции накладывают- ся?
6.В чем заключается суть операции группировки? Каковы условия ее использования?
7.Какие операторы SQL служат для работы с транзакциями?
8.Что понимается под понятием «представление»?
9.Что такое «первичный ключ»? Какие требования к столб- цу, являющемуся первичным ключом?
10.Каким образом можно модифицировать данные?
11.В каких случаях возникает необходимость организации вложенных запросов? Приведите пример.
12.Какими средствами для реализации вложенных запросов располагает оператор SELECT?
13.Во многих случаях для получения ответа на запрос необ-
ходимо объединить информацию из нескольких исходных таблиц. Как это может быть реализовано в языке SQL?
14.Какими структурами представлены в языке SQL операто- ры манипулирования данными, позволяющие модифици-
86
ровать существующую базу данных?
15.Перечислите агрегативные функции языка и операторы, предполагающие их использование.
16.Какую последовательность действий предполагает про- цесс создания такого многокомпонентного объекта, как база данных? Поясните синтаксис необходимых структур.
17.Каким образом можно изменить структуру существующей таблицы?
18.Каким образом в SQL регулируется доступ к данным?
19.Каково назначение операторов REVOKE и GRANT?
20.Каков синтаксис операторов SELECT, UPDATE, REVOKE
и GRANT?
21.Какие операторы в SQL предназначены для работы с тран- закциями?
22.Перечислите операторы манипулирования данными в
SQL.
23.Что вы понимаете под понятием «связывание таблиц»? В каких случаях необходимо применять связывание таблиц?
24.Какие варианты использования ключевого слова HAVING вы знаете?
87
Задания на создание запросов
1.Используя таблицу Фирмы
|
Поле |
|
Тип данных |
Описание |
||
|
Код |
|
Число |
|
Шифр фирмы |
|
|
Фирма |
|
Текст |
|
Название фирмы |
|
|
Директор |
|
Текст |
|
Фамилия директора |
|
|
Адрес |
|
Текст |
|
Адрес фирмы |
|
|
Телефон |
|
Число |
|
Телефон директора |
|
создать запрос Список фирм, содержащий поля: |
||||||
|
Фирма |
Директор |
Адрес |
|
Телефон |
|
2.Используя базу данных Студент (см.задания к главе 2) создать запросы:
a. Список студентов, содержащий поля:
|
Фамилия |
Адрес |
|
Телефон |
|
|
b. Список юношей в возрасте старше 18 лет, содержа- |
||||
щий поля: |
|
|
|
|
|
|
Фамилия |
|
Дата |
||
|
c. Список отличников, содержащий поля: |
||||
|
Код студента |
|
Фамилия |
||
d.Запишите запрос, который выдаёт все строки таблицы “Отметки”, в которых есть отметка “3”.
e.Запишите запрос, который выдает содержимое таблицы “Студенты”, расположив столбцы в следующем порядке: Курс, Фамилия, Имя, Стипендия.
f.Запишите запрос, выдающий Фамилию, Имя и номер курса для студентов, получающих стипендию > 200.
g.Запишите запрос, выдающий фамилии студентов, рей- тинг которых выше 24 баллов.
h.Напишите запрос к таблице “Студенты” для вывода списка фамилий, имен и номера курса всех студентов со сти- пендией большей или равной 200 и живущих в Воронеже.
88
i.Запишите запрос, выдающий фамилию и номер курса для студентов, учащихся на третьем и старших курсах.
j.Запишите запрос, выдающий сведения о студентах, имена которых начинаются на “В” или “М”.
k.Запишите запрос, выдающий сведения о студентах из таблицы “Отметки”, имеющих по Физике отметки только 3 и 4.
l.Напишите запрос к таблице “Студенты” для вывода сведений о студентах со стипендией, лежащей между 200 и 300 р.
m.Запишите запрос, выдающий фамилию и номер курса из таблицы “Отметки”, имеющих по информатике 3 или 5.
3.Запишите команду CREATE TABLE для создания таб- лицы “ВУЗы города Воронежа”.
4.Запишите команду CREATE TABLE для создания таблицы “Прайс-лист (компьютерный)”, которая бы содержа- ла информацию о комплектующих компьютера.
5.Создайте и удалите таблицу “Транспорт”, содержа- щую марку машины, цвет, год выпуска, номер кузова, номер двигателя, пробег.
6.Создать таблицу “Студенты” и добавить столбец Рей-
тинг.
7.Пусть существует таблица с именем “Студенты1”, оп- ределения столбцов которой полностью совпадает со столб- цами таблицы “Студенты”. Вставить в эту таблицу сведения о студентах, средняя оценка которых больше или равна 4.
∙Используя базу данных Сессия, получите:
∙список студентов — претендентов на отчисление, счи- тая, что в отношении S1 находятся окончательные результаты сессии, и поэтому отчислению подлежат все студенты, кото- рые не сдали или не сдавали два и более из положенных экза- менов в сессию;
∙список студентов, переведенных на следующий курс;
∙отчислить студентов по результатам текущей сессии.
89
ГЛАВА 5. ИСПОЛЬЗОВАНИЕ БД
5.1. Классификация СУБД
Разнообразие задач, решаемых с помощью ИС, привело к появлению множества разнотипных систем, отличающихся принципами построения баз данных.
1.По типу данных:
üдокументальные;
üфактографические.
2.По используемому языку общения:
üзамкнутые (имеют самостоятельные языки об- щения пользователей с базами данных, позволя-
ют пользователю непосредственно общаться с базами данных без программиста посредством диалога);
üоткрытые (для общения с базами данных ис- пользуется язык программирования, но при этом необходимо присутствие программиста).
3.По числу поддерживаемых уровней моделей данных.
Теоретически выделяют 3 уровня моделей данных, но
на практике для ПЭВМ часто объединяют концептуальный и внутренний уровень представления.
4.По выполняемым функциям:
üоперационные (позволяют получать информацию
вявном виде баз данных путем какой-либо обра- ботки информации);
üинформационные (позволяют хранение, поиск и выдачу нужных данных из баз данных).
5.По сфере применения:
üуниверсальные (которые можно настроить на любую предметную область путем использова- ния прикладных программ);
üпроблемно-ориентированные (ориентация на те процедуры обработки данных, которые присущи конкретной области применения).
6.По числу пользователей:
üоднопользовательская;
90
