第一章:数据库的创建和操作

🌈个人主页:小新_-

🎈个人座右铭:"成功者不是从不失败的人,而是从不放弃的人!"🎈

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

🏆所属专栏**:Oracle网络数据库** 欢迎订阅,持续更新中~~~

✨让小新带着你快乐的学习吧~✨

目录

一、以界面方式创建数据库(采用DBCA)

[二、以界面方式操作数据库(采用SQL Developer)](#二、以界面方式操作数据库(采用SQL Developer))

(一)表操作

1.表的概念

2.数据类型

3.表结构设计

​编辑

4.创建表

5.修改表

6.删除表

(二)表数据操作

1、插入记录

2、修改记录

3、删除记录

4、撤销操作

(三)执行SQL命令

[三、以命令方式操作数据库(采用SQL *Plus)](#三、以命令方式操作数据库(采用SQL *Plus))

1、创建表

2、修改表

​编辑

​编辑

​编辑

3、删除表

4、插入记录

​编辑

5、删除记录

6、修改记录


一、以界面方式创建数据库(采用DBCA)

在Oracle 11g中,以界面方式创建数据库主要使用数据库配置向导DBCA(Database Configuration Assistant)来完成。下面使用DBCA创建学生成绩管理数据库XSCJ,步骤如下。 (1)启动DBCA,出现"欢迎使用"界面,如图所示,单击"下一步"按钮进入创建数据库的向导。

(2)在"操作"窗口中,用户可以选择要执行的操作,这里选中"创建数据库"选项,如图所示,单击"下一步"按钮。

3)在"数据库模板"窗口中,选择相应选项后单击"显示详细资料"按钮可查看该数据库模板的各种信息。这里选择"一般用途或事务处理"选项,如图所示,单击"下一步"按钮。

4)在"数据库标识"窗口中输入"全局数据库名"和"SID",如图所示,单击"下一步"按钮。

说明:SID是数据库实例的唯一标识符,创建系统服务和操作数据库时都要用到。SID在同一数据库服务器中必须是唯一的。

(5)在"管理选项"窗口中可以选择配置Enterprise Manager企业管理器或者配置Database Control管理本地数据库,这里保持默认设置,如图所示,单击"下一步"按钮。

(6)在"数据库身份证明"窗口中,将所有账户设置为同一管理口令(Mm123456),如图所示,单击"下一步"按钮。

(7)在"数据库文件所在位置"窗口中,选择"所有数据库文件使用公共位置",单击"浏览"按钮选择数据库文件的存放路径,如图所示,单击"下一步"按钮。

(8)在"恢复配置"窗口中采取默认的配置,单击"下一步"按钮继续。

(9)在"数据库内容"窗口中勾选"示例方案",如图3.8所示,这样就可以在学习的过程中参考标准设置,也可了解基础的数据库创建方法和SQL语言。如果你有SQL脚本,还可以在这一步加载,系统会根据脚本在这个数据库中创建用户、表空间、表、权限等,但要注意,加载SQL脚本的先后顺序一定要正确。这里暂不加载脚本,直接单击"下一步"按钮。

(10)在"初始化参数"和"数据库存储"窗口中也保持默认配置,两次单击"下一步"按钮。

(11)在"创建选项"窗口中选择"创建数据库"选项,如图3.9所示,单击"完成"按钮,之后会弹出确认创建的对话框,单击"确定"按钮开始创建数据库。

(12)创建数据库期间显示的创建进度窗口如图3.10所示,过程较为漫长,读者要耐心地等待......

(13)创建数据库完毕后,系统会弹出窗口显示相关的提示信息,如图3.11所示,需要在这一步解锁SCOTT、SYSTEM、SYS账户并设置其口令,单击窗口中的"口令管理"按钮,弹出"口令管理"对话框。

找到以上三个用户账户,将"是否锁定账户?"一栏里的"J"去掉,口令均设为 Mm123456,

该口令用于后面登录和操作数据库,请读者务必牢记!单击"确定"按钮返回后单击"退出"按钮。

至此,所有步骤都已全部完成。现在,系统服务中应该已经有 SID 为 XSCJ 的服务选项并已置为"自动"启动,服务正在运行,如图3.12 所示,访问 XSCJ 数据库前必须保证已启动了这两个系统服务:OracleOraDbllg homeITNSListener 和 OracleServiceXSCJ。

