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

🌈个人主页:小新_-

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

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

🏆所属专栏**: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网络数据库

相关推荐
独行soc19 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain37 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship38 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站42 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶44 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO3 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong3 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~4 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle