Простые примеры использования SELECT
Синтаксис:
> SELECT <fields1> FROM <table>
* где fields1 — поля для выборки через запятую, также можно указать все поля знаком *; table — имя таблицы, из которой вытаскиваем данные; conditions — условия выборки; fields2 — поле или поля через запятую, по которым выполнить сортировку; count — количество строк для выгрузки.
* запрос в квадратных скобках не является обязательным для выборки данных.
> SELECT * FROM users
* в данном примере мы получаем список всех записей из таблицы users.
2. Выборка данных с объединением двух таблиц (JOIN)
SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id
* в данном примере идет выборка данных с объединением таблиц users и users_rights. Объединяются они по полям user_id (в таблице users_rights) и id (users). Извлекается поле name из первой таблицы и все поля из второй.
3. Выборка с интервалом по времени и/или дате
а) известна точка начала и определенный временной интервал:
> SELECT * FROM users WHERE date >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
* будут выбраны данные за последний час (поле date).
б) известны дата начала и дата окончания:
> SELECT * FROM users WHERE date >= ‘2017-10-25’ AND date <= ‘2017-11-25’
* выбираем данные в промежутке между 25.10.2017 и 25.11.2017.
в) известны даты начала и окончания + время:
> SELECT * FROM users WHERE DATE(date) BETWEEN ‘2018-03-25 00:15:00’ AND ‘2018-04-25 15:33:09’;
* выбираем данные в промежутке между 25.03.2018 0 часов 15 минут и 25.04.2018 15 часов 33 минуты и 9 секунд.
г) вытаскиваем данные за определенные месяц и год:
> SELECT * FROM study WHERE MONTH(date) = 4 AND YEAR(date) = 2018
* извлечем данные, где в поле date присутствуют значения для апреля 2018 года.
4. Выборка максимального, минимального и среднего значения
> SELECT max(area), min(area), avg(area) FROM country
* max — максимальное значение; min — минимальное; avg — среднее.
5. Использование длины строки
> SELECT * FROM users WHERE CHAR_LENGTH(name) = 5;
* данный запрос должен показать всех пользователей, имя которых состоит из 5 символов.
6. Использование лимитов (LIMIT)
Применяется для ограничения количества выводимых результатов. Синтаксис:
<основной запрос> LIMIT <число1>
* где число1 — сколько результатов вернуть; число2 — сколько результатов пропустить, необязательный параметр — если его не писать, то отсчет начнется с первой строки.
а) извлечь максимум 15 строк:
> SELECT * FROM users LIMIT 15;
б) выбрать строки с 16 по 25 (запрос со смещением):
> SELECT * FROM users LIMIT 15, 10;
* 15 строк пропускаем, 10 извлекаем.
Ordering by specific field values
The fruit table has a «name» field with the following unique values: Apple, Banana, Orange, Pear. Each of these unique values has a set of varieties.
Let’s say, for argument’s sake, that we want to order the data in a specific order by Banana, Apple, Pear, Orange and then by their varieties. It’s not possible to do this using a regular ORDER BY clause because an ascending or descending sort on this field will not work. We would either need some form of sort column or another alternative.
Using the FIELD( ) function in the ORDER BY clause we can achieve this. It works by specifying the column to sort by and then the values to sort in order. For example:
SELECT * FROM fruit ORDER BY FIELD(name, 'Banana', 'Apple', 'Pear', 'Orange'), variety;
The resulting data from the example table looks like this:
+----------+--------+---------------------+ | fruit_id | name | variety | +----------+--------+---------------------+ | 11 | Banana | Burro | | 12 | Banana | Cavendish | | 10 | Banana | Plantain | | 6 | Apple | Cox's Orange Pippin | | 7 | Apple | Granny Smith | | 1 | Apple | Red Delicious | | 8 | Pear | Anjou | | 4 | Pear | Bartlett | | 2 | Pear | Comice | | 5 | Orange | Blood | | 3 | Orange | Navel | | 9 | Orange | Valencia | +----------+--------+---------------------+
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Кейс «Считаем средний чек, выбирая данные с определенной даты»
На скриншоте массив данных, с которым мы будем работать:
Наша задача: отобрать строки с продажами начиная с 1 апреля и посчитать по ним средний чек, используя количество клиентов, то есть получить среднее взвешенное.
Начнем. Создадим QUERY с умножением количества клиентов (столбец B) на средний чек (столбец С) начиная с определенной даты:
Правильно использовать дату в формуле QUERY так:
- QUERY работает с датой только в формате yyyy-mm-dd. Чтобы перевести дату из ячейки Е1 в этот вид, используем формулу ТЕКСТ (TEXT) с условием «yyyy-mm-dd»;
- перед датой и перед апострофом нужно написать date;
- можно и не делать ссылку на ячейку с датой, а написать ее сразу в QUERY, тогда формула будет выглядеть так:
дата с двух сторон обрамляется одиночными кавычками (‘).
Вернемся к тому, что у нас получилось. Наша формула выдала вот такой массив данных:
Это построчные произведения количества клиентов на средний чек. Нам нужно просуммировать их, для этого введем перед формулой СУММ (SUM):
Чтобы получить средний чек, получившееся число нужно разделить на общую сумму клиентов в отобранных строках. Чтобы закрепить использование QUERY, опять воспользуемся этой формулой.
Берем предыдущую формулу, меняем B*C на sum(B) и получаем такую конструкцию:
Наконец, совмещаем формулы:
Все работает, ура! 53 (этот результат видно на всплывающей подсказке в верхнем левом углу) — средний чек с учетом количества клиентов, рассчитанный через среднее взвешенное.
The gotcha
There is a slight «gotcha» when using this function. Any values that are in the column that are not in the FIELD() function will appear in a more or less random order before the specified values. For example, only specifying Apple and Banana:
SELECT * FROM fruit ORDER BY FIELD(name, 'Banana', 'Apple') DESC, variety;
This results in:
+----------+--------+---------------------+ | fruit_id | name | variety | +----------+--------+---------------------+ | 6 | Apple | Cox's Orange Pippin | | 7 | Apple | Granny Smith | | 1 | Apple | Red Delicious | | 11 | Banana | Burro | | 12 | Banana | Cavendish | | 10 | Banana | Plantain | | 8 | Pear | Anjou | | 4 | Pear | Bartlett | | 5 | Orange | Blood | | 2 | Pear | Comice | | 3 | Orange | Navel | | 9 | Orange | Valencia | +----------+--------+---------------------+
$this->db->set();
Эта функция позволяет вам устанавливать значения для последующей вставки или обновления.
Вы можете передавать значения массивом непосредственно в функцию обновления:
Если вы используете множественные вызовы функции, они будут объединяться и использоваться для последующей вставки или обновления:
set()
также принимает третий опциональный параметр ($escape), который позволяет предотвратить экранирование, если установить его в FALSE.
Для демонстрации различий, вот пример set(), с экранирующим параметром и без него.
Вы также можете передать ассоциативный массив этой функции:
Или объект:
Поиск конкретных данных
$this->db->where()
Эта функция позволяет использовать условие WHERE, используя один из четырех методов:
Примечание
Все значения, переданные этой функции, автоматически производят безопасные запросы.
-
Простой ключ/значение метод:
-
Пользовательский ключ/значение метод:
-
Метод ассоциативного массива:
-
- Пользовательская строка:
-
Вы можете написать свои собственные запросы вручную:
$where = "name='Joe' AND status='boss' OR status='active'"; $this->db->where($where);
$this->db->where() принимает третий дополнительный параметр. Если он установлен FALSE, CodeIgniter не будет пробовать защитить ваши поля или имена таблиц.
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
$this->db->or_where()
Эта функция идентична описанной выше, за исключением того, что несколько экземпляров присоединяются следствием OR:
$this->db->where('name !=', $name); $this->db->or_where('id >', $id); // Производит: WHERE name != 'Joe' OR id > 50
Примечание
or_where() ранее был известен как orwhere(), который был удален.
$this->db->where_in()
Создает WHERE поле IN (‘item’, ‘item’) SQL запросе объедененным AND в случае необходимости
$names = array('Frank', 'Todd', 'James'); $this->db->where_in('username', $names); // Производит: WHERE username IN ('Frank', 'Todd', 'James')
$this->db->or_where_in()
Создает WHERE поле IN (‘item’, ‘item’) SQL запросе объедененным OR в случае необходимости
$names = array('Frank', 'Todd', 'James'); $this->db->or_where_in('username', $names); // Производит: OR username IN ('Frank', 'Todd', 'James')
$this->db->where_not_in()
Создает WHERE поле NOT IN (‘item’, ‘item’) SQL запросе объедененным AND в случае необходимости
$names = array('Frank', 'Todd', 'James'); $this->db->where_not_in('username', $names); // Производит: WHERE username NOT IN ('Frank', 'Todd', 'James')
$this->db->or_where_not_in()
Создает WHERE поле NOT IN (‘item’, ‘item’) SQL запросе объедененным OR в случае необходимости
Using MySQL ORDER BY clause to sort data using a custom list
The function has the following syntax:
The function returns the position of the str in the str1, str2, … list. If the str is not in the list, the function returns 0. For example, the following query returns 1 because the position of the string ‘A’ is the first position on the list , , and :
Output:
And the following example returns 2:
Output:
Let’s take a more practical example.
See the following table from the sample database.
Suppose that you want to sort the sales orders based on their statuses in the following order:
- In Process
- On Hold
- Canceled
- Resolved
- Disputed
- Shipped
To do this, you can use the function to map each order status to a number and sort the result by the result of the function:
Поиск одинаковых данных
$this->db->like()
Этот метод позволяет создавать LIKE положения, полезные для ведения поисков.
Примечание
Все значения передаются в этот метод экранируются автоматически.
-
Простой ключ/значение метод:
-
Метод ассоциативного массива:
$this->db->or_like()
Этот метод идентичен предыдущему, за исключением того, что несколько экземпляров присоединяются используя OR:
$this->db->like('title', 'match'); $this->db->or_like('body', $match); // WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
Примечание
or_like() ранее был известен как orlike(), который был удален.
$this->db->not_like()
Этот метод идентичен like(), за исключением того, что он производит
NOT LIKE выражения:
$this->db->not_like('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
$this->db->or_not_like()
Этот метод идентичен not_like(), за исключением того, что несколько экземпляров присоединяются используя OR:
$this->db->like('title', 'match'); $this->db->or_not_like('body', 'match'); // WHERE `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
$this->db->group_by()
Позволяет писать часть GROUP BY ваших запросов:
$this->db->group_by("title"); // Производит: GROUP BY title
Вы также можете передать массив из нескольких значений:
$this->db->group_by(array("title", "date")); // Производит: GROUP BY title, date
Примечание
group_by() ранее был известен как groupby(), который был удален.
$this->db->distinct()
Добавляет слово “DISTINCT” в запрос
$this->db->distinct(); $this->db->get('table'); // Производит: SELECT DISTINCT * FROM table
$this->db->having()
Позволяет дописать ключевое слово для запроса HAVING. Доступно 2 возможных синтаксиса — 1 аргумент или 2:
$this->db->having('user_id = 45'); // Производит: HAVING user_id = 45 $this->db->having('user_id', 45); // Производит: HAVING user_id = 45
Вы также можете передать массив из нескольких значений:
$this->db->having(array('title =' => 'My Title', 'id <' => $id)); // Производит: HAVING title = 'My Title', id < 45
Если вы используете базу данных, запросы к которой были экранированы CodeIgniter, вы можете избежать утечки содержимого, передавая третий необязательный аргумент установив его в FALSE.
$this->db->having('user_id', 45); // Производит: HAVING `user_id` = 45 in some databases such as MySQL $this->db->having('user_id', 45, FALSE); // Производит: HAVING user_id = 45
$this->db->or_having()
Оператор WHERE
Следующий ниже фрагмент кода содержит универсальную синтаксическую конструкцию для запроса с оператором :
Оператор является необязательной частью запроса . Для указания условий можно использовать операторы или . Оператор также может использоваться с запросом и , который мы обсудим в ближайшее время в последующей статье.
Равно и не равно
Оператор равенства () проверяет, равны ли значения двух полей. Если они совпадают, то условие становится истинным, и оператор извлекает значение для дальнейшей обработки. Если они не совпадают, то условие должно содержать оператор неравенства (). Оно будет извлекать данные на основе условия, которое не совпадает.
Например, следующий ниже запрос используется для получения всех записей с городом, соответствующим значению New York:
Больше и меньше
Оператор больше, чем () проверяет, больше ли значение левого поля, чем значение правого поля. Если да, то условие становится истинным. Оператор меньше, чем () проверяет, меньше ли значение левого поля, чем значение правого поля. Мы также можем использовать операторы / и оператор равенства вместе.
Например, следующий ниже запрос используется для получения всех записей с количеством попыток входа в систему больше, чем 2:
LIKE
Оператор предоставляет простой способ поиска записей в столбце с различными шаблонами. В запросе можно использовать подстановочные символы для построения различных шаблонов. В основном используется два вида подстановочных символов. Давайте рассмотрим каждый из них на примере.
(процент): используйте этот подстановочный символ для поиска ноль или более любых символов. Предположим, что мы хотим отыскать пользователей, чье имя начинается с «a». Тогда мы можем применить этот подстановочный символ, как показано в приведенном ниже запросе.
В случае если мы хотим найти пользователей, чье имя начинается с «a» и заканчивается на «s», то запрос с подстановочным символом % будет таким:
(подчеркивание): используйте этот подстановочный символ там, где нужно отыскать записи с шаблоном, где в том месте, где мы указали подчеркивание (), может иметься любой символ. Предположим, мы хотим отыскать пользователей, чье имя заканчивается на dmin, и мы не уверены в первом символе. Следовательно, приведенный ниже запрос будет искать результаты, где первый символ имени пользователя может быть любым, но он должен заканчиваться на dmin
Важно помнить, что он будет учитывать ровно один символ для одного подчеркивания. Следовательно, в этом случае пользователь с именем пользователя как «aadmin» не будет рассматриваться, потому что в запросе указан всего один подстановочный символ с подчеркиванием.
INNOT IN
Оператор используется для сравнения нескольких значений в операторе . Например, следующий ниже запрос используется для поиска всех пользователей, имеющих город new york или chicago:
Оператор работает наоборот, например чтобы найти всех пользователей, у которых нет ни города new york, ни города chicago, используется:
BETWEEN
Оператор может использоваться в том случае, когда мы хотим получить записи, которые входят в определенный диапазон. Этот диапазон может быть любым, таким как текст, даты или цифры. Предположим, мы хотим отыскать пользователей, дата создания записи о которых находится между 1 июля и 16 июля 2017 года. Тогда приведенный ниже запрос с предложением может нам помочь.
Подобным образом мы можем также задавать диапазон в числах для поиска пользователей, которые принадлежат к этому конкретному диапазону. Например, если мы хотим получить студентов, чьи оценки находятся в диапазоне от 70 до 80, то оператор может быть применен для определения диапазона.
Предложение WHERE
После служебного слова указываются условия выбора строк, помещаемых в результирующую таблицу. Существуют различные типы условий выбора:
Типы условий выбора:
- Сравнение значений атрибутов со скалярными выражениями, другими атрибутами или результатами вычисления выражений.
- Проверка значения на принадлежность множеству.
- Проверка значения на принадлежность диапазону.
- Проверка строкового значения на соответствие шаблону.
- Проверка на наличие null-значения.
Сравнение
В языке SQL используются традиционные операции сравнения ,,,,,.
В качестве условия в предложении можно использовать сложные логические выражения, использующие атрибуты таблиц, константы, скобки, операции , , отрицание .
Пример 5.Определить номера деталей, поставляемых поставщиком с номером 2.
Пример 6.Получить информацию о поставщиках Иванов и Петров.
Строковые значения атрибутов заключаются в апострофы.
Проверка на принадлежность множеству
Операция проверяет, принадлежит ли значение атрибута заданному множеству.
Пример 7.Получить информацию о поставщиках ‘Иванов’ и ‘Петров’.
Пример 8.Получить информацию о деталях с номерами 1 и 2.
Проверка на принадлежность диапазону
Операция определяет минимальную и максимальную границу диапазона, в которое должно попадать значение атрибута. Обе границы считаются принадлежащими диапазону.
Пример 9.Определить номера деталей, с ценой от 10 до 20 рублей.
Пример 10.Вывести наименования поставщиков, начинающихся с букв от ‘К’ по ‘П’.
Сравнение символов
Буква ‘Р’ в условии запроса объясняется тем, что строки сравниваются посимвольно. Для каждого символа при этом определяется код. Для нашего случая справедливо условие: ‘П’<‘Петров’<‘Р’
Проверка строкового значения на соответствие шаблону
Операция используется для поиска подстрок. Значения столбца, указываемого перед служебным словом сравниваются с задаваемым после него шаблоном. Форматы шаблонов различаются в конкретных СУБД.
Для СУБД MS SQL Server:
- Символ заменяет любое количество любых символов.
- Символ заменяет один любой символ.
- ‑ вместо символа строки может быть подставлен один любой символ из множества возможных, указанных в ограничителях.
- ‑ вместо символа строки может быть подставлен любой из символов кроме символов из множества, указанного в ограничителях.
Множество символов в квадратных скобках можно указывать через запятую, либо в виде диапазона.
Пример 11.Вывести фамилии поставщиков, начинающихся с буквы ‘И’.
Пример 12.Вывести фамилии поставщиков, начинающихся с букв от ‘К’ по ‘П’.
Проверка на наличие null-значения
Операции и используются для сравнения значения атрибута со значением .
Пример 13.Определить наименования деталей, для которых не указана цена.
Пример 14.Определить номера поставщиков, для которых указано наименование.
Пример сортировки по относительной позиции
Вы также можете использовать MySQL оператор ORDER BY для сортировки по относительной позиции в результирующем наборе, где первое поле в результирующем наборе равно 1. Следующее поле равно 2 и так далее.
Например:
MySQL
SELECT last_name, first_name, city
FROM contacts
WHERE last_name = ‘Markoski’
ORDER BY 3 DESC;
1 |
SELECTlast_name,first_name,city FROMcontacts WHERElast_name=’Markoski’ ORDER BY3DESC; |
Этот пример MySQL ORDER BY вернет все записи, отсортированные по полю city, в порядке убывания, так как поле city находится в позиции №3 в результирующем наборе и будет эквивалентно следующему примеру ORDER BY:
MySQL
SELECT last_name, first_name, city
FROM contacts
WHERE last_name = ‘Markoski’
ORDER BY city DESC;
1 |
SELECTlast_name,first_name,city FROMcontacts WHERElast_name=’Markoski’ ORDER BYcityDESC; |
MySQL ORDER BY examples
We’ll use the table from the sample database for the demonstration.
A) Using MySQL ORDER BY clause to sort the result set by one column example
The following query uses the clause to sort the customers by their last names in ascending order.
Output:
If you want to sort customers by the last name in descending order, you use the after the column in the clause as shown in the following query:
Ouptut:
B) Using MySQL ORDER BY clause to sort the result set by multiple columns example
If you want to sort the customers by the last name in descending order and then by the first name in ascending order, you specify both and in these respective columns as follows:
Output:
In this example, the clause sorts the result set by the last name in descending order first and then sorts the sorted result set by the first name in ascending order to make the final result set.
C) Using MySQL ORDER BY clause to sort a result set by an expression example
See the following table from the sample database.
The following query selects the order line items from the table. It calculates the subtotal for each line item and sorts the result set based on the subtotal.
To make the query more readable, you can assign the expression in the clause a column alias and use that column alias in the clause as shown in the following query:
In this example, we use as the column alias for the expression and sort the result set by the alias.
Since MySQL evaluates the clause before the clause, you can use the column alias specified in the clause in the clause.
Команда ORDER BY
позволяет сортировать записи по одной или нескольким колонкам.
Сортировка возможна в восходящем или нисходящем порядке с помощью ключевых слов и .
По умолчанию используется восходящий порядок сортировки ().
Синтаксис ORDER BY
Рассмотрим несколько примеров сортировки в таблице books из базы данных Bookstore.
Подключимся к базе данных.
USE Bookstore;
1 | USEBookstore; |
Если нужно отсортировать в нисходящем порядке, то добавим ключевое слово .
Важно заметить, что сортировка по второй колонке будет работать, только тогда когда в первой колонке есть повторяющиеся значения. Если в первой колонке все значения уникальны, то вторая колонка не будет отсортирована, иначе будет нарушена целостность таблицы
Выведем записи отсортированные по двум колонкам author и price.
$this->db->update();
Генерирует строки обновления и запускает выполнение запроса, основываясь на переданных данных.
Вы можете передать массив или объект этой функции.
Вот пример использования массива:
Использование объекта:
Примечание:
Все значения автоматически экранируются для генерации более безопасных запросов.
Обратите внимание на использование функции $this->db->where(),
позволяющей указывать условие WHERE.
Вы также можете опционально передать информацию непосредственно в функцию обновления:
Или массивом:
Также вы можете использовать функцию $this->db->set(), определяющую данные, которые следует обновить.
Первичные ключи
Первичный ключ (Primary Key) — это особый тип индекса, который является идентификатором записей в таблице. Он обязательно уникальный и указывается при создании таблиц:
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(128) NOT NULL, `name` varchar(128) NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf-8
При использовании таблиц InnoDB всегда определяйте первичные ключи. Если первичного ключа нет, MySQL все равно создаст виртуальный скрытый ключ.
Кластерные индексы
Обычные индексы являются некластерными. Это означает, что сам индекс хранит только ссылки на записи таблицы. Когда происходит работа с индексом, определяется только список записей (точнее список их первичных ключей), подходящих под запрос. После этого происходит еще один запрос — для получения данных каждой записи из этого списка.
Кластерные индексы сохраняют данные записей целиком, а не ссылки на них. При работе с таким индексом не требуется дополнительной операции чтения данных.
Первичные ключи таблиц InnoDB являются кластерными. Поэтому выборки по ним происходят очень эффективно.
Удаление данных
$this->db->delete()
Создает SQL строку удаления и выполняет запрос.
$this->db->delete('mytable', array('id' => $id)); // Производит: // DELETE FROM mytable // WHERE id = $id
Первый параметр — имя таблицы, второй — условие where. Вы также можете использовать where() или or_where() функции вместо передачи данных для второго параметра функции:
$this->db->where('id', $id); $this->db->delete('mytable'); // Производит: // DELETE FROM mytable // WHERE id = $id
Может быть передан массив имен таблиц в delete() если вы хотите удалить данные более чем из 1 таблицы.
$tables = array('table1', 'table2', 'table3'); $this->db->where('id', '5'); $this->db->delete($tables);
Если вы хотите удалить все данные из таблицы, вы можете использовать truncate() функцию или empty_table().
$this->db->empty_table()
Создает SQL строку удаления и выполняет запрос:
$this->db->empty_table('mytable'); // Производит: DELETE FROM mytable
$this->db->truncate()
Создает строку удаления SQL и выполняет запрос.
$this->db->from('mytable'); $this->db->truncate(); // или $this->db->truncate('mytable'); // Производит: // TRUNCATE mytable
Примечание
Если команда TRUNCATE не доступна, truncate() будет выполнена как “DELETE FROM table”.
$this->db->get_compiled_delete()
Это работает точно так же, как $this->db->get_compiled_insert() за исключением того, что она производит строку DELETE SQL вместо строки INSERT SQL.