ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 10884
Скачиваний: 43
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 таблица},
5.1 Язык SQL
97
где таблица — имя таблицы, которую следует удалить или из которой следует уда-
лить индекс; индекс — имя индекса, удаляемого из таблицы.
Рис. 5.6 – Результат создания уникального индекса
Прежде чем удалить таблицу или удалить из нее индекс, необходимо ее за-
крыть. Следует отметить, что таблица и индекс удаляются из базы данных безвоз-
вратно.
В следующем примере удалим созданный в предыдущем примере индекс «New_
index».
. . . . . . . . . . . . . . . . . . . . . .
Пример 5.5
. . . . . . . . . . . . . . . . . . . . .
DROP INDEX New_index ON Студент;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
В результате выполнения этого запроса в окне Индексы (рис. 5.7) остался
только уникальный индекс, созданный автоматически при определении первич-
ного ключа.
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. Записи добавляются в ко-
нец таблицы.
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 условие Отбора;
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 — ассоциации, которые станут заго-
ловками столбцов вместо исходных названий полей в таблице; выражение — имена