二、以界面方式操作数据库(采用SQL Developer)

(一)表操作

表是Oracle系统中最主要的数据库对象,每个数据库都包含了若干个表。表是用来存储数据的一种逻辑结构,由行和列组成,故也称为二维表。

1.表的概念

表是日常工作和生活中经常使用的一种表示数据及其关系的形式,表3.1就是用来表示学生信息的一个学生表。

|--------|-----|-----|------------|------|-------|-------------|
| 学 号 | 姓 名 | 性 别 | 出 生 时 间 | 专 业 | 总 学 分 | 备 注 |
| 151101 | 王林 | 男 | 1997-02-10 | 计算机 | 50 | |
| 151103 | 王燕 | 女 | 1996-10-06 | 计算机 | 50 | |
| 151108 | 林一帆 | 男 | 1996-08-05 | 计算机 | 52 | 已提前修完一门课 |
| 151202 | 王林 | 男 | 1996-01-29 | 通信工程 | 40 | 有一门课不及格,待补考 |
| 151204 | 马琳琳 | 女 | 1996-02-10 | 通信工程 | 42 | |

关系数据库使用表(即关系)来表示实体及其联系。表包含下列概念。

  1. 表结构:每个表都包含一组固定的列,而列由数据类型(DATATYPE)和长度(LENGTH)两部分组成,以描述该表所代表的实体的属性。
  2. 记录:每个表包含了若干行数据,它们是表的"值",其中的一行称为一个记录,因此,表是记录的有限集合。
  3. 字段:每个记录由若干个数据项构成,将构成记录的数据项称为字段。
  4. 关键字:若表中记录的某个字段或字段组合能唯一标识记录,则称该字段(字段组合)为候选关键字(Candidate key)。若一个表有多个候选关键字,则选定其中一个为主关键字(Primary key),也称为主键。当一个表仅有唯一一个候选关键字时,该候选关键字就是主关键字。这里的主关键字与第1章中介绍的主码所起的作用是相同的,都用来唯一标识记录行。

2.数据类型

在设计表的列时,必须为其指定数据类型,它决定了该列数据的取值、范围和存储格式。列的数据类型可以是Oracle提供的系统数据类型,其中主要的类型列于表中。除了表中所列外,Oracle还提供可作为ANSI标准数据类型的替代类型。对于ANSI的CHARACTER及CHAR,使用Oracle的CHAR类型;对于ANSI的CHARACTER VARYING及CHAR VARYING,使用Oracle的VARCHAR2类型;对于ANSI的NUMERIC、DECIMAL、DEC、INTEGER、INT和SMALLINT类型,使用Oracle的NUMBER类型。用户还可以创建自己的抽象数据类型,也可以使用特定的REF数据类型,这些REF类型引用数据库其他地方的行对象。

3.表结构设计

创建表的实质就是定义表结构以及设置表和列的属性。在创建表之前,先要确定表的名字、表的属性,同时确定表所包含的列名、列的数据类型、长度、是否可为空值、约束条件、默认值设置、规则以及所需索引、哪些列是主键、哪些列是外键等属性,这些属性构成表结构。 这里要使用到的学生成绩管理系统的三个表,即学生表(表名为XSB)、课程表(表名为KCB)和成绩表(表名为CJB)为例介绍如何设计表的结构。 基础部分使用的学生表(XSB)包含的列有学号、姓名、性别、出生时间、专业、总学分、备注。为便于理解,使用中文的列名(实际开发应使用英文字母表示列名)。其中,"学号"列的数据是学生的学号,其值有一定的意义,例如"151101"中"15"表示该生所在年级,"11"表示所属班级,"01"表示该生在班级中的序号,故"学号"列的数据类型是6位的定长字符型;"姓名"列记录学生的姓名,一般不超过4个中文字符,所以可以用8位定长字符型数据;"性别"列有"男"、"女"两种取值,用2位定长字符型数据,默认是"男";"出生时间"是日期时间类型数据,列的数据类型定为date;"专业"列为12位定长字符型数据;"总学分"列是整数型数据,列的数据类型定为number,长度为2(故值在0~100之间,默认是0);"备注"列需要存放学生的备注信息,备注信息的内容在0~200个字之间,所以应该使用varchar2类型。

