Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
327.17 Кб
Скачать

Оператор delete

Удаляет записи из таблицы/таблиц, указанных в выражении FROM, удовлетворяющие условию WHERE. Формат:

DELETE [table.*] FROM table WHERE criteria

Оператор DELETE имеет следующие части:

Часть

Описание

table

Не обязательное имя таблицы, из которой удаляются записи. Если во FROM указана только одна таблица, имена таблиц в списке DELETE указывать не нужно

table

Имя таблицы, из которой удаляются записи

criteria

Критерий отбора записей

Для удаления таблицы используется оператор DROP, но при этом удаляется и ее структура. DELETE удаляет только данные. Запись удаляется целиком, если нужно удалить только значение поля/полей, используется запрос на обновление и в поле заносится Null. Оператор DELETE особенно полезен, если нужно удалить сразу много записей. Оператор DELETE не создает набора записей. Чтобы узнать, какие записи удаляются, нужно предварительно сделать запрос на выборку с тем же criteria. Операцию нельзя отменить, неправильно удаленные записи можно восстановить только из резервной копии.

Если удаляется запись из таблицы, входяшей в отношение 1:n со стороны 1 и разрешено каскадное удаление, то записи, относящиеся к ней со стороны n, тоже будут удалены. Например, если такое отношение установлено для таблиц Customers и Orders (1:n), то удаление записи о клиенте автоматически вызовет удаление записей о его заказах.

В следующем примере удаляются все служащие Trainee ():

DELETE * FROM Employees WHERE Title = 'Trainee';

Изменение структуры

Прежде чем работать с данными непосредственно нужно подготовить структуру таблиц для их хранения и указать некоторые свойства этих данных. Прежде всего нужно создать таблицу либо на основе существующей (SELECT...INTO), либо новую (CREATE TABLE). В последнем случае нужно также указать свойства полей – тип, размер, уникальность и т.п.. Последнее выполняется выражением CONSTRAINT. Существующую таблицу можно изменить (ALTER TABLE) или удалить (DROP). Для ускорения поиска в таблице строятся индексы (CREATE INDEX), которые также можно удалять (DROP). С помощью индекса можно также обуспечить уникальность значений поля.

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

Оператор select...Into

Создает запрос, формирующий таблицу. Формат

SELECT field1[, field2[, ...]] INTO newtable [IN externaldatabase] FROM source

Оператор SELECT...INTO имеет следующие части:

Часть

Описание

field1, field2,...

Названия полей, копируемых в новую таблицу

newtable

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

externaldatabase

Путь к внешней базе (см. выражение IN)

source

Имя существующей таблицы (таблиц) или запрос – источник записей

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

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

Следующий пример копирует все записи из таблицы Employees в новую таблицу Emp Backup:

SELECT * INTO [Employees Backup] FROM Employees;

Следующий запрос создает таблицу Sales Representatives, содержающую только со служащих Sales Representative:

SELECT Employees.FirstName, LastName INTO [Sales Representatives] FROM Employees WHERE Title = 'Sales Representative';

Следующий запрос создает копию таблицы Employees и помещает ее в базу Backup.mdb:

SELECT Employees.* INTO Employees IN Backup.mdb FROM Employees;

Следующий запрос создает новую таблицу Trainees на основе таблиц Employees и Payroll (отношение 1:1), добавляя к данным из Employees поле Salary из Payroll для всех служащих Trainee:

SELECT Employees.*, Salary INTO Trainees FROM Employees INNER JOIN Payroll ON Employees.EmployeeID = Payroll.EmployeeID WHERE Title = 'Trainee';

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