教学目标:让学生掌握合并查询、数据更新; 教学重难点:数据更新 教学工具:多媒体教室 课时安排: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=‟ 刘伟‟)
因篇幅问题不能全部显示,请点此查看更多更全内容