在XSB表中,只有"学号"列能唯一标识一个学生,所以将该列设为主键。最终设计出XSB的表结构如表所示。

|------|---------------|---------|-------|------------------|
| 列 名 | 数 据 类 型 | 是 否 可 空 | 默 认 值 | 说 明 |
| 学号 | char(6) | × | 无 | 主键 |
| 姓名 | char(8) | × | 无 | |
| 性别 | char(2) | × | "男" | |
| 出生时间 | date | × | 无 | |
| 专业 | char(12) | √ | 无 | |
| 总学分 | number(2) | √ | 0 | 0 总学分<100 |
| 备注 | varchar2(200) | √ | 无 | |

参照XSB表结构的设计方法,同样可以设计出其他两个表的结构,如所示是KCB和CJB的表结构。

|------|-----------|---------|-------|--------|
| 列 名 | 数 据 类 型 | 是 否 可 空 | 默 认 值 | 说 明 |
| 课程号 | char(3) | × | 无 | 主键 |
| 课程名 | char(16) | × | 无 | |
| 开课学期 | number(1) | √ | 1 | 只能为1~8 |
| 学时 | number(2) | √ | 0 | |
| 学分 | number(1) | × | 0 | |

4.创建表

用Oracle 11g自带的SQL Developer工具可以十分灵活地创建表。这里以创建XSB表为例,操作的步骤如下。

(1)启动SQL Developer,在"连接"节点下打开数据库连接myorcl(已创建)。右击"表"节点,选择"新建表"菜单项。

(2)进入"创建表"窗口,在"名称"栏中填写表名XSB,在"表"选项卡的"列名"、"类型"、"大小"、"非空"、"主键"栏中分别填入(选择)XSB表中"学号"列的列名、数据类型、长度、非空性和是否为主键等信息,完成后单击"添加列"按钮输入下一列,直到输入完所有的列为止,如图所示。

说明:如果数据类型当中没有char类型可选,可在"高级"选项中将varchar2修改为char类型。

5.修改表

使用SQL Developer工具修改表的方法很简单。XSB表创建完成后,在主界面的"表"目录下可以找到该表。右击XSB表选择"编辑"菜单项,进入"编辑表"窗口,在该窗口中的"列"选项页右侧单击 按钮可以添加新列,单击 按钮可以删除列,在"列属性"选项页的各栏中可以修改列的属性。 表的主键列不能直接删除,要删除必须先取消主键。单击窗口左侧"主键"选项,在窗口右边的"所选列"栏中会显示已被设为主键的列,如图所示。双击该列即可取消主键,如果要设某一列为主键,在"可用列"栏中双击该列或单击 按钮即可添加该列为主键。

6.删除表

以删除XSB表为例,在"表"目录下右击XSB表选择"表"菜单下的"删除"子菜单项,如图所示,之后弹出"删除"对话框,选中"级联约束条件"复选框,单击"应用"按钮,弹出表已删除的提示消息,单击"确定"按钮即可。

(二)表数据操作

创建数据库和表后,需要对表中的数据进行操作,包插插入、删除和修改,这些操作可以直接在 SQL Developer 中实现。下面使用已创建的XSCJ 数据库中的XSB 表为例说明表数据操作的方法。

1、插入记录

首先,启动SQL Developer,打开myorcl连接(需要输入SCOTT用户口令),展开"表"目录,单击"XSB"表,在右边窗口中单击"数据"选项卡,切换到表数据窗口,如图3.17所示。在此窗口中,表中的记录按行显示,每个记录占一行,因为此时表中尚没有数据,故只能看到一行列标题。

单击 (插入行)按钮,表中将增加一个新行,在新行中双击一列空白处后输入数据,一行数据输完后单击表数据窗口左边的行号,即选中该行,使之成为当前行。 说明:在输入"出生时间"列数据时,Oracle 11g默认的日期格式为"DD-MM 月-YY",例如,日期"1997-02-10"应该输入"10-2月-97"。为能使用我们所习惯的输入方式,这里先要修改一下数据库默认的日期格式,在SQL Developer命令窗口中执行如下语句

ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD";

注意:
该语句只能在当前会话中起作用,在下一次再打开 SOL Developer窗口时,还需要重新执行该语句

