SQL Server知识点五

本文详细介绍了SQL的INSERT语句用于添加新行,UPDATE语句用于修改数据,DELETE语句删除数据,以及Merge语句在数据同步中的应用。涵盖了创建表、显式值插入、多行插入、SELECT INTO插入、条件更新与删除,以及在源表与目标表间智能合并操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 修改数据:

A. INSERT语句

INSERT 语句向表中添加新行,以下是 INSERT 语句的最基本形式:

INSERT INTO table_name (column_list)

VALUES (value_list);

首先, table_name 指定要插入的表的名称。 通常,通过模式名称引用表名称,例如

production.products ,其中 production 是模式名称, products 是表名称。

其次, column_list 指定要在其中插入数据的一个或多个列的列表。必须将列列表括在括号中并用逗号分隔列。

如果列在列列表中没有出现,则SQL Server必须能够提供插入值,否则无法插入行。

SQL Server自动对表中可用的列使用以下值,但不会出现在 INSERT 语句的列列表中:

  • 如果列具有[IDENTITY ]属性,则为下一个增量值。
  • 如果列具有指定的默认值,则为默认值。
  • 如果列的数据类型是时间戳数据类型(timestamp),则默认为当前时间戳值。
  • 如果列可以为 NULL 值,则使用 NULL 。

第三,要在 VALUES 子句中提供插入的值列表。 列列表中的每列必须在值列表中具有相应的值。 此外,必须将值列表括在括号中。

(1)创建表:创建一个名为 promotions 的新表:

CREATE TABLE sales.promotions (

promotion_id INT PRIMARY KEY IDENTITY (1, 1),

promotion_name VARCHAR (255) NOT NULL,

discount NUMERIC (3, 2) DEFAULT 0,

start_date DATE NOT NULL,

expired_date DATE NOT NULL

);

注:在sales模式中创建了一个名为promotions的新表。 promotions表有五列,包括:促销标识号 (promotion_id),名称(name),折扣(discount),开始日期(start_date)和过期日期 (expired_date)。

promotion_id是标识列,因此当向表中添加新行时,SQL Server会自动填充其值。

  1. 基本INSERT:

INSERT INTO sales.promotions ( promotion_name, discount, start_date, expired_date)

VALUES( '2020夏季促销', 0.25, '20200601', '20200901');

  1. 将显式值插入标识列:

通常,不为标识列指定值,因为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;

  1. Insert多行

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

INSERT INTO table_name (column_list)

VALUES (value_list_1), (value_list_2), ... (value_list_n);

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

使用此形式的 INSERT 语句,一次可以插入的行数为 1000 行

(5)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;

(6)UPDATE语句

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

UPDATE table_name

SET c1 = v1, c2 = v2, ... cn = vn

[WHERE condition]

1. 更新所有行

以下语句更新 taxs 表中所有行的单个列:

UPDATE sales.taxes

SET updated_at = GETDATE();

在此示例中,语句将 updated_at 列中的值更改为 GETDATE() 函数返回的系统日期时间

(7)DELETE语句

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

DELETE FROM table_name

[WHERE condition]

在上面语法中

首先,指定要从中删除数据的表的名称。

第三,在 WHERE 子句中指定条件以选择删除的行。WHERE子句是可选的。 如果不指定 WHERE 子句,则表中的所有行都将被删除。

(8)Merge语句

  1. 修改数据:

A. INSERT语句

INSERT 语句向表中添加新行,以下是 INSERT 语句的最基本形式:

INSERT INTO table_name (column_list)

VALUES (value_list);

首先, table_name 指定要插入的表的名称。 通常,通过模式名称引用表名称,例如

production.products ,其中 production 是模式名称, products 是表名称。

其次, column_list 指定要在其中插入数据的一个或多个列的列表。必须将列列表括在括号中并用逗号分隔列。

如果列在列列表中没有出现,则SQL Server必须能够提供插入值,否则无法插入行。

SQL Server自动对表中可用的列使用以下值,但不会出现在 INSERT 语句的列列表中:

  • 如果列具有[IDENTITY ]属性,则为下一个增量值。
  • 如果列具有指定的默认值,则为默认值。
  • 如果列的数据类型是时间戳数据类型(timestamp),则默认为当前时间戳值。
  • 如果列可以为 NULL 值,则使用 NULL 。

第三,要在 VALUES 子句中提供插入的值列表。 列列表中的每列必须在值列表中具有相应的值。 此外,必须将值列表括在括号中。

(1)创建表:创建一个名为 promotions 的新表:

CREATE TABLE sales.promotions (

promotion_id INT PRIMARY KEY IDENTITY (1, 1),

promotion_name VARCHAR (255) NOT NULL,

discount NUMERIC (3, 2) DEFAULT 0,

start_date DATE NOT NULL,

expired_date DATE NOT NULL

);

注:在sales模式中创建了一个名为promotions的新表。 promotions表有五列,包括:促销标识号 (promotion_id),名称(name),折扣(discount),开始日期(start_date)和过期日期 (expired_date)。

promotion_id是标识列,因此当向表中添加新行时,SQL Server会自动填充其值。

  1. 基本INSERT:

INSERT INTO sales.promotions ( promotion_name, discount, start_date, expired_date)

VALUES( '2020夏季促销', 0.25, '20200601', '20200901');

  1. 将显式值插入标识列:

通常,不为标识列指定值,因为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;

  1. Insert多行

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

INSERT INTO table_name (column_list)

VALUES (value_list_1), (value_list_2), ... (value_list_n);

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

使用此形式的 INSERT 语句,一次可以插入的行数为 1000 行

(5)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;

(6)UPDATE语句

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

UPDATE table_name

SET c1 = v1, c2 = v2, ... cn = vn

[WHERE condition]

1. 更新所有行

以下语句更新 taxs 表中所有行的单个列:

UPDATE sales.taxes

SET updated_at = GETDATE();

在此示例中,语句将 updated_at 列中的值更改为 GETDATE() 函数返回的系统日期时间

(7)DELETE语句

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

DELETE FROM table_name

[WHERE condition]

在上面语法中

首先,指定要从中删除数据的表的名称。

第三,在 WHERE 子句中指定条件以选择删除的行。WHERE子句是可选的。 如果不指定 WHERE 子句,则表中的所有行都将被删除。

(8)Merge语句

假设有两个表名为: source 表和 target 表,并且需要根据 source 表中匹配的值更新 target 表。 有
三种情况:
source 表有一些 target 表中不存在的行。在这种情况下,需要将 source 表中的行插入到
target 表中。
target 表有一些 source 表中不存在的行。 在这种情况下,需要从 target 表中删除行。
source 表的某些行具有与 target 表中的行相同的键。 但是,这些行在非键列中具有不同的值。
在这种情况下,需要使用来自 source 表的值更新 target 表中的行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值