Файл: Базы данных - уч. пособие.pdf

Добавлен: 28.11.2018

Просмотров: 10884

Скачиваний: 43

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

96

Глава 5. Языки управления и манипулирования данными

[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}],

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

Чтобы запретить совпадение значений индексированных полей в разных запи-

сях, используется зарезервированное слово UNIQUE. Необязательное предложение
WITH позволяет задать условия назначения. Например:

1) с помощью параметра DISALLOW NULL можно запретить значения NULL

в индексированных полях новых записей;

2) параметр IGNORE NULL позволяет запретить включение в индекс записей,

имеющих значения NULL в индексированных полях;

3) зарезервированное слово PRIMARY позволяет назначить индексированные

поля ключом. Такой индекс по умолчанию является уникальным, следова-
тельно, зарезервированное слово UNIQUE можно опустить.

В следующем примере создается уникальный индекс, не допускающий ввод

повторяющихся значений в поле «Номер зачетной книжки» в таблице «Студент».

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.4

. . . . . . . . . . . . . . . . . . . . .

CREATE UNIQUE INDEX New_index ON

Студент (Номер_зачетной_книжки) WITH IGNORE NULL;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Ключевые слова IGNORE NULL позволяют добавлять в таблицу записи по сту-

дентам без обязательного ввода номера зачетной книжки (рис. 5.6). Нажатие пик-
тограммы «Индексы» в конструкторе таблиц открывает одноименное окно с пе-
речнем индексов для данной таблицы, где отображается созданный в результате
выполнения запроса уникальный индекс New_index.

Удаление таблицы/индекса

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Инструкция DROP удаляет существующую таблицу из базы дан-
ных или удаляет существующий индекс из таблицы.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Синтаксис:

DROP {TABLE таблица | INDEX индекс ON таблица},


background image

5.1 Язык SQL

97

где таблица — имя таблицы, которую следует удалить или из которой следует уда-
лить индекс; индекс — имя индекса, удаляемого из таблицы.

Рис. 5.6 – Результат создания уникального индекса

Прежде чем удалить таблицу или удалить из нее индекс, необходимо ее за-

крыть. Следует отметить, что таблица и индекс удаляются из базы данных безвоз-
вратно.

В следующем примере удалим созданный в предыдущем примере индекс «New_

index».

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.5

. . . . . . . . . . . . . . . . . . . . .

DROP INDEX New_index ON Студент;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

В результате выполнения этого запроса в окне Индексы (рис. 5.7) остался

только уникальный индекс, созданный автоматически при определении первич-
ного ключа.


background image

98

Глава 5. Языки управления и манипулирования данными

Рис. 5.7 – Окно «Индексы» после удаления индекса «New_index»

Добавление записей

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Инструкция INSERT INTO добавляет запись или несколько запи-
сей в заданную таблицу.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Синтаксис команды:
а) запрос на добавление нескольких записей:

INSERT INTO назначение [(поле_1 [, поле_2 [,. . .]])]
SELECT [источник.]поле_1 [, поле_2 [,. . .]]
FROM выражение

б) запрос на добавление одной записи:

INSERT INTO назначение [(поле_1 [, поле_2 [,. . .]])]
VALUES (значение_1 [, значение_2 [,. . .]]),

где назначение — имя таблицы или запроса, в который добавляются записи; ис-
точник — имя таблицы или запроса, откуда копируются записи; поле_1, поле_2 —
имена полей для добавления данных, если они следуют за аргументом «Назначе-
ние»; имена полей, из которых берутся данные, если они следуют за аргументом
источник; выражение — имена таблицы или таблиц, откуда вставляются данные.
Это выражение может быть именем отдельной таблицы или результатом опера-
ций INNER JOIN, LEFT JOIN или RIGHT JOIN, а также сохраненным запросом;
значение_1, значение_2 — значения, добавляемые в указанные поля новой записи.
Каждое значение будет вставлено в поле, занимающее то же положение в спис-
ке: значение_1 вставляется в поле_1 в новой записи, значение_2 — в поле_2 и т. д.
Каждое значение текстового поля следует заключать в кавычки (' '), для разделения
значений используются запятые.