输入完一行数据后,单击 (提交)按钮将数据保存到数据库中,同时下方的"Data Editor - 日志"子窗口列出用于插入数据的INSERT语句,如图3.18所示。如果保存成功,还会显示"提交成功"信息;如果保存出错,则显示错误信息。接着再单击"插入行"按钮录入下一行,直到全部数据录完为止。

2、修改记录

修改记录的方法与插入类似,在"数据"选项页找到要修改的记录所在行,修改后该行的行号前会出现一个"*"号,如图所示,更改完成单击"提交"按钮保存修改的数据。

3、删除记录

如果要删除一行记录,选中该行,单击 (删除所选行)按钮,之后该行的行号前会出现一个"-"号,如图所示,单击"提交"按钮确认删除。

4、撤销操作

如果需要撤销之前对表中记录所做的操作,只需在单击"提交"按钮之前单击 (回退)按钮即可,如图所示,为撤销上一步的删除操作。

(三)执行SQL命令

使用SQL Developer不仅可以以图形界面方式操作数据库表中的记录,还可以直接编辑和运行SQL语句。启动SQL Developer,单击工具栏 按钮的右下箭头选择"myorcl",界面上将出现命令编辑区,如图所示,在其中输入要运行的SQL语句,如下:

这里是以执行创建表的CREATE TABLE命令(稍后在3.3节中详细介绍)为例,操作前须先删除之前已创建的XSB表,输完命令后单击窗口上方的 按钮即可执行该SQL语句重新创建XSB表。表建好后,往其中录入样本数据(见图)以备后用

三、以命令方式操作数据库(采用SQL *Plus)

1、创建表

在以自己的模式创建表时,必须拥有CREATE TABLE系统权限;在其他用户模式中创建表时,必须拥有CREATE ANY TABLE系统权限。Oracle创建表使用CREATE TABLE语句,基本的语法格式为:

sql 复制代码
CREATE TABLE [<用户方案名>.] <表名>
(
	<列名1>  <数据类型>  [DEFAULT <默认值>]  [<列约束>]	
	<列名2>  <数据类型>  [DEFAULT <默认值>]  [<列约束>]	
[,...n]
	<表约束>[,...n]
)
	[AS <子查询>]

说明:

(1)<用户方案名>:用户方案是指该表所属的用户,如果省略则默认为当前登录的用户。

(2)DEFAULT:关键字DEFAULT指定某一列的默认值。默认值的数据类型必须与该列的数据类型相匹配,列的长度必须足以容纳这一表达式值。

(3)<列约束>:定义一个完整性约束作为列定义的一部分,该子句的语法为:

sql 复制代码
[NOT] NULL
[UNIQUE]
[ PRIMARY KEY]
[ REFERENCES [<用户方案名>.] <表名>(<列名>)]
[CHECK(<条件表达式>)]

(4)<表约束>:定义一个完整性约束作为表定义的一部分,有关完整性约束的内容会在后面详细介绍。

(5)AS <子查询>:表示将由子查询返回的行插入到所创建的表中,子查询的使用将在后面具体介绍。使用AS子句时,要注意以下事项。

  • ① 表中的列数必须等于子查询中的表达式数。
  • ② 列的定义只能指定列名、默认值和完整性约束,不能指定数据类型。
  • ③ 不能在含有AS子句的CREATE TABLE语句中定义引用完整性。

相反,必须先创建没有约束的表,然后再用ALTER TABLE语句来添加约束。 Oracle从子查询中推导出数据类型和长度,同时也遵循下列完整性约束规则。

  • ① 如果子查询选择列而不是包含列的表达式,Oracle自动地为新表中的列定义任何NOT NULL约束,该列与被选表中的列相一致。
  • ② 如果CREATE TABLE语句同时包含AS子句和CONSTRAINT子句,Oracle就忽略AS子句。

如果子查询中的全部表达式是列,则在表定义中可完全忽略这些列。在这种情况下,表的列名和子查询中的列名相同。

【例】 利用CREATE TABLE命令为XSCJ数据库建立表KCB。表结构参照表KCB。

sql 复制代码
CREATE TABLE KCB
(	
	课程号 		char(3) 		NOT NULL PRIMARY KEY,
	课程名 		char(16) 		NOT NULL,
	开课学期 	number(1) 	NULL,
	学时 		number(2) 	NULL, 
	学分 		number(1)	NOT NULL
);

