SQL的新增、修改和删除数据

  • 一、使用INSERT 语句表中添加新行
  • (1)INSERT语句的基本形式:
  • (2)将显式值插入标识列
  • (3)INSERT语句的多行插入
  • (4)INSERT INTO SELECT语句
  • 二、UPDATE语句
  • 三、DELETE语句


一、使用INSERT 语句表中添加新行

(1)INSERT语句的基本形式:

INSERT INTO table_name (column_list)
VALUES (value_list);

解析:1)table_name 是要新增行的表明;
2)column_list 是要新增的列,新增列可以是一个或者多个的,但是要用逗号分隔;
3)value_list 是要新增的内容数据,新增的内容数据必须要对应相应的列

以下的语句是将新行插入sales.promotions表:

INSERT INTO sales.promotions ( promotion_name, discount, start_date, expired_date )
	VALUES( '2020夏季促销', 0.25, '20200601', '20200901' );

在此示例中没有指定id(主键),因为SQL Server会自动为此列提供值
执行INSERT 语句成功后,将会返回插入的行数

(2)将显式值插入标识列

通常,不为标识列指定值,因为SQL Server将自动提供值。但是,在某些情况下,可能希望在标识列中插入值,例如数据迁移。
要为标识列插入显式值,必须首先执行以下语句:

SET IDENTITY_INSERT table_name ON;

要关闭标识插入,请使用类似的语句:

SET IDENTITY_INSERT table_name OFF;

例:在 promotion 表中插入标识列的值

SET IDENTITY_INSERT sales.promotions ON;
	INSERT INTO sales.promotions ( 
	promotion_id, 
	promotion_name, 
	discount, 
	start_date, 
	expired_date
	 )
	VALUES( 
	2,
	'2020春季促销',
	 0.25, 
	'20200201',
	 '20200301' 
	); 
	SET IDENTITY_INSERT sales.promotions OFF;

(3)INSERT语句的多行插入

要一次向表中添加多行,请使用以下形式的INSERT语句:

INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),

(value_list_n);

注意:在此语法中,不使用单个值列表,而是使用多个逗号分隔的值列表进行插入

例子:向sales.promotions表插入多行数据

INSERT INTO sales.promotions ( promotion_name, discount, start_date, expired_date )
	VALUES
	( '2020夏季促销', 0.15, '20200601', '20200901' ),
	( '2020秋季促销', 0.20,'20201001', '20201101' ),
	( '2020冬季促销', 0.25, '20201201', '20210101' );

(4)INSERT INTO SELECT语句

INSERT INTO SELECT语句是要将其他表中的数据插入另一个表中

例子:将 customers 表中的所有地址都插入到 addresses 表中

INSERT INTO sales.addresses (street, city, state, zip_code) 
		SELECT street, city, state, zip_code 
		FROM sales.customers 
		ORDER BY first_name, last_name;

注意:addresses 中的列必须要与 customers 表中的列对应

二、UPDATE语句

要修改表中的现有数据,请使用以下UPDATE语句语法:

UPDATE table_name
SET c1 = v1, c2 = v2, … cn = vn [WHERE
condition]

解析:1) table_name 是要修改的表名
2)c1 ,c2 ,… ,cn是要修改的列名, v1,v2 ,… vn 是要修改的值
3)在 WHERE 子句中指定条件以选择更新的行。WHERE子句是可选的。 如果不指定 WHERE 子句,则表中的所有行都将更新。
(1)修改一行数据
例子;在sales.taxes表中修改列名为updated_at,state_tax_rate的一行数据。

UPDATE sales.taxes 
	SET state_tax_rate = 0.9, updated_at = GETDATE()
	WHERE tax_id = 1

(2)修改所有行
例子:只要不指定WHERE语句,就可以修改列名为updated_at,state_tax_rate的所有数据

UPDATE sales.taxes 
	SET state_tax_rate = 0.9, updated_at = GETDATE()

(3)更新多列的示例
例子:对于最高当地税率为 1% 的州,以下将最高当地税率提高 2% ,以及平均税率提高 1% 。

UPDATE sales.taxes 
	SET max_local_tax_rate += 0.02, avg_local_tax_rate += 0.01 
	WHERE max_local_tax_rate = 0.01

三、DELETE语句

要删除表中的现有数据,请使用以下DELETE语句语法:

DELETE FROM table_name 
	[WHERE condition]

解析:1) table_name 是要删除的表名
2)在 WHERE 子句中指定条件以选择删除的行。WHERE子句是可选的。 如果不指定 WHERE 子句,则表中的所有行都将被删除。

例子:删除 sales.taxes 表中 state(州) 为 ‘Alabama’的数据
DELETE FROM sales.taxes WHERE state= 'Alabama' ;

例子:删除 sales.taxes 表中所有数据

DELETE FROM sales.taxes ;