- •Выборка данных
- •Оператор select
- •Выражения sql
- •Выражение from
- •Операции left join, right join
- •Операция inner join
- •Выражение in
- •Предикаты all, distinct, distinctrow, top
- •Объявление with owneraccess option
- •Выражение where
- •Операция Like
- •Операция In
- •Операция Between...And
- •Подзапрос
- •Выражение order by
- •Выражение group by
- •Выражение having
- •Оператор union
- •Оператор transform
- •Выражение procedure
- •Объявление parameters
- •Изменение данных
- •Оператор update
- •Оператор insert into
- •Оператор delete
- •Изменение структуры
- •Оператор select...Into
- •Оператор create table3
- •Выражение constraint4
- •Оператор alter table5
- •Оператор create index6
- •Оператор drop7
- •Агрегатные функции
- •Функция Count
- •Функция Avg
- •Функция Sum
- •Функции Var и VarP
- •Функции StDev и StDevP
- •Функции Min, Max
- •Функции First, Last
Оператор 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';