创建完毕,用命令"DESCRIBE KCB;"可查看KCB表结构,如图所示

如果表的主键由两个或多个列构成,则必须使用PRIMARY KEY关键字定义为表的完整性约束,语法格式如下:

sql 复制代码
CREATE TABLE <表名>
(
	<列名1>  <数据类型>  [DEFAULT <默认值>]  [<列约束>] [,...n]
PRIMARY KEY(<列名1>, <列名2>[,...n])
)

【例】 利用CREATE TABLE命令为XSCJ数据库建立表CJB。表结构参照表CJB。

sql 复制代码
CREATE TABLE CJB
( 	
	学号 	char(6) 	NOT NULL,
	课程号 	char(3) 	NOT NULL,
	成绩 	number(2) 	NULL,
	PRIMARY KEY(学号, 课程号) 
)

【例】 创建XSB表中计算机专业学生的记录备份表,表名为XS_JSJ。

sql 复制代码
CREATE TABLE XS_JSJ
	AS SELECT * 
		FROM XSB
		WHERE 专业= '计算机' ;

创建完毕,可用SQL Developer查看结果,如图3.25所示,可以看到XS_JSJ表中存储(备份)了XSB表中计算机专业全部11名学生的记录。

2、修改表

修改表结构使用ALTER TABLE语句,语法格式为:

sql 复制代码
ALTER TABLE [<用户方案名>.] <表名>
	[ ADD(<新列名> <数据类型> [DEFAULT <默认值>][列约束],...n) ]	/*增加新列*/
	[ MODIFY([ <列名> [<数据类型>] [DEFAULT <默认值>][列约束],...n) ] 	/*修改已有列属性*/
	[<DROP子句> ]						/*删除列或约束条件*/

说明:

(1)ADD子句:用于向表中增加一个新列,新的列定义和创建表时定义列的格式一样,一次可添加多个列,中间用逗号隔开。

(2)MODIFY子句:用于修改表中某列的属性(数据类型、默认值等)。在修改数据类型时需要注意,如果表中该列所存数据的类型与将要修改的列类型冲突,则会发生错误。例如,原来char类型的列要修改为number类型,而原来列值中有字符型数据"a",则无法修改。

(3)DROP子句:该子句用于从表中删除指定的字段或约束,语法格式为:

sql 复制代码
DROP {
	COLUMN <列名>
	∣PRIMARY [KEY]
	∣UNIQUE (<列名>,...n) 
	∣CONSTRAINT <约束名>
	∣[ CASCADE ]
}

其中各个关键字的含义如下:

  • PRIMARY:删除表的主键。
  • CONSTRAINT:删除完整性约束。
  • CASCADE:删除其他所有的完整性约束,这些约束依赖于被删除的完整性约束。
  • UNIQUE:删除指定列上的UNIQUE约束。
  • COLUMN:删除指定的列

下面通过例子说明ALTER TABLE语句的使用,为了不破坏XSB表结构,这里只对它的备份XS_JSJ表执行修改操作。

【例】 使用ALTER TABLE语句修改XSCJ数据库中的XS_JSJ表。

(1)在XS_JSJ表中增加两列:奖学金等级、等级说明。

sql 复制代码
ALTER TABLE XS_JSJ
	ADD (奖学金等级 number(1),
	等级说明 varchar2(40) DEFAULT '奖金1000元');

(2)在XS_JSJ表中修改"等级说明"列的默认值。

sql 复制代码
ALTER TABLE XS_JSJ
	MODIFY (等级说明 DEFAULT '奖金800元' );

运行语句后,打开SQL Developer的"编辑表"窗口查看XS_JSJ表的列属性,可见"等级说明"列的默认值已改为"奖金800元",如图所示。

(3)在XS_JSJ表中删除"奖学金等级"和"等级说明"列。

sql 复制代码
ALTER TABLE XS_JSJ
	DROP COLUMN 奖学金等级;
ALTER TABLE XS_JSJ
	DROP COLUMN 等级说明;

(4)为XS_JSJ表添加主键。

sql 复制代码
ALTER TABLE XS_JSJ
	ADD (CONSTRAINT "PK_JSJ" PRIMARY KEY(学号) );

3、删除表

语法格式为:

sql 复制代码
DROP TABLE [<用户方案名>.] <表名>

例如要删除表XS_JSJ,使用如下语句:

sql 复制代码
DROP TABLE XS_JSJ;

4、插入记录

1.INSERT语句

插入记录一般使用INSERT语句,语法格式为:

sql 复制代码
INSERT INTO <表名>[(<列名1>,<列名2>,...n)]
       	VALUES(<列值1>,<列值2>,...n)

该语句的功能是向指定的表中加入一行,由VALUES指定各列的值。

相关参数说明如下:

  1. 在插入时,列值表必须与列名表顺序和数据类型一致。如果不指定表名后面的列名列表,则在VALUES子句中要给出每一列的值,VALUES中的值要与原表中字段的顺序和数据类型一致,而且不能缺少字段项。
  2. VALUES中描述的值可以是一个常量、变量或一个表达式。字符串类型的字段必须用单引号括起来,字符串转换函数TO_DATE把字符串形式的日期型数据转换成Oracle 11g规定的合法的日期型数据。
  3. 如果列值为空,则值必须置为NULL。如果列值指定为该列的默认值,则用DEFAULT。这要求定义表时必须指定该列的默认值。
  4. 在对表进行插入行操作时,若新插入的行中所有可取空值的列值均取空值,则可以在INSERT语句中通过列表指出插入的行值中所包含非空的列,而在VALUES中只要给出这些列的值即可。

【例】 向XSCJ数据库的表XSB中插入如下一行:

151114 周何骏 计算机 男 1998-09-25 90 可以使用如下SQL语句:

sql 复制代码
INSERT INTO XSB(学号, 姓名, 性别, 出生时间, 专业, 总学分) 
	VALUES('151114', '周何骏', '男',TO_DATE('19980925','YYYYMMDD'), '计算机', 90);
//或者下面这样,也是一样的效果
INSERT INTO XSB 
  	VALUES('151114', '周何骏', '男', '1998-09-25', '计算机', 90, NULL);

【例】 向具有默认值字段的表中插入记录。 创建一个具有默认值字段的表test:

sql 复制代码
CREATE TABLE test
(	
	姓名 	char(20)  	NOT NULL,
 	专业 	varchar2(30) 	DEFAULT('计算机'),
 	年级 	number 		NOT NULL
);

用INSERT向test表中插入一条记录:

sql 复制代码
INSERT INTO test(姓名, 年级) VALUES('周何骏', 3);

利用INSERT语句还可以把一个表中的部分数据插入到另一个表中,但结果集中每行数据的字段数、字段的数据类型要与被操作的表完全一致,语法格式为:

sql 复制代码
INSERT INTO <表名>
	<结果集>

其中,<结果集>是一个由SELECT语句查询所得到的新表。利用该参数,可把一个表中的部分数据插入指定的另一表,有关结果集的使用在后面还会介绍。

【例】 用如下的CREATE语句建立XSB1表:

sql 复制代码
CREATE TABLE XSB1
( 	
	num  char(6) NOT NULL,
   	name  char(8) NOT NULL,
   	speciality char(12) NULL
);

然后用INSERT语句向XSB1表中插入数据,如下:

sql 复制代码
INSERT INTO XSB1
  	SELECT 学号, 姓名, 专业
    		FROM XSB
    		WHERE 姓名= '王林';

这条INSERT语句将XSB表中姓名为"王林"的所有学生的学号、姓名和专业名列的值插入到XSB1表的各行中。运行结果如图所示。

2.MERGE语句

在Oracle 11g中有MERGE语句,用于根据与源表连接的结果,对目标表执行插入、更新或删除操作。例如,根据在一个表中找到的差异在另一个表中插入、更新或删除行,这种方法可以对两个表进行信息同步。语法格式如下:

sql 复制代码
MERGE INTO <目标表名>
	USING <源表名> ON (<条件表达式>)
	WHEN MATCHED THEN { UPDATE SET...| DELETE...}
	WHEN NOT MATCHED THEN INSERT(...) VALUES(...)

说明:

  1. USING子句:指定用于更新的源数据表。
  2. ON子句:指定在源表与目标表之间进行连接时所遵循的条件。
  3. WHEN MATCHED子句:这个子句表示在应用了ON子句的条件后,目标表存在与源表匹配的行时,对这些行在THEN子句中指定修改或删除的操作。其中THEN子句中,UPDATE SET用于修改满足条件的行,DELETE关键字用于删除满足条件的行。
  4. WHEN NOT MATCHED子句:WHEN NOT MATCH子句指定对于源表中满足了ON子句中条件的每一行,如果该行与目标表中的行不匹配,则向目标表中插入这行数据。要插入的数据在THEN关键字后的INSERT子句中指定。

【例】 创建表a,将XSB表中的数据添加至该表。 创建表a的语句如下:

sql 复制代码
CREATE TABLE a
( 	
	XH 		char(6)		NOT NULL PRIMARY KEY,
  	XM 		char(8) 		NOT NULL,
  	XB 		char(2) 		NOT NULL,
  	CSSJ 	date 			NOT NULL,
  	ZY 		char(12) 		NULL,
  	ZXF 		number(2) 	NULL,	
  	BZ		varchar(200) 	NULL
);
//进行信息同步使用如下语句:
MERGE INTO a
	USING XSB ON (a.XH=XSB.学号)
	WHEN MATCHED 
		THEN UPDATE SET a.XM=XSB.姓名, a.XB=XSB.性别, a.CSSJ=XSB.出生时间,
					a.ZY=XSB.专业, a.ZXF=XSB.总学分, a.BZ=XSB.备注
	WHEN NOT MATCHED
		THEN INSERT VALUES(XSB.学号,XSB.姓名,XSB.性别,XSB.出生时间,XSB.专业,
					XSB.总学分, XSB.备注);

运行上述语句后查看表a中的数据,如图所示,表a中已经添加了XSB表中的全部数据。

5、删除记录

1.DELETE语句

语法格式为:

sql 复制代码
DELETE FROM <表名>
	[WHERE <条件表达式>]

该语句的功能为从指定的表中删除满足条件的行,若省略WHERE子句,则表示删除所有行。

【例】 将XSCJ数据库的表a中ZXF(总学分)值小于50的行删除,使用如下SQL语句。

sql 复制代码
DELETE FROM a
	WHERE ZXF < 50;

运行结果如图所示,可以看到,此时表a中只剩下12条ZXF值大于等于50的学生记录,所有小于50的记录都已被删除。

2.TRANCATE TABLE语句

如果确实要删除一个大表里的全部记录,可以用TRUNCATE TABLE语句,它可以释放占用的数据块表空间,此操作不可回退。语法格式为:

sql 复制代码
TRUNCATE TABLE <表名>

由于TRUNCATE TABLE语句删除表中的所有数据且不能恢复,所以使用时要谨慎。使用TRUNCATE TABLE删除了指定表中的所有行,但表的结构及其列、约束、索引等保持不变。TRUNCATE TABLE在功能上与不带WHERE子句的DELETE语句相同,二者均删除表中的全部行。但TRUNCATE TABLE执行的速度比DELETE快。

6、修改记录

UPDATE语句可以用来修改表中的数据行,语法格式为:

sql 复制代码
UPDATE <表名>
	SET <列名>={<新值>|<表达式>} [,...n]
	[WHERE <条件表达式>]

该语句在指定表的满足条件的记录中,由SET指定的各列的列值设置为SET指定的新值。若不使用WHERE子句,则更新所有记录的指定列值。

【例】 将XSCJ数据库的XSB表中学号为"151114"的学生备注列值置为"辅修计算机专业",使用如下SQL语句:

sql 复制代码
UPDATE XSB
	SET 备注='辅修计算机专业'
   	WHERE 学号='151114';

【例】 将表a中的所有学生的ZXF(总学分)都增加5。

sql 复制代码
UPDATE a
  	SET ZXF = ZXF + 5;

【例】 将XSB中姓名为"周何骏"的同学的专业改为"通信工程",学号改为"151242"。

sql 复制代码
UPDATE XSB
  	SET 专业='通信工程',
      	学号='151242'
  	WHERE 姓名= '周何骏';

最后,感谢大家的观看!Oracle网络数据库

相关推荐
懒是一种态度2 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮4 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9991 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
苏-言2 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
Ljw...2 小时前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i2 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
长风清留扬2 小时前
一篇文章了解何为 “大数据治理“ 理论与实践
大数据·数据库·面试·数据治理
OpsEye2 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级