跳转到内容

结构化查询语言/数据操作语言

100% developed
来自维基教科书,开放的书籍,面向开放的世界

← 数据查询语言 | 数据定义语言 → 数据操作语言用于修改数据库中的记录。它从不修改数据库的模式(表特征,关系,...)。它描述了三种语句:INSERT、UPDATE 和 DELETE。

INSERT 语句

[编辑 | 编辑源代码]

INSERT 语句的完整语法如下

INSERT INTO <table name>[ (<column name>[, <column name>]*)]
{
 VALUES (<value>[, <value>]*)
|
 SELECT [ALL | DISTINCT] <column name> [, [ALL | DISTINCT] <column name>]*
 FROM <table> [[AS | =] <alias> | [[FULL | LEFT | RIGHT] OUTER | INNER] JOIN <table> ON <expression>]
  [, <table> [[AS | =] <alias> | [[FULL | LEFT | RIGHT] OUTER | INNER] JOIN <table> ON <expression>]]*

 [WHERE <predicate> [{AND | OR} <predicate>]*]
 [GROUP BY <column name> [, <column name>]*
  [HAVING <predicate> [{AND | OR} <predicate>]]*]
 ]
 [ORDER BY <column name> [ASC | DESC] [, <column name> [ASC | DESC]]*]
 [LIMIT <count>]
};

INSERT 语句用于在表中添加新记录(行)。例如,我们想添加一个新的聚会

  • 它的主键是 7,
  • 它的名称是“面试”,
  • 它的描述是“与 SPENCER 先生会面”,
  • 它的优先级是 B,
  • 它是已计划的,
  • 它的日期是 2009 年 10 月 28 日,
  • 它的时间是 18:30:00,
  • 它的持续时间是 30,
  • 它的办公室技术 ID 是 23,
  • 没有 PDF 报告。


  • 语句之前的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
  • 查询:
INSERT INTO reunion (id_reunion, name, description, priority, planned, date, hour, duration, id_office, pdf_report)
VALUES (7, 'Job interview', 'Meeting with Mr. SPENCER', B, 1, 2009-10-28, 18:30:00, 30, 23, NULL);
  • 语句之后的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23

INTO 子句包含要插入记录的表名。它可以后跟括号中的列列表。VALUES 子句包含要插入的括号中的值。如果省略列名,则 VALUES 子句必须包含与表列数一样多的值。这些值按与在表中声明列的顺序相同的顺序插入表列中。如果列名被提及,则必须与值一样多的列名。这些值分别插入到命名的列中。如果表中省略了一列,则插入 NULL 值。

VALUES 子句可以被内部 SELECT 语句替换。在这种情况下,INSERT 语句可以在表中插入多行。例如,我们想将所有优先级为 B 的聚会计划两次,一年后

  • 语句之前的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23
  • 查询:
INSERT INTO reunion (id_reunion, name, description, priority, planned, date, hour, duration, id_office)
SELECT id_reunion + max(id_reunion), name, description, priority, 1, date + 0001-00-00, hour, duration, id_office
FROM reunion
WHERE priority = 'B';
  • 语句之后的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23
10 变更 我们需要在项目中更改什么。 B 1 2009-06-03 9:30:00 90 41
12 报告 向新入门者解释。 B 1 2010-03-15 14:00:00 60 7
13 学习 已安装新软件版本。 B 1 2010-09-21 16:00:00 120 11
14 面试 与 SPENCER 先生会面 B 1 2010-10-28 18:30:00 30 23

UPDATE 语句

[编辑 | 编辑源代码]

UPDATE 语句的完整语法如下

UPDATE <table name>
SET <column name> = <value>[, <column name> = <value>]*
WHERE <predicate> [{AND | OR} <predicate>]*;

UPDATE 语句用于修改表中已存在的记录。UPDATE 子句后跟要更改行的表名。SET 子句后跟列名和值的组合。这些值将被插入到给定的列中。WHERE 子句包含谓词。如果谓词对现有行为真,则该行将被修改。

例如,我们想更改 ID 为 14 的聚会的日期、时间和描述


  • 语句之前的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23
10 变更 我们需要在项目中更改什么。 B 1 2009-06-03 9:30:00 90 41
12 报告 向新入门者解释。 B 1 2010-03-15 14:00:00 60 7
13 学习 已安装新软件版本。 B 1 2010-09-21 16:00:00 120 11
14 面试 与 SPENCER 先生会面 B 1 2010-10-28 18:30:00 30 23
  • 查询:
UPDATE reunion
SET description = 'Meeting with Ms. JOHNSON', date = '2010-02-11', hour = '08:00:00'
WHERE id_reunion = '14';
  • 语句之后的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23
10 变更 我们需要在项目中更改什么。 B 1 2009-06-03 9:30:00 90 41
12 报告 向新入门者解释。 B 1 2010-03-15 14:00:00 60 7
13 学习 已安装新软件版本。 B 1 2010-09-21 16:00:00 120 11
14 面试 与 JOHNSON 女士会面 B 1 2010-02-11 08:00:00 30 23

DELETE 语句

[编辑 | 编辑源代码]

DELETE 语句的完整语法如下

DELETE FROM <table name>
[WHERE <predicate> [{AND | OR} <predicate>]*];

DELETE 语句用于根据条件删除表中的特定行。FROM 子句后跟要删除行的表名。WHERE 子句包含谓词。如果谓词对某一行为真,则该行将被删除。如果谓词对所有行都为假,则该语句不做任何操作。不带 WHERE 子句的 DELETE 语句会清空表。

例如,我们想删除所有持续时间为两小时的聚会


  • 语句之前的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
4 演示 项目的演示。 D 0 2008-09-11 15:30:00 120 27
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
6 学习 已安装新软件版本。 B 1 2009-09-21 16:00:00 120 11 785278...37528
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23
10 变更 我们需要在项目中更改什么。 B 1 2009-06-03 9:30:00 90 41
12 报告 向新入门者解释。 B 1 2010-03-15 14:00:00 60 7
13 学习 已安装新软件版本。 B 1 2010-09-21 16:00:00 120 11
14 面试 与 JOHNSON 女士会面 B 1 2010-02-11 08:00:00 30 23
  • 查询:
DELETE FROM reunion
WHERE duration = 120;
  • 语句之后的表格:
聚会
id_reunion 名称 描述 优先级 已计划 日期 时间 持续时间 # id_office pdf_report
1 计划 我们需要计划这个项目。 A 1 2008-03-24 10:30:00 60 35 48644...846348
2 进度 我们已经做了什么。 C 1 2008-05-12 14:00:00 30 13 9862...15676
3 变更 我们需要在项目中更改什么。 B 1 2008-06-03 9:30:00 90 41 34876...4846548
5 报告 向新入门者解释。 B 1 2009-03-15 14:00:00 60 7 19739...37718
7 面试 与 SPENCER 先生会面 B 1 2009-10-28 18:30:00 30 23
10 变更 我们需要在项目中更改什么。 B 1 2009-06-03 9:30:00 90 41
12 报告 向新入门者解释。 B 1 2010-03-15 14:00:00 60 7
14 面试 与 JOHNSON 女士会面 B 1 2010-02-11 08:00:00 30 23

现在,您可以使用现有的数据库模式来处理您自己的数据。


华夏公益教科书