您的当前位置:首页正文

sql4

2021-07-12 来源:好走旅游网
 Sql语言(4)

 教学目标:让学生掌握合并查询、数据更新;  教学重难点:数据更新  教学工具:多媒体教室  课时安排:2课时

 教学方法:讲授法、练习法  教学过程:

 导入语:我们已经学习了DDL和DQL语言那么今天就让我们开始学习DML

语言吧。 (一)合并查询

合并查询就是使用union操作符将来自不同查询的数据组合起来,形成一个结果集。Union操作会自动将重复的数据行删除,但要求参与合并的表结构相同。

例:从sc数据表中查询出学号为s1同学的学号和总分,再从sc数据表中查询出学好为s5的同学的学号和总分,然后将两个查询结果合并成一个结果。 SELECT SNO AS 学号,SUM(SCORE) AS 总分 FROM SC

WHERE(SNO=“S1”) GROUP BY SNO UNION

SELECT SNO AS 学号,SUM(SCORE) AS 总分 FROM SC

WHERE(SNO=“S5”) GROUP BY SNO

(二)存储查询结果到表中

使用SELECT…INTO语句可以将查询结果存储到一个新建的数据表或临时表中。 例:从sc数据表中查询出所有同学的学号和总分,并将查询结果存放到一个数据表cal_table中。

SELECT SNO AS,SUM(SCORE) AS INTO CAL_TABLE FROM SC

GROUP BY SNO

如果将INTO CAL_TABLE改为INTO #CAL_TABLE,则结果存放在临时表中。 (三)SQL数据更新

 SQL语言的数据更新语句DML主要包括插入数据、修改数据和删除数据三种语句。 (1)插入数据记录

 插入数据是把新的记录插入到一个存在的表中。插入数据使用语句INSERT INTO,

可分为以下几种情况。

a.插入一行新记录

 语法格式为:

INSERT INTO <表名>[(<列名1>[,<列名2>…])] VALUES(<值>)  其中,<表名>是指要插入新记录的表 <列名>是可选项,指定待添加数据的列

VALUES子句指定待添加数据的具体值。

 列名的排列顺序不一定要和表定义时的顺序一致。

 但当指定列名表时VALUES子句值的排列顺序必须和列名表中的列名排列顺序一

致,个数相等,数据类型一一对应。  例:在S表中插入一条学生记录(学号:S7;姓名:郑冬;性别:女;年龄:21;系

别:计算机)。

INSERT INTO S

VALUES ('s7','郑冬','女',21,'计算机') 注意:

 必须用逗号将各个数据分开,字符型数据要用单引号括起来。

 INTO子句中没有指定列名,则新插入的记录必须在每个属性列上均有值,且

VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。 b.插入一行的部分数据值

例:在SC表中插入一条选课记录(’S7’,’C1’)。 INSERT INTO SC (SNO,CNO)

VALUES ('s7',„c1')

 将VALUES子句中的值按照INTO子句中指定列名的顺序插入到表中

 对于INTO子句中没有出现的列,则新插入的记录在这些列上将取空值,如上例的

SCORE即赋空值。

 但在表定义时有NOT NULL约束的属性列不能取空值。 c.插入多行记录

 用于表间的拷贝,将一个表中的数据抽取数行插入另一表中,可以通过子查询来实

现。  插入数据的命令语法格式为:

INSERT INTO <表名> [(<列名1>[,<列名2>…])] 子查询

 例3.62 求出各系教师的平均工资,把结果存放在新表AVGSAL中。

 首先建立新表AVGSAL,用来存放系名和各系的平均工资 CREATE TABLE AVGSAL

(DEPARTMENT VARCHAR(20),

AVGSAL SMALLINT)

 然后利用子查询求出T表中各系的平均工资,把结果存放在新表AVGSAL中。 INSERT INTO AVGSAL SELECT DEPT,AVG(SAL) FROM T

GROUP BY DEPT (2)修改数据记录

 SQL语言可以使用UPDATE语句对表中的一行或多行记录的某些列值进行修改,

其语法格式为: UPDATE <表名>

SET <列名>=<表达式> [,<列名>=<表达式>]… [WHERE <条件>]

其中:

 <表名>是指要修改的表

 SET子句给出要修改的列及其修改后的值

 WHERE子句指定待修改的记录应当满足的条件,WHERE子句省略时,则修改表

中的所有记录。 a.修改一行

例:把刘伟教师转到信息系。 UPDATE T

SET DEPT='信息' WHERE TN='刘伟'

b.修改多行

例:将所有学生年龄增加1岁 UPDATE S

SET AGE=AGE+1

练习:把教师表中工资小于等于1000元的讲师的工资提高20%。

UPDATE T

SET SAL=1.2*SAL WHERE PROF='讲师' AND SAL <=1000

c.用子查询选择要修改的行

例:把讲授C5课程的教师的岗位津贴增加100元。 UPDATE T SET COMN=COMN+100 WHERE TNO IN (SELECT T.TNO FROM T,TC

WHERE T.TNO=TC.TNO AND TC.CNO='C5')

 子查询的作用是得到讲授C5课程的教师号。 d.用子查询提供要修改的值

例3.67 把所有教师的工资提高到平均工资的1.2倍

UPDATE T SET SAL =

(SELECT 1.2*AVG(SAL) FROM T)

 子查询的作用是得到所有教师的平均工资。

(3)删除数据记录

 使用DELETE语句可以删除表中的一行或多行记录,其语法格式为:

DELETE FROM<表名> [WHERE <条件>] 其中,

 <表名>是指要删除数据的表。

 WHERE子句指定待删除的记录应当满足的条件,WHERE子句省略时,则

删除表中的所有记录。

a.删除一行记录

例:删除刘伟教师的记录。 DELETE

FROM T

WHERE TN=‟刘伟‟

b.删除多行记录

例:删除所有教师的授课记录 DELETE

FROM TC

 执行此语句后,TC表即为一个空表,但其定义仍存在数据字典中。 c.利用子查询选择要删除的行

例:删除刘伟教师授课的记录。 DELETE FROM TC

WHERE TNO= (SELECT TNO FROM T

WHERE TN=‟ 刘伟‟)

因篇幅问题不能全部显示,请点此查看更多更全内容