SQL INSERT
, UPDATE
и DELETE
заявления — о чем они все? Если вы инженер по обработке данных, администратор базы данных или просто обычный фанат данных или девушка, однажды вы обнаружите, что у вас есть база данных, которая станет вашим «ребенком». Заряженный этим особым пучком радости, вам нужно будет кормить и менять маленького парня. Да, мы все еще говорим о базах данных! INSERT
, UPDATE
и DELETE
являются всеми функциями в SQL, которые помогают обеспечить актуальность ваших данных и очистить их от ненужной или устаревшей информации.
INSERT
, UPDATE
И DELETE
, а также выбрать и MERGE , известны как языка манипулирования данными (DML) заявления, которые позволяют пользователям SQL просматривать и управлять данными. В то время как данные, конечно, часто обновляется самим приложением, он регулярно требует ручного ввода или технического обслуживания, а это требует не только хорошее понимание SQL основы, но и как INSERT
, UPDATE
и DELETE
в SQL.
Детская больница Микки Мауса — база данных
Давайте посмотрим на эти триплеты SQL один за другим и поймем, как они работают.
Мы будем использовать пример базы данных для демонстрации каждого из трех. Продолжая тему ребенка, скажем, вы являетесь администратором данных в детской больнице «Детская больница Микки Мауса», если быть точным. Больница ведет учет всех своих маленьких пациентов, включая их возраст, вес, результаты анализа крови — вы получите восхитительную картину.
Обычно врачи вводят и обновляют эту информацию в системе больницы каждый раз, когда они видят своих пациентов, и большая часть вставки, обновления и удаления записей в базу данных выполняется системой. Но часто есть вещи, которые нужно исправить вручную, и, как постоянный администратор базы данных, это ваше время, чтобы сиять!
Вы также можете прочитать:
Обзор оператора удаления SQL
В статье ниже мы используем три разных таблицы, чтобы продемонстрировать три разных утверждения.
Пример таблицы № 1 показывает записи пациентов и их основную информацию:
Стол пациента
PatientID | Фамилия | Имя | дата рождения | секс | Вес | Высота | вакцинированных |
---|---|---|---|---|---|---|---|
15223 | кузнец | Deniz | 12/31/2018 | F | 21,4 | 29,2 | Y |
15224 | Агарвал | Арджун | 08/29/2017 | M | 28,1 | 34,2 | Y |
15225 | Адамс | мак | 02/14/2015 | F | 34,0 | 39,2 | N |
15226 | Джонсон | Tierra | 08/15/2019 | F | 14,6 | +24,5 | Y |
15227 | Хури | Мухаммед | 03/30/2014 | M | 41,5 | 44,1 | Y |
15228 | Джонс | Бен | 04/04/2011 | M | 70,1 | 52,2 | Y |
15229 | Ковальчик | Александра | 08/27/2019 | F | 15,2 | 23,9 | Y |
Пример таблицы № 2 содержит различные отделения больницы, а также группы и категории, к которым относятся эти отделения:
Стол отдела
DepartmentID | Название отдела | Имя группы | CategoryName |
---|---|---|---|
1 | кардиология | Центр сердца | клиническая |
2 | Центральная реанимация | Крайняя необходимость | клиническая |
3 | Крайняя необходимость | Крайняя необходимость | клиническая |
4 | связи | администрация | эксплуатационный |
5 | онкология | Медицина внутренних органов | клиническая |
6 | неврология | Медицина внутренних органов | клиническая |
7 | Отдел кадров | администрация | эксплуатационный |
8 | патология | обслуживание | технический |
9 | радиология | обслуживание | технический |
10 | аптека | обслуживание | технический |
11 | Исполнительный совет | администрация | эксплуатационный |
12 | урология | Хирургия | клиническая |
13 | гематология | Медицина внутренних органов | клиническая |
14 | Монтана Уорд | подопечный | эксплуатационный |
15 | Чикаго Уорд | подопечный | эксплуатационный |
16 | Линкольн Уорд | подопечный | эксплуатационный |
17 | Йеллоустон Уорд | подопечный | эксплуатационный |
18 | Бруклин Уорд | подопечный | эксплуатационный |
Пример таблицы № 3 фиксирует посещения пациентов за эти годы:
Таблица терпеливейшего приема
PatientID | LastAdmitted | LastDischarged |
---|---|---|
33 | 12/29/1952 | 01/05/1953 |
34 | — | — |
35 | 08/01/2004 | 08/04/2004 |
36 | 07/28/2011 | 07/30/2011 |
37 | 05/27/1950 | 05/30/1950 |
38 | — | — |
39 | 10/11/1970 | 10/20/1970 |
Вооружившись этими таблицами образцов, давайте в мельчайших INSERT
, UPDATE
и DELETE
.
Вставить данные с помощью SQL
Как и у детей, каждую минуту рождаются новые данные. При наличии большого количества подкованных систем часто эти данные легко добавляются в предполагаемые базы данных. Во многих случаях, однако, вы обнаружите, что вам нужно добавить его вручную, и вот тут-то и появляется INSERT
оператор в SQL.
INSERT
это ваш способ добавить одну или несколько строк в таблицу. INSERT
также может помочь с добавлением строк из одной таблицы в другую таблицу.
Давайте посмотрим на базовую структуру оператора SQL INSERT
:
SQL
xxxxxxxxxx
1
INSERT INTO tableName
2
(column1, column2, …)
3
VALUES (value1, value2, …)
Во-первых, нам нужно определить таблицу, в которую мы хотим вставить строки. Далее мы указываем столбцы, которые мы хотим заполнить. Наконец, мы оговариваем значения, которые нам нужно добавить. Это базовая форма INSERT
функции, и она довольно интуитивно понятна.
Чтобы дать этой структуре некоторое реальное применение, вот пример из нашего примера.
У одного из врачей в детской больнице Микки Мауса есть новорожденный пациент, которого еще не назвали. Врач должен немедленно ввести ребенка в базу данных, чтобы получить доступ к испытанию на наркотики для больного ребенка, но система не разрешит подавать файл литтлуна без имени. Врач хочет, чтобы пациентка добавлялась по номеру ее пациента, а ее имя оставалось пустым до более поздней даты. Как администратор, вам нужно будет ввести пациента вручную в базу данных.
Вот как INSERT
будет выглядеть утверждение:
SQL
xxxxxxxxxx
1
INSERT INTO dbo.Patient
2
(Surname, FirstName, DOB, Sex, [Weight], Height, Vaccinated)
3
VALUES (NULL, NULL,'2019-11-19', 'F', 14.0, 23.1, 'No')
Как видите, мы даем не только имя таблицы, в которую нужно вставить, но также имена столбцов и значений, которые мы хотим добавить. Мы не указываем PatientID в списке столбцов, поскольку в качестве столбца идентификаторов он заполняется автоматически.
Поскольку мы хотим пока оставить имя пациента пустым, мы пишем NULL для столбцов имени.
Как только мы запустим эту команду, она создаст следующее дополнение к базе данных:
Вставка нескольких строк
Чтобы вставить более одной строки данных одним оператором, используйте скобки и запятые, чтобы указать новые отдельные строки.
SQL
xxxxxxxxxx
1
INSERT INTO dbo.Patient
2
(Surname, FirstName, DOB, Sex, [Weight], Height, Vaccinated)
3
VALUES ('Hitson', 'George','2019-11-19', 'M', 13.9, 22.5, 'No'),
4
VALUES ('Hitson', 'Jenny','2019-11-19', 'F', 13.7, 22.3, 'No')
Совет! Используйте транзакцию для проверки вашей вставки без фиксации и постоянного изменения таблицы. Для этого начните с BEGIN TRANSACTION
и завершите транзакцию либо COMMIT
, если вы хотите сохранить изменения, либо ROLLBACK
, если вы хотите отменить то, что сделали. Ниже описано, как добавить транзакцию в приведенный выше пример.
Начать транзакцию
SQL
xxxxxxxxxx
1
BEGIN TRANSACTION
2
INSERT INTO dbo.Patient
3
(Surname, FirstName, DOB, Sex, [Weight], Height, Vaccinated)
4
VALUES ('Hitson', 'George','2019-11-19', 'M', 13.9, 22.5, 'No'),
5
('Hitson', 'Jenny','2019-11-19', 'F', 13.7, 22.3, 'No')
6
7
ROLLBACK
8
--COMMIT
Вставка из одной таблицы в другую
Нужно вставить одну или несколько строк данных из одной таблицы в другую таблицу? Вы можете использовать INSERT INTO SELECT
заявление.
Допустим, несколько наших молодых пациентов принимают участие в новом испытании лекарств, а вы настраиваете новый стол для регистрации их участия. Основная структура этого утверждения:
SQL
xxxxxxxxxx
1
INSERT INTO targetTable (column1, column2, …)
2
SELECT (column1, column2, …)
3
FROM sourceTable
Утверждение для нашего примера испытания препарата выглядит следующим образом:
SQL
xxxxxxxxxx
1
INSERT INTO [dbo].[DrugTrialAlpha]
2
(Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes)
3
SELECT
4
p.Surname, p.FirstName, p.DOB, p.Sex, 'Drug', NULL
5
FROM dbo.Patient AS p
6
WHERE
7
p.PatientID IN (15226, 15229, 15230)
8
UNION
9
SELECT
10
p.Surname, p.FirstName, p.DOB, p.Sex, 'Placebo', NULL
11
FROM dbo.Patient AS p
12
WHERE
13
p.PatientID IN (15231)
Вы также можете написать пример в виде общего табличного выражения (CTE). Помимо прочего, CTE можно использовать для создания временного набора результатов, который можно повторно использовать во время запроса. Вот как будет выглядеть та же команда, написанная как CTE:
SQL
xxxxxxxxxx
1
WITH drugTrialPatients (Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes)
2
AS (
3
SELECT
4
p.Surname, p.FirstName, p.DOB, p.Sex, 'Drug', NULL
5
FROM dbo.Patient AS p
6
WHERE
7
p.PatientID IN (15226, 15229, 15230)
8
UNION
9
SELECT
10
p.Surname, p.FirstName, p.DOB, p.Sex, 'Placebo', NULL
11
FROM dbo.Patient AS p
12
WHERE
13
p.PatientID IN (15231)
14
)
15
INSERT INTO [dbo].[DrugTrialAlpha]
16
(Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes)
17
SELECT Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes
18
FROM drugTrialPatients
Совет! Если вы используете SELECT
для добавления данных из одной таблицы в другую, в качестве начального шага рекомендуется запустить SELECT
один оператор — просто чтобы убедиться, что верные строки возвращены и вы довольны результатом!
ОБНОВЛЕНИЕ данных с использованием SQL
Оператор SQL UPDATE
— еще одна распространенная задача, используемая инженерами данных и администраторами баз данных. Используйте его, чтобы изменить значение столбца для одной или нескольких строк.
Вот как SQL- UPDATE
оператор обычно структурирован:
SQL
xxxxxxxxxx
1
UPDATE tableName
2
SET column1=value1, column2=value2,...
3
WHERE filterColumn=filterValue
Как и в случае с оператором SQL INSERT
, сначала нам нужно определить таблицу, которую мы хотим обновить. Затем мы используем SET
предложение, которое детализирует столбцы, которые мы хотим обновить. Наконец, мы используем WHERE
предложение, чтобы точно определить, какие строки мы хотим включить в обновление.
Совет! Поскольку новое значение столбца может повлиять на несколько строк, убедитесь, что вы довольны степенью обновления, прежде чем совершать! Так же , как INSERT
, SQL — UPDATE
может быть записана в виде сделки, то есть вы можете COMMIT
или ROLLBACK
обновление в зависимости от того или нет вы счастливы с изменениями.
Вот пример с использованием нашего тематического исследования. Наше отделение неотложной помощи занимается ребрендингом отделения травматологии и неотложной хирургии, поэтому его имя необходимо изменить в базе данных. Чтобы обновить это имя, вы можете выполнить это утверждение:
SQL
xxxxxxxxxx
1
UPDATE dbo.Department
2
SET DepartmentName = 'Trauma and Emergency Surgery'
3
WHERE DepartmentID = 3
4
SELECT * FROM dbo.Department WHERE DepartmentName = 'Emergency'
Вот как будет выглядеть обновленное название отдела в нашей таблице:
При использовании оператора SQL UPDATE
убедитесь, что в вашем WHERE
предложении точно указаны строки, которые вы хотите обновить. Если вы сомневаетесь, напишите заявление как транзакцию, которую вы можете откатить, если вас не устраивают эти изменения — никакого вреда!
Чтобы убедиться, что вы выбираете правильные данные для обновления в первую очередь, вы можете выполнить тест, используя, SELECT
чтобы убедиться, что вы нацеливаетесь на правильные строки.
Обновить несколько строк
Если вам нужно обновить несколько строк данных, это легко сделать с помощью UPDATE
оператора. Это WHERE
твой друг здесь.
Представьте, что вы хотите перегруппировать все стационарные отделения от «Палата» до «Комната» под колонкой группы.
SQL
xxxxxxxxxx
1
UPDATE dbo.Department
2
SET GroupName = 'Room'
3
WHERE GroupName = 'Ward'
Что изменит таблицу так, чтобы она выглядела так:
УДАЛИТЬ данные с помощью SQL
SQL DELETE
— это изменение подгузника мира SQL. Есть что-то, чего ты не хочешь там? Удалите это!
DELETE
удаляет одну или несколько строк из таблицы, но будьте осторожны! Вы должны удостовериться, что знаете, что вы удаляете, прежде чем приступить к выполнению заявления!
Вот как DELETE
выглядит ваш средний оператор SQL :
SQL
xxxxxxxxxx
1
DELETE tableName
2
WHERE filterColumn=filterValue;
Это всего лишь две части: указание таблицы и указание — WHERE
какие строки вы хотите удалить.
Если вы знаете первичный ключ строки, которую хотите удалить, ваша задача проста. Вы хотите удалить Линкольна Уорда со своего стола? Это просто:
SQL
xxxxxxxxxx
1
DELETE FROM dbo.Department
2
WHERE DepartmentID = 16
Удаление нескольких строк
Возвращаемся в детскую больницу Микки Мауса. Допустим, менеджер данных больницы хочет удалить все записи пациентов тех, кто не посещал больницу с 1969 года. Вот как вы можете написать это DELETE
заявление:
SQL
xxxxxxxxxx
1
DELETE FROM dbo.PatientAdmittance
2
WHERE LastDischarged < '1969-01-01'
Результат? Это таблица до …
… И вот как это выглядит после запуска этого скрипта:
Однако перед выполнением этого DELETE
оператора лучше всего проверить результат с помощью SELECT
. Это вернет все строки, которые вы собирались удалить, поэтому вы можете сначала проверить, удаляете ли вы правильные строки!
Чтобы запустить этот тест, вы должны набрать:
SQL
1
SELECT * FROM dbo.PatientAdmittance
2
WHERE LastDischarged < '1969-01-01'
Предупреждение! Если вы используете DELETE
без добавления WHERE
предложения, вы удалите все строки из вашей таблицы.
Заключение
Как только вы освоите основы SQL INSERT
, SQL UPDATE
и DELETE
операторы станут вашим следующим шагом к славе базы данных!
Дальнейшее чтение
Как использовать SQL UPDATE. ВОЗВРАЩАЯСЬ, чтобы запустить DML более эффективно