SQL Удалить
Команда SQL DELETE используется для удаления строк или записей из таблицы.
Синтаксис:
Параметр:
| название | Описание |
|---|---|
| table_name | Наименование таблицы. |
| search_condition | укажите условие поиска (логическое выражение), которое имеет одно или несколько условий. |
Синтаксическая диаграмма — УДАЛИТЬ ЗАЯВЛЕНИЕ

Оглавление :
- SQL удаляет записи с помощью где
- SQL Удалить записи, используя операторы сравнения
- SQL удаляет записи, используя оператор IN
- SQL удаляет записи, используя оператор BETWEEN
- SQL удаляет записи, используя оператор LIKE
Пример таблиц, связанных с этой страницей, показан ниже:
Пример таблицы: дни заказа
Пример таблицы: customer1
Чтобы удалить все строки из таблицы daysorder, можно использовать следующий оператор SQL:
SQL удаляет записи с помощью где
На этой странице мы собираемся обсудить, как можно использовать предложение WHERE вместе с командой SQL DELETE для удаления количества строк в зависимости от некоторых условий.
Пример:
Удалить строки из таблицы customer1 со следующим условием:
1. 'cust_country' должно быть 'Canada',
оператор SQL можно использовать:
Код SQL
SQL Удалить записи, используя операторы сравнения
На этой странице мы собираемся обсудить, как оператор COMPARISON вместе с командой SQL DELETE можно использовать для удаления определенных строк из таблицы.
Пример таблиц, связанных с этой страницей, показан ниже:
Пример таблицы: customer1
Образец таблицы: дни заказа
пример
Удалить строки из таблицы customer1 со следующим условием:
1. 'cust_country' должно быть 'Индия',
2 'cus_city' не должен быть 'Chennai',
можно использовать следующий оператор SQL :
Код SQL:
SQL удаляет записи, используя оператор IN
На этой странице мы собираемся обсудить, как оператор SQL IN вместе с командой SQL DELETE можно использовать для удаления определенных строк из таблицы.
Пример:
Чтобы удалить строки из таблицы 'daysorder' со следующим условием —
1. 'advance_amount' должен отличаться от 1000 и 2000,
можно использовать следующий оператор SQL :
Код SQL:
SQL удаляет записи, используя оператор BETWEEN
На этой странице мы собираемся обсудить, как оператор SQL BETWEEN вместе с командой SQL DELETE можно использовать для удаления определенных строк из таблицы.
Пример:
Чтобы удалить строки из таблицы 'daysorder' со следующим условием —
1. 'advance_amount' должен быть в диапазоне от 100 до 800,
можно использовать следующий оператор SQL :
Код SQL:
SQL удаляет записи, используя оператор LIKE
На этой странице мы собираемся обсудить, как оператор SQL LIKE вместе с командой SQL DELETE можно использовать для удаления определенных строк из таблицы.
Пример:
Удалить строки из таблицы customer1 со следующим условием:
1. 'cust_city' должен начинаться с буквы 'L',
можно использовать следующий оператор SQL :
Код SQL:
Упражнения по SQL
- Упражнения по SQL, практика, решение
- SQL Получить данные из таблиц [33 Упражнения]
- Булевы и реляционные операторы SQL [12 упражнений]
- Подстановочные знаки SQL и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ И СОРТИРОВКА в базе данных персонала [38 упражнений]
- SQL СОЕДИНЯЕТ
- SQL СОЕДИНЯЕТСЯ [29 упражнений]
- SQL присоединяется к базе данных HR [27 упражнений]
- ПОДПИСИ SQL [39 упражнений]
- SQL ПОДПИСИ по базе данных HR [55 упражнений]
- ОСНОВНЫЕ запросы к базе данных фильмов [10 упражнений]
- ПОДПИСКИ на фильм База данных [16 упражнений]
- ПРИСОЕДИНЯЕТСЯ к базе данных фильма [24 упражнения]
- Вступление
- ОСНОВНЫЕ запросы по футболу базы данных [29 упражнений]
- ПОДПИСКИ по футбольной базе данных [33 упражнения]
- ПРИСОЕДИНЯЕТСЯ к запросам по футбольной базе данных [61 упражнений]
- Вступление
- ОСНОВНЫЕ, ПОДПИСИ И СОЕДИНЕНИЯ [39 упражнений]
- ОСНОВНЫЕ запросы к базе данных сотрудников [115 упражнений]
- БРОНИРОВАНИЕ на сотрудника База данных [77 Упражнения]
Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.
SQL: DELETE Statement
This SQL tutorial explains how to use the SQL DELETE statement with syntax, examples, and practice exercises.
Description
The SQL DELETE statement is a used to delete one or more records from a table.
Syntax
The syntax for the DELETE statement in SQL is:
Parameters or Arguments
- You do not need to list fields in the DELETE statement since you are deleting the entire row from the table.
DDL/DML for Examples
If you want to follow along with this tutorial, get the DDL to create the tables and the DML to populate the data. Then try the examples in your own database!
Example — DELETE Statement with One Condition
If you run a DELETE statement with no conditions in the WHERE clause, all of the records from the table will be deleted. As a result, you will most often include a WHERE clause with at least one condition in your DELETE statement.
Let’s start with a simple example of a DELETE query that has one condition in the WHERE clause.
In this example, we have a table called suppliers with the following data:
supplier_id supplier_name city state 100 Microsoft Redmond Washington 200 Google Mountain View California 300 Oracle Redwood City California 400 Kimberly-Clark Irving Texas 500 Tyson Foods Springdale Arkansas 600 SC Johnson Racine Wisconsin 700 Dole Food Company Westlake Village California 800 Flowers Foods Thomasville Georgia 900 Electronic Arts Redwood City California Enter the following DELETE statement:
There will be 1 record deleted. Select the data from the suppliers table again:
These are the results that you should see:
supplier_id supplier_name city state 200 Google Mountain View California 300 Oracle Redwood City California 400 Kimberly-Clark Irving Texas 500 Tyson Foods Springdale Arkansas 600 SC Johnson Racine Wisconsin 700 Dole Food Company Westlake Village California 800 Flowers Foods Thomasville Georgia 900 Electronic Arts Redwood City California This example would delete all records from the suppliers table where the supplier_name is ‘Microsoft’.
You may wish to check for the number of rows that will be deleted. You can determine the number of rows that will be deleted by running the following SELECT statement before performing the delete:
This quey will return number of records that will be deleted when you execute the DELETE statement.
COUNT(*) 1 Example — DELETE Statement with more than One Condition
You can have more than one condition in a DELETE statement in SQL using either the AND condition or the OR condition. The AND condition allows you to delete a record if all of the conditions are met. The OR condition deletes a record if any one of the conditions are met.
Let’s look at an example of how to use the DELETE statement with two conditions using the AND condition.
In this example, we have a table called products with the following data:
product_id product_name category_id 1 Pear 50 2 Banana 50 3 Orange 50 4 Apple 50 5 Bread 75 6 Sliced Ham 25 7 Kleenex NULL Enter the following DELETE statement:
There will be 3 records deleted. Select the data from the products table again:
These are the results that you should see:
product_id product_name category_id 1 Pear 50 5 Bread 75 6 Sliced Ham 25 7 Kleenex NULL This example would delete all records from the products table whose category_id is 50 and whose product_name is not Pear.
To check for the number of rows that will be deleted, you can run the following SELECT statement before performing the delete.
This will return number of records that will be deleted when you execute the DELETE statement.
COUNT(*) 3 Example — Using EXISTS with the DELETE Statement
You can also perform more complicated deletes.
You may wish to delete records in one table based on values in another table. Since you can’t list more than one table in the FROM clause when you are performing a delete, you can use the EXISTS clause.
In this example, we have a table called customers with the following data:
customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com And a table called orders with the following data:
order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 4 4000 2016/04/20 5 NULL 2016/05/01 Enter the following DELETE statement:
There will be 1 record deleted. Select the data from the orders table again:
These are the results that you should see:
order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 5 NULL 2016/05/01 This example would delete all records from the orders table where there is a record in the customers table with the last_name of ‘Jackson’ and a matching customer_id value in both tables. In this example, the record for order_id=4 was deleted.
If you want to determine the number of rows that will be deleted, you can run the following SQL SELECT statement before performing the delete.
This will return number of records that will be deleted when you execute the DELETE statement.
COUNT(*) 1 Frequently Asked Questions
Question: How would I write a SQL DELETE statement to delete all records in TableA whose data in field1 & field2 DO NOT match the data in fieldx & fieldz of TableB?
Answer: You could try something like this for your SQL DELETE statement:
Practice Exercises
If you want to test your skills using the SQL DELETE statement, try some of our practice exercises.
These exercises allow you to try out your skills with the DELETE statement. You will be given questions that you need to solve. After each exercise, we provide the solution so you can check your answer. Give it a try!
Глава 15. ВВОД, УДАЛЕНИЕ И ИЗМЕНЕНИЕ ЗНАЧЕНИЯ ПОЛЯ
В этой главе представлены команды, управляющие значениями, представляемыми в таблице. Когда вы закончите эту главу, вы будете способны помещать строки в таблицу, удалять их и изменять индивидуальные значения, представленные в каждой строке.
Будет показано использование запросов при формировании полной группы строк для вставки, а также — как может использоваться предикат для управления изменением значений и удаления строк.
Материал в этой главе составляет полный объём знаний, показывающий, как создавать и управлять информацией в базе данных (БД). Более мощные способы проектирования предикатов будут обсуждены в следующей главе.
КОМАНДЫ МОДИФИКАЦИИ ЯЗЫКА DML
Значения могут быть помещены и удалены из полей тремя командами языка DML (Язык Манипулирования Данными):
Не удивляйтесь, все они упоминались ранее в SQL как команды модификации.
ВВОД ЗНАЧЕНИЙ
Все значения в SQL вводятся с использованием команды модификации INSERT.
В самой простой форме INSERT использует следующий синтаксис:
Так, например, чтобы ввести строку в таблицу Продавцов, вы можете использовать следующее условие:
Команды DML не производят никакого вывода, но ваша программа должна дать вам некоторое подтверждение того, что данные были использованы.
Имя таблицы (в нашем случае — Salespeople (Продавцы)) должно быть предварительно определено в команде CREATE TABLE (см. Главу 17), а каждое значение в предложении значений должно совпадать с типом данных столбца, в который оно вставляется. В ANSI эти значения не могут являться выражениями, что означает, что 3 разрешено, а выражение 2 + 1 — нет. Значения, конечно же, вводятся в таблицу в поимённом порядке, поэтому первое значение с именем автоматически попадает в столбец (поле) 1, второе в столбец 2, и так далее.
ВСТАВКА NULL
Если вам нужно ввести пустое значение (NULL), вы вводите его точно так же, как и обычное значение. Предположим, что ещё нет поля city для мистера Peel. Вы можете вставить в строку значение=NULL в это поле следующим образом:
Так как значение NULL это специальный маркёр, а не просто символьное значение, оно не заключается в одинарные кавычки.
ИМЕНОВАНИЕ СТОЛБЦА ДЛЯ ВСТАВКИ (INSERT)
Вы можете также указывать столбцы, куда вы хотите вставить значение имени. Это позволяет вам вставлять имена в любом порядке.
Предположим, что вы берёте значения для таблицы Заказчиков из отчёта, выводимого на принтер, который помещает их в таком порядке: city, cname, cnum; и, для упрощения, вы хотите ввести значения в том же порядке:Обратите внимание, что столбцы rating и snum отсутствуют. Это значит, что в эти строки автоматически установлены значения по умолчанию. По умолчанию может быть введено значение NULL или другое значение, определяемое по умолчанию. Если ограничение запрещает использование значения NULL в данном столбце и в этот столбец не установлено значение по умолчанию, этот столбец должен быть обеспечен значением для любой команды INSERT, которая относится к таблице (смотри в Главе 18 информацию об ограничениях на значения NULL и "по умолчанию").
ВСТАВКА РЕЗУЛЬТАТОВ ЗАПРОСА
Вы можете также использовать команду INSERT, чтобы получать или выбирать значения из одной таблицы и помещать их в другую для использования их вместе с запросом. Чтобы сделать это, вы просто заменяете предложение VALUES (из предыдущего примера) на соответствующий запрос:
Здесь выбираются все значения произведённые запросом — то есть все строки из таблицы Продавцов со значениями city = "London" — и помещаются в таблицу Londonstaff. Чтобы это работало, таблица Londonstaff должна отвечать следующим условиям:
- она должна уже быть создана командой CREATE TABLE;
- она должна иметь четыре столбца, которые совпадают с таблицей Продавцов типами данных; то есть первый, второй и т.д. столбцы каждой таблицы должны иметь одинаковый тип данных (причем они не должны иметь одинаковых имён).
Общее правило таково, что вставляемые столбцы таблицы должны совпадать со столбцами, выводимыми подзапросом, в данном случае — для всей таблицы Продавцов.
Londonstaff это теперь независимая таблица, которая получила некоторые значения из таблицы Продавцов (Salespeople). Если значения в таблице Продавцов будут вдруг изменены, это никак не отразится на таблице Londonstaff (хотя вы могли бы создать такой эффект с помощью Представления (VIEW), описанного в Главе 20).
Так как или запрос, или команда INSERT могут указывать столбцы по имени, вы можете, если захотите, переместить только выбранные столбцы, а также переупорядочить только те столбцы, которые вы выбрали.Предположим, например, что вы решили сформировать новую таблицу с именем Daytotals, которая просто будет следить за общим количеством долларов сумм приобретений, упорядоченных по каждому дню. Вы можете ввести эти данные независимо от таблицы Заказов, но сначала вы должны заполнить таблицу Daytotals информацией, ранее представленной в таблице Заказов. Учитывая, что таблица Заказов охватывает последний финансовый год, а не только несколько дней, как в нашем примере, вы можете увидеть преимущество использования следующего условия INSERT в подсчёте и вводе значений:
Обратите внимание, что, как предложено ранее, имена столбцов таблицы Заказов и таблицы Daytotals не должны быть одинаковыми. Кроме того, если дата приобретения и общее количество это единственные столбцы в таблице и они находятся в данном заказе, их имена могут быть исключены из вывода из-за их очевидной простоты.
УДАЛЕНИЕ СТРОК ИЗ ТАБЛИЦ
Вы можете удалять строки из таблицы командой модификации DELETE. Она может удалять только строки, а не индивидуальные значения полей, так что параметр поля является необязательным или недоступным. Чтобы удалить всё содержание таблицы Продавцов, вы можете ввести следующее условие:
Теперь, когда таблица пуста, её можно окончательно удалить командой DROP TABLE (это объясняется в Главе 17). Обычно вам нужно удалить только некоторые определённые строки из таблицы. Чтобы определить, какие строки будут удалены, вы используете предикат так же, как вы это делали для запросов. Например, чтобы удалить продавца Axelrod из таблицы, вы можете ввести
Мы использовали поле snum вместо поля sname, потому что лучшая тактика — использование первичных ключей, когда вы хотите, чтобы действию подвергалась одна, и только одна, строка. Для вас это аналогично действию первичного ключа. Конечно, вы можете также использовать DELETE с предикатом, который выбирал бы группу строк, как показано в этом примере:
ИЗМЕНЕНИЕ ЗНАЧЕНИЙ ПОЛЯ
Теперь, когда вы уже можете вводить и удалять строки таблицы, вы должны узнать, как изменять некоторые или все значения в существующей строке. Это выполняется командой UPDATE. Эта команда содержит предложение UPDATE, в котором указано имя используемой таблицы, и предложение SET, которое указывает на изменение, выполняемое для определенного столбца. Например, чтобы изменить оценки всех заказчиков на 200, вы можете ввести
МОДИФИЦИРОВАНИЕ ТОЛЬКО ОПРЕДЕЛЕННЫХ СТРОК
Конечно, вы не всегда захотите указывать все строки таблицы для изменения единственного значения, так что UPDATE, наподобие DELETE, может использовать предикаты. Вот как, например, можно выполнить изменение, одинаковое для всех заказчиков продавца Peel (имеющего snum=1001):
КОМАНДА UPDATE ДЛЯ НЕСКОЛЬКИХ СТОЛБЦОВ
Однако вы не обязаны ограничивать себя модифицированием единственного столбца с помощью команды UPDATE. Предложение SET может назначать любое число столбцов, отделяемых запятыми. Все указанные назначения могут быть сделаны для любой табличной строки, но только для одной в каждый момент времени. Предположим, что продавец Motika ушел на пенсию и мы хотим переназначить его номер новому продавцу:
Эта команда передаст новому продавцу Gibson, всех текущих заказчиков бывшего продавца Motika и заказы в том виде, в котором они были скомпонованы для Motika, с помощью поля snum. Вы не можете, однако, модифицировать сразу несколько таблиц в одной команде, отчасти потому, что вы не можете использовать префиксы таблиц со столбцами, изменёнными предложением SET. Другими словами, вы не можете сказать "SET Salespeople.sname = Gibson" в команде UPDATE, вы можете сказать только так: "SET sname = Gibson".
ИСПОЛЬЗОВАНИЕ ВЫРАЖЕНИЙ ДЛЯ МОДИФИКАЦИИ
Вы можете использовать скалярные выражения в предложении SET команды UPDATE, включив его в выражение поля, которое будет изменено. В этом их отличие от предложения VALUES команды INSERT, в котором выражения не могут использоваться; это свойство скалярных выражений — весьма полезная особенность. Предположим, что вы решили удвоить комиссионные всем вашим продавцам. Вы можете использовать следующее выражение:
Всякий раз, когда вы обращаетесь к указанному значению столбца в предложении SET, произведённое значение может получится из текущей строки; прежде в ней будут сделаны какие-то изменения с помощью команды UPDATE. Естественно, вы можете скомбинировать эти особенности и сказать "удвоить комиссию всем продавцам в Лондоне" таким предложением:
МОДИФИЦИРОВАНИЕ NULL-ЗНАЧЕНИЙ
Предложение SET это не предикат. Оно может вводить пустые NULL-значения так же, как оно вводило значения, не используя какого-то специального синтаксиса (такого, например, как IS NULL). Так что, если вы хотите установить все оценки заказчиков в Лондоне в NULL, вы можете ввести следующее предложение:
что обнулит все оценки заказчиков в Лондоне.
РЕЗЮМЕ
Теперь вы овладели мастерством управления содержанием вашей базы данных с помощью трёх простых команд:
Вы обучались использованию предиката с командами UPDATE и DELETE, чтобы определять, на которую из строк будет воздействовать команда. Конечно, предикаты как таковые не значимы для INSERT, потому что обсуждаемая строка не существует в таблице до окончания выполнения команды INSERT. Однако вы можете использовать запросы с INSERT, чтобы сразу помещать все наборы строк в таблицу. Причём вы можете делать это со столбцами в любом порядке.
Вы узнали, что значения по умолчанию могут помещаться в столбцы, если вы не устанавливаете эти значения явно.
Вы также видели использование стандартного значения по умолчанию, каковым является NULL.
Кроме того, вы поняли, что UPDATE может использовать выражение, тогда как INSERT не может.Следующая глава расширит ваше познания, показав вам, как использовать подзапросы с этими командами. Эти подзапросы напоминают те, с которыми вы уже знакомы, но имеются некоторые специальные выводы и ограничения при использовании подзапросов в командах DML, что мы обсудим в Главе 16.
Глава 15. ВВОД, УДАЛЕНИЕ И ИЗМЕНЕНИЕ ЗНАЧЕНИЯ ПОЛЯ
В этой главе представлены команды, управляющие значениями, представляемыми в таблице. Когда вы закончите эту главу, вы будете способны помещать строки в таблицу, удалять их и изменять индивидуальные значения, представленные в каждой строке.
Будет показано использование запросов при формировании полной группы строк для вставки, а также — как может использоваться предикат для управления изменением значений и удаления строк.
Материал в этой главе составляет полный объём знаний, показывающий, как создавать и управлять информацией в базе данных (БД). Более мощные способы проектирования предикатов будут обсуждены в следующей главе.
КОМАНДЫ МОДИФИКАЦИИ ЯЗЫКА DML
Значения могут быть помещены и удалены из полей тремя командами языка DML (Язык Манипулирования Данными):
Не удивляйтесь, все они упоминались ранее в SQL как команды модификации.
ВВОД ЗНАЧЕНИЙ
Все значения в SQL вводятся с использованием команды модификации INSERT.
В самой простой форме INSERT использует следующий синтаксис:
Так, например, чтобы ввести строку в таблицу Продавцов, вы можете использовать следующее условие:
Команды DML не производят никакого вывода, но ваша программа должна дать вам некоторое подтверждение того, что данные были использованы.
Имя таблицы (в нашем случае — Salespeople (Продавцы)) должно быть предварительно определено в команде CREATE TABLE (см. Главу 17), а каждое значение в предложении значений должно совпадать с типом данных столбца, в который оно вставляется. В ANSI эти значения не могут являться выражениями, что означает, что 3 разрешено, а выражение 2 + 1 — нет. Значения, конечно же, вводятся в таблицу в поимённом порядке, поэтому первое значение с именем автоматически попадает в столбец (поле) 1, второе в столбец 2, и так далее.
ВСТАВКА NULL
Если вам нужно ввести пустое значение (NULL), вы вводите его точно так же, как и обычное значение. Предположим, что ещё нет поля city для мистера Peel. Вы можете вставить в строку значение=NULL в это поле следующим образом:
Так как значение NULL это специальный маркёр, а не просто символьное значение, оно не заключается в одинарные кавычки.
ИМЕНОВАНИЕ СТОЛБЦА ДЛЯ ВСТАВКИ (INSERT)
Вы можете также указывать столбцы, куда вы хотите вставить значение имени. Это позволяет вам вставлять имена в любом порядке.
Предположим, что вы берёте значения для таблицы Заказчиков из отчёта, выводимого на принтер, который помещает их в таком порядке: city, cname, cnum; и, для упрощения, вы хотите ввести значения в том же порядке:Обратите внимание, что столбцы rating и snum отсутствуют. Это значит, что в эти строки автоматически установлены значения по умолчанию. По умолчанию может быть введено значение NULL или другое значение, определяемое по умолчанию. Если ограничение запрещает использование значения NULL в данном столбце и в этот столбец не установлено значение по умолчанию, этот столбец должен быть обеспечен значением для любой команды INSERT, которая относится к таблице (смотри в Главе 18 информацию об ограничениях на значения NULL и "по умолчанию").
ВСТАВКА РЕЗУЛЬТАТОВ ЗАПРОСА
Вы можете также использовать команду INSERT, чтобы получать или выбирать значения из одной таблицы и помещать их в другую для использования их вместе с запросом. Чтобы сделать это, вы просто заменяете предложение VALUES (из предыдущего примера) на соответствующий запрос:
Здесь выбираются все значения произведённые запросом — то есть все строки из таблицы Продавцов со значениями city = "London" — и помещаются в таблицу Londonstaff. Чтобы это работало, таблица Londonstaff должна отвечать следующим условиям:
- она должна уже быть создана командой CREATE TABLE;
- она должна иметь четыре столбца, которые совпадают с таблицей Продавцов типами данных; то есть первый, второй и т.д. столбцы каждой таблицы должны иметь одинаковый тип данных (причем они не должны иметь одинаковых имён).
Общее правило таково, что вставляемые столбцы таблицы должны совпадать со столбцами, выводимыми подзапросом, в данном случае — для всей таблицы Продавцов.
Londonstaff это теперь независимая таблица, которая получила некоторые значения из таблицы Продавцов (Salespeople). Если значения в таблице Продавцов будут вдруг изменены, это никак не отразится на таблице Londonstaff (хотя вы могли бы создать такой эффект с помощью Представления (VIEW), описанного в Главе 20).
Так как или запрос, или команда INSERT могут указывать столбцы по имени, вы можете, если захотите, переместить только выбранные столбцы, а также переупорядочить только те столбцы, которые вы выбрали.Предположим, например, что вы решили сформировать новую таблицу с именем Daytotals, которая просто будет следить за общим количеством долларов сумм приобретений, упорядоченных по каждому дню. Вы можете ввести эти данные независимо от таблицы Заказов, но сначала вы должны заполнить таблицу Daytotals информацией, ранее представленной в таблице Заказов. Учитывая, что таблица Заказов охватывает последний финансовый год, а не только несколько дней, как в нашем примере, вы можете увидеть преимущество использования следующего условия INSERT в подсчёте и вводе значений:
Обратите внимание, что, как предложено ранее, имена столбцов таблицы Заказов и таблицы Daytotals не должны быть одинаковыми. Кроме того, если дата приобретения и общее количество это единственные столбцы в таблице и они находятся в данном заказе, их имена могут быть исключены из вывода из-за их очевидной простоты.
УДАЛЕНИЕ СТРОК ИЗ ТАБЛИЦ
Вы можете удалять строки из таблицы командой модификации DELETE. Она может удалять только строки, а не индивидуальные значения полей, так что параметр поля является необязательным или недоступным. Чтобы удалить всё содержание таблицы Продавцов, вы можете ввести следующее условие:
Теперь, когда таблица пуста, её можно окончательно удалить командой DROP TABLE (это объясняется в Главе 17). Обычно вам нужно удалить только некоторые определённые строки из таблицы. Чтобы определить, какие строки будут удалены, вы используете предикат так же, как вы это делали для запросов. Например, чтобы удалить продавца Axelrod из таблицы, вы можете ввести
Мы использовали поле snum вместо поля sname, потому что лучшая тактика — использование первичных ключей, когда вы хотите, чтобы действию подвергалась одна, и только одна, строка. Для вас это аналогично действию первичного ключа. Конечно, вы можете также использовать DELETE с предикатом, который выбирал бы группу строк, как показано в этом примере:
ИЗМЕНЕНИЕ ЗНАЧЕНИЙ ПОЛЯ
Теперь, когда вы уже можете вводить и удалять строки таблицы, вы должны узнать, как изменять некоторые или все значения в существующей строке. Это выполняется командой UPDATE. Эта команда содержит предложение UPDATE, в котором указано имя используемой таблицы, и предложение SET, которое указывает на изменение, выполняемое для определенного столбца. Например, чтобы изменить оценки всех заказчиков на 200, вы можете ввести
МОДИФИЦИРОВАНИЕ ТОЛЬКО ОПРЕДЕЛЕННЫХ СТРОК
Конечно, вы не всегда захотите указывать все строки таблицы для изменения единственного значения, так что UPDATE, наподобие DELETE, может использовать предикаты. Вот как, например, можно выполнить изменение, одинаковое для всех заказчиков продавца Peel (имеющего snum=1001):
КОМАНДА UPDATE ДЛЯ НЕСКОЛЬКИХ СТОЛБЦОВ
Однако вы не обязаны ограничивать себя модифицированием единственного столбца с помощью команды UPDATE. Предложение SET может назначать любое число столбцов, отделяемых запятыми. Все указанные назначения могут быть сделаны для любой табличной строки, но только для одной в каждый момент времени. Предположим, что продавец Motika ушел на пенсию и мы хотим переназначить его номер новому продавцу:
Эта команда передаст новому продавцу Gibson, всех текущих заказчиков бывшего продавца Motika и заказы в том виде, в котором они были скомпонованы для Motika, с помощью поля snum. Вы не можете, однако, модифицировать сразу несколько таблиц в одной команде, отчасти потому, что вы не можете использовать префиксы таблиц со столбцами, изменёнными предложением SET. Другими словами, вы не можете сказать "SET Salespeople.sname = Gibson" в команде UPDATE, вы можете сказать только так: "SET sname = Gibson".
ИСПОЛЬЗОВАНИЕ ВЫРАЖЕНИЙ ДЛЯ МОДИФИКАЦИИ
Вы можете использовать скалярные выражения в предложении SET команды UPDATE, включив его в выражение поля, которое будет изменено. В этом их отличие от предложения VALUES команды INSERT, в котором выражения не могут использоваться; это свойство скалярных выражений — весьма полезная особенность. Предположим, что вы решили удвоить комиссионные всем вашим продавцам. Вы можете использовать следующее выражение:
Всякий раз, когда вы обращаетесь к указанному значению столбца в предложении SET, произведённое значение может получится из текущей строки; прежде в ней будут сделаны какие-то изменения с помощью команды UPDATE. Естественно, вы можете скомбинировать эти особенности и сказать "удвоить комиссию всем продавцам в Лондоне" таким предложением:
МОДИФИЦИРОВАНИЕ NULL-ЗНАЧЕНИЙ
Предложение SET это не предикат. Оно может вводить пустые NULL-значения так же, как оно вводило значения, не используя какого-то специального синтаксиса (такого, например, как IS NULL). Так что, если вы хотите установить все оценки заказчиков в Лондоне в NULL, вы можете ввести следующее предложение:
что обнулит все оценки заказчиков в Лондоне.
РЕЗЮМЕ
Теперь вы овладели мастерством управления содержанием вашей базы данных с помощью трёх простых команд:
Вы обучались использованию предиката с командами UPDATE и DELETE, чтобы определять, на которую из строк будет воздействовать команда. Конечно, предикаты как таковые не значимы для INSERT, потому что обсуждаемая строка не существует в таблице до окончания выполнения команды INSERT. Однако вы можете использовать запросы с INSERT, чтобы сразу помещать все наборы строк в таблицу. Причём вы можете делать это со столбцами в любом порядке.
Вы узнали, что значения по умолчанию могут помещаться в столбцы, если вы не устанавливаете эти значения явно.
Вы также видели использование стандартного значения по умолчанию, каковым является NULL.
Кроме того, вы поняли, что UPDATE может использовать выражение, тогда как INSERT не может.Следующая глава расширит ваше познания, показав вам, как использовать подзапросы с этими командами. Эти подзапросы напоминают те, с которыми вы уже знакомы, но имеются некоторые специальные выводы и ограничения при использовании подзапросов в командах DML, что мы обсудим в Главе 16.