Инструкцию INSERT INTO можно использовать для добавления одной запи-

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


background image

5.1 Язык SQL

99

Инструкцию INSERT INTO можно также использовать для добавления набора

записей из другой таблицы или запроса с помощью предложения SELECT. . .FROM,
как показано выше в запросе на добавление нескольких записей. В этом случае
предложение SELECT определяет поля, добавляемые в указанную таблицу «На-
значение». Инструкция INSERT INTO является необязательной, однако если она
присутствует, то должна находиться перед инструкцией SELECT.

Запрос на добавление записей копирует записи из одной или нескольких таб-

лиц в другую таблицу. Таблицы, которые содержат добавляемые записи, не изме-
няются.

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

значения полей одной новой записи с помощью предложения VALUES. Если спи-
сок полей опущен, предложение VALUES должно содержать значение для каж-
дого поля таблицы, в противном случае инструкция INSERT не будет выполнена.
Можно использовать дополнительную инструкцию INSERT INTO с предложением
VALUES для каждой добавляемой новой записи.

В следующем примере добавим новую запись в таблицу «Студент».

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.6

. . . . . . . . . . . . . . . . . . . . .

INSERT INTO Студент (Номер_зачетной_книжки, ФИО_студента, Место_рож-

дения, Дата_рождения)

VALUES (201454321, 'Иванов Иван Петрович', 'г. Томск', '12.02.1996');

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Заметим, что поскольку поле «Код_студента» имеет тип данных «Счетчик»

и формируется автоматически, то в перечне новых значений для полей мы его
опускаем. На рисунке 5.8 представлена таблица «Студент» с новой записью.

Рис. 5.8 – Результат добавления записи в таблицу «Студент»

Аналогично можно добавить данные в таблицу «Задолженность_за обучение».
Обновление данных

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Синтаксис команды:

UPDATE таблица
SET новое Значение
WHERE условие Отбора;


background image

100

Глава 5. Языки управления и манипулирования данными

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

При выполнении этой инструкции будут изменены только записи, удовлетворя-

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

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.7

. . . . . . . . . . . . . . . . . . . . .

Следующая инструкция SQL увеличивает сумму задолженности всех студен-

тов, по которым есть сведения в таблице «Задолженность_за_обучение», на 10%:

UPDATE Задолженность_за_обучение
SET Сумма_задолженности = Сумма_задолженности * 1.1;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Инструкция SELECT. При выполнении инструкции SELECT СУБД
находит указанную таблицу или таблицы, извлекает заданные
столбцы, выделяет строки, соответствующие условию отбора,
и сортирует или группирует результирующие строки в указанном
порядке в виде набора записей.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Синтаксис команды:

SELECT [предикат] {*| таблица.* | [таблица.] поле_1
[AS псевдоним_2] [, [таблица.] поле_2 [AS псевдоним_2] [,. . .]]}
FROM выражение [,. . .]
[WHERE. . .]
[GROUP BY. . .]
[HAVING. . .]
[ORDER BY. . .],

где предикат — один из следующих предикатов отбора: ALL, DISTINCT, DISTINCT-
ROW, TOP. Данные ключевые слова используются для ограничения числа воз-
вращаемых записей. Если они отсутствуют, по умолчанию используется предикат
ALL; * указывает, что результирующий набор записей будет содержать все по-
ля заданной таблицы или таблиц. Следующая инструкция отбирает все поля из
таблицы «Студенты»: SELECT * FROM Студенты; таблица — имя таблицы, из ко-
торой выбираются записи; поле_1, поле_2 — имена полей, из которых должны быть
отобраны данные; псевдоним_1, псевдоним_2 — ассоциации, которые станут заго-
ловками столбцов вместо исходных названий полей в таблице; выражение — имена