数据库及应用 授课教师:岳静 教学网站:http://swpu.fy.chaoxing.com Tel:13551817786 E-mail: qiuqiuyj@163.com 教学网站:http://swpu.fy.chaoxing.com 123
第 4 章 数据操作 4.1 数据查询 4.2 数据更改
Student表
Course表
SC表
思考 如何查询表中的数据呢?
抽取特定属性 语法: 如果你需要抽取指定的列,你可以在SELECT语句中指定列名称。 SELECT 列名 FROM 表名 NOTE: All the chapters in this book include SQL queries and demos to explain concepts. You need to demonstrate these queries using the user account, Kim, Robert, or Angela, who does not have administrative privileges. In the examples, where you need to use administrative rights, specific inputs have been given for the faculty. Explain the students that SQL Server 2005 consists of many data types. Int, float, char, and varchar are some of the most commonly used data types. In addition, explain all the four data types to the students and ask them to read in the SG about other data types. FAQs Question: Difference between char and varchar? Answer: Char has a fixed length of characters to store whereas it is flexible in case of varchar.
选择表中若干列 查询指定列 例1 查询全体学生的学号与姓名 SELECT Sno,Sname FROM Student Sno sname 9512101 李勇 9512102 刘晨 9512103 王敏 9521101 张立 9521102 吴宾 9521103 张海 9531101 钱小平 9531102 王大力
选择表中若干列 Select sname,sno,sdept from student 例2 查询全体学生的姓名、学号、所在系 例2 查询全体学生的姓名、学号、所在系 Select sname,sno,sdept from student 注意:目标列表达式的顺序可以与表中的顺序不一致。
查询表中的全部列 SELECT Sno,Sname,Ssex, Sage, Sdept FROM Student 例3 查询全体学生的记录 等价于:SELECT * FROM Student
查询表中的全部列 查询的结果: Sno Sname Ssex Sage Sdept 9512101 李勇 男 19 计算机系 9512102 刘晨 20 9512103 王敏 女 9521101 张立 22 信息系 9521102 吴宾 21 9521103 张海 9531101 钱小平 18 数学系 9531102 王大力
思考 如何找出每个学生的出生年份呢?
例4.查询全体学生的姓名及其出生年份 SELECT Sname,2010- Sage FROM Student 结果为: 可以是表中存在的属性列,也可以是表达式、常量或者函数。 查询经过计算的列 例4.查询全体学生的姓名及其出生年份 SELECT Sname,2010- Sage FROM Student 结果为: Sname (无列名 ) 李勇 1989 刘晨 1988 王敏 张立 1986 吴宾 1987 张海 钱小平 1990 王大力
例5. 查询全体学生的姓 名和出生年份,并在出生 年份列前加入一个列,此 列的每行数据均为‘Year of Birth’常量值。 查询经过计算的列 Sname (无列名 ) 李勇 Year of Birth 1988 刘晨 1987 王敏 张立 1985 吴宾 1986 张海 钱小平 1989 王大力 例5. 查询全体学生的姓 名和出生年份,并在出生 年份列前加入一个列,此 列的每行数据均为‘Year of Birth’常量值。 SELECT Sname,‘Year of Birth’, 2002-Sage FROM Student 查询结果 :
指定列名 通过指定列的别名可以改变查询结果的列标题 语法格式为: 列名 | 表达式 [ AS ] 列标题 或: 列标题 =列名 | 表达式
指定列名 例5 查询全体学生的姓名和出生年份。 SELECT Sname 姓名, 2002-Sage 年份 FROM Student 姓名 李勇 1982 刘晨 1981 王敏 张立 1979 吴宾 1980 张海 钱小平 1983 王大力
选择表中的若干元组 例6 查询所有选修了课程的学生学号 SELECT Sno FROM SC 怎样才能删除重复的行?
消除取值相同的行 SQL 的DISTINCT关键字可以去掉结果表中的重复行 SELECT DISTICT Sno FROM SC Sno 9512101 9512102 9521102 9521103 9531101
思考 如何查询计算机系的学生的详细信息??
查询满足条件的元组 查询满足条件的元组是通过WHERE子句实现的; 语法格式 Select …from …
查询满足条件的元组 查询条件 谓 词 比较(比较运算符) 谓 词 比较(比较运算符) =, >, >=, <, <=, <>(或!=)NOT 确定范围 BETWEEN AND, NOT BETWEEN AND 确定集合 IN, NOT IN 字符匹配 LIKE, NOT LIKE 空值 IS NULL, IS NOT NULL 多重条件(逻辑谓词 AND, OR
SELECT Sname FROM Student WHERE Sdept = '计算机系' 结果为 : 例6 查询计算机系全体学生的姓名 SELECT Sname FROM Student WHERE Sdept = '计算机系' 结果为 : Sname 李勇 刘晨 王敏
例7.查询所有年龄在20岁以下的学生的姓名及年龄 SELECT Sname, Sage FROM Student WHERE Sage < 20 Sname Sage 李勇 19 钱小平 18 王大力
例8.查询考试成绩有不及格的学生的学号 SELECT DISTINCT Sno FROM SC WHERE Grade < 60
确定范围 BETWEEN…AND和NOT BETWEEN…AND是一个逻辑运算符,可以用来查找属性值在或不在指定范围内的元组。
确定范围 例9 查询年龄在20~23岁之间的学生的姓名、所在系和年龄 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23 此句等价于: WHERE Sage >=20 AND Sage<=23
确定范围 例10 查询年龄不在20~23之间的学生姓名、所在系和年龄 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 此句等价于: SELECT Sname, Sdept, Sage FROM Student WHERE Sage <20 OR Sage>23
确定集合 IN是一个逻辑运算符,可以用来查找属性值属于指定集合的元组 IN的格式为: 列名 [ NOT ] IN (常量1, 常量2, … 常量n) IN的含义为:当列中的值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录 Not in 的含义相反
确定集合 例11.查询信息系、数学系和计算机系学生的姓名和性别 SELECT Sname, Ssex FROM Student WHERE Sdept IN ('信息系', '数学系', '计算机系') 此句等价于: SELECT Sname, Ssex FROM Student WHERE Sdept = '信息系' OR Sdept = '数学系' OR Sdept = '计算机系'
确定集合 例12 查询既不是信息系、数学系,也不是计算机系学生的姓名和性别 SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN ('信息系', '数学系', '计算机系') 此句等价于: SELECT Sname, Ssex FROM Student WHERE Sdept!= '信息系' AND Sdept!= '数学系' AND Sdept!= '计算机系'
字符匹配 LIKE用于查找指定列名与匹配串常量匹配的元组 LIKE运算符的一般形式为: 列名 [NOT ] LIKE ‘ <匹配串>’ 匹配串包括普通字符和通配符 通配符用于表示任意的字符或字符串
通配符 匹配串中可包含如下四种通配符: _: 匹配任意一个字符; %:匹配0个或多个字符; _: 匹配任意一个字符; %:匹配0个或多个字符; [ ]: 匹配[ ]中的任意一个字符;[abcd] [^ ]:不匹配[ ]中的任意一个字符[^abcd]
通配符 例13 查询姓‘张’的学生的详细信息 SELECT * FROM Student WHERE Sname LIKE ‘张%’ 结果为: Sno Sname Ssex Sage Sdept 9521101 张立 男 22 信息系 9521103 张海 20
通配符 例14 查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况 SELECT * FROM Student WHERE Sname LIKE ‘[张李刘]%’ 结果为: Sno Sname Ssex Sage Sdept 9512101 李勇 男 19 计算机系 9512102 刘晨 20 9521101 张立 22 信息系 9521103 张海
通配符 例15 查询名字中第2个字为‘小’或‘大’字的学生的姓名和学号 SELECT Sname, Sno FROM Student WHERE Sname LIKE '_[小大]%' 结果为 Sname Sno 钱小平 9531101 王大力 9531102
通配符 例16 查询所有不姓“刘”的学生 SELECT Sname FROM Student WHERE Sname NOT LIKE '刘% '
通配符 例17 从学生表中查询学号的最后一位不是2、3、5的学生情况 SELECT * FROM Student WHERE Sno LIKE '%[^235]'
涉及空值的查询 空值(NULL)在数据库中有特殊的含义,它表示不确定的值 判断某个值是否为NULL值,不能使用普通的比较运算符(=、!=等),而只能使用专门的判断NULL值的子句来完成 判断取值为空的语句格式为:列名IS NULL 判断取值不为空的语句格式为:列名 IS NOT NULL
涉及空值的查询 例18 查询无考试成绩的学生的学号和相应的课程号 SELECT Sno, Cno FROM SC WHERE Grade IS NULL 例19 查询所有有考试成绩的学生的学号和课程号 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL
查询计算机系年龄在20岁以下的男生?
多重条件查询 在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询。 例20-1 查询计算机系年龄在20岁以下的学生姓名 SELECT Sname FROM Student WHERE Sdept='CS' AND Sage<20 例20-2 查询年龄在20岁以下的所有男生的信息select * from student where sage<20 and ssex=‘男’ 练习4
将学生按成绩排序,怎么办?
对查询结果进行排序 排序子句的格式为: ORDER BY <列名> [ASC | DESC ] [ ,… n ]
对查询结果进行排序 例21 将学生按年龄升序排列 select *from student order by sage 例21 将学生按年龄升序排列 select *from student order by sage 例22 查询选修了‘c02’号课程的学生的学号及其成绩,查询结果按成绩降序排列 Select sno,grade from sc where cno=‘c02’ order by grade desc
对查询结果进行排序 用ORDER BY子句对多个列进行排序,则这些列在该子句中出现的顺序决定了对结果集进行排序的方式。
对查询结果进行排序 例23 查询全体学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列 SELECT * FROM Student ORDER BY Sdept, Sage DESC
思考 如何求所有学生的平均成绩呢?
使用计算函数汇总数据 COUNT( * ):统计表中元组个数 COUNT(<列名> ):统计本列列值个数 计算函数也称为集合函数或聚合函数、聚集函数,其作用是对一组值进行计算并返回一个单值 SQL提供的计算函数有: COUNT( * ):统计表中元组个数 COUNT(<列名> ):统计本列列值个数 SUM(<列名> ):计算列值总和(必须是数值型列) AVG(<列名> ):计算列值平均值(必须是数值型列) MAX(<列名> ):求列值最大值 MIN(<列名> ):求列值最小值
使用计算函数汇总数据 例24.统计学生总人数 SELECT COUNT(*) FROM Student 例25.统计选修了课程的学生的人数 SELECT COUNT (DISTINCT Sno) FROM SC 例26 计算9512101号学生的考试总成绩之和 SELECT SUM(Grade) FROM SC WHERE Sno = ‘9512101’ 练习6
使用函数的注意事项 Count(*)能计算有空值的元组,其他函数的计算过程忽略空值 计算函数不能出现在WHERE子句中 例 查询年龄最大的学生的姓名,如下写法是错误的: SELECT Sname FROM Student WHERE Sage = MAX(Sage)
思考 如何查询每一课程的选课人数?
对查询结果进行分组计算 什么是分组? 课程号 选课人数 c01 3 c02 4 c03 2 c05 c06
分组方法 GROUP BY可将计算控制在组一级,分组的目的是细化计算函数的作用对象。在一个查询语句中,可以使用任意多个列进行分组。
出现在Group By后面的列名也必须出现在select后面 分组数据(续) GROUP BY GROUP BY从句通过使用集合函数汇总结果集到查询定义的分组中。 使用HAVING从句以消除所有不满足条件的这些组。 语法: SELECT column_list FROM table_name WHERE condition [GROUP BY [ALL] expression [, expression] [HAVING search_condition] 出现在Group By后面的列名也必须出现在select后面 GROUP BY Clause Tell the students that the GROUP BY clause is used to group the output of the SELECT statement in several groups. If ALL is used, then it ignores the restriction provided by the WHERE clause. Just like the WHERE clause, you can use the HAVING clause with the GROUP BY clause. Example: (GROUP BY) SELECT Title, Minimum = MIN(VacationHours), Maximum = MAX(VacationHours) FROM HumanResources.Employee WHERE VacationHours > 20 GROUP BY Title Example: (HAVING) SELECT Title, 'Average Vacation Hours' = AVG(VacationHours) FROM HumanResources.Employee WHERE VacationHours > 30 GROUP BY Title HAVING AVG(VacationHours) >55 Additional Inputs All columns mentioned in the GROUP BY clause have to be included in the SELECT list. If a WHERE clause is present, then the GROUP BY clause groups only those rows which are satisfied by the conditions used in the WHERE clause. 使用Group By就必须使用集合函数
分组举例 例29 统计每门课程的选课人数,列出课程号和人数 SELECT Cno 课程号, COUNT(Sno) 选课人数 FROM SC GROUP BY Cno 查询结果为 : 课程号 选课人数 c01 3 C02 4 c04 2 c05 c06 练习7
分组举例 例30 查询每名学生的学号 ,选课门数和平均成绩 SELECT Sno 学号, COUNT(*) 选课门数, AVG(Grade) 平均成绩 FROM SC GROUP BY Sno 练习8
使用HAVING HAVING子句作用:对分组后的结果再进行过滤,它用于组而不是对单个记录; HAVING通常与GROUP BY子句一起使用。
使用HAVING 例31 查询修了3门以上课程的学生的学号 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3 结果为: Sno 9521102
使用HAVING 例32 查询修课门数等于或大于4门的学生的学号、平均成绩和选课门数 SELECT Sno, AVG(Grade) 平均成绩, COUNT(*) 选课门数 FROM SC GROUP BY Sno HAVING COUNT(*) >= 4 结果为: Sno 平均成绩 选课门数 9521102 74 4
Student、Course、 Sc这3个表有什么相同之处? 思考 找出姓名为“李勇”的学生的成绩 Student、Course、 Sc这3个表有什么相同之处?
多表连接查询 内连接 自连接 外连接
内连接 最常用的连接类型 如果两个表的相关字段满足连接条件,则从两个表中提取数据并组合成新的记录 内连接的格式为: SELECT FROM 表1 [ INNER ]JOIN 表2 ON <连接条件>
连接 例34 查询每个学生及其修课的情况: SELECT * FROM Student JOIN SC ON Student.Sno = SC.Sno -- 将Student与 SC连接起来
如何查看计算机系学生的名字、所修课的课程号和成绩? 思考 如何查看计算机系学生的名字、所修课的课程号和成绩?
注意 两个表的连接结果中包含了两个表的全部列,Sno列重复了两次,这是不必要的。在写查询语句时应当将这些重复的列去掉; 由于在连接后的表中有重复的列名(Sno列),因此,在ON子句中对Sno加上了表名前缀限制,指明是哪个表中的Sno。 例34 去掉例32中的重复列 SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade, XKLB FROM Student JOIN SC ON Student.Sno = SC.Sno 练习11 练习12
如何查看选修了“数据库基础”课程的学生的学号、姓名? 思考 如何查看选修了“数据库基础”课程的学生的学号、姓名?
join course on course .cno=sc.cno Where course.cname=‘数据库基础’ 连接 例36 查询选修了“数据库基础”课程的学生的学号、姓名 select sno,sname,grade from student join sc on student.sno=sc.sno join course on course .cno=sc.cno Where course.cname=‘数据库基础’
select s2.Sname,s2.Sdept from Student s1 join Student s2 什么含义? 思考 select s2.Sname,s2.Sdept from Student s1 join Student s2 on s1.Sdept=s2.Sdept where s1.Sname='刘晨' and s2.Sname!='刘晨'
思考 查询学生的修课情况,包括修了课程的学生和没有修课的学生
使用外连接 A B C B D E Table X Table Y A B C D E COLUMNS COLUMNS RIGHT OUTER JOIN A B C D E Explain the concept of the RIGHT OUTER JOIN to the students using the diagram. Tell them, that as shown in the figure all the rows from second table, Table Y are displayed. However, only the matching rows from the first table, Table X, are displayed. Also tell them that the data is based on the common column between the tables, Column B. ALL ROWS FROM TABLE Y AND COMMON ROWS FROM TABLE X OUTPUT
外连接 作用:可以输出不满足连接条件的元组的信息; 只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件。
外连接 外连接的语法格式为: select 列名 FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON <连接条件>
使用外连接 A B C B D E Table X Table Y A B C D E COLUMNS COLUMNS RIGHT OUTER JOIN A B C D E Explain the concept of the RIGHT OUTER JOIN to the students using the diagram. Tell them, that as shown in the figure all the rows from second table, Table Y are displayed. However, only the matching rows from the first table, Table X, are displayed. Also tell them that the data is based on the common column between the tables, Column B. ALL ROWS FROM TABLE Y AND COMMON ROWS FROM TABLE X OUTPUT
使用外连接(续) A B C B D E Table X Table Y A B C D E COLUMNS COLUMNS FULL OUTER JOIN A B C D E Explain the concept of the FULL OUTER join to the students. Tell them that full outer join is a combination of LEFT OUTER join and RIGHT OUTER join. This join returns all the matching and non-matching rows from both the tables. ALL ROWS FROM TABLE Y AND TABLE Y AND COMMON ROWS ONLY ONCE OUTPUT
例38.查询学生的修课情况,包括修了课程的学生和没有修课的学生 SELECT Student.Sno, Sname, Cno, Grade FROM Student LEFT JOIN SC ON Student.Sno = SC.Sno Sno Sname Cno Grade 9512101 李勇 c01 90 c02 86 c06 NULL 9512102 刘晨 78 c04 66 9512103 王敏 9521101 张立 吴宾 82 75 92 c05 50 9521103 张海 68 9531101 钱小平 80 95 9531102 王大力 85
SELECT Student.Sno, Sname, Cno, Grade FROM Student RIGHT JOIN Sc 9512101 李勇 c01 90 c02 86 c06 NULL 9512102 刘晨 78 c04 66 吴宾 82 75 92 c05 50 9521103 张海 68 9531101 钱小平 80 95 9531102 王大力 85 采用右外连接 SELECT Student.Sno, Sname, Cno, Grade FROM Student RIGHT JOIN Sc ON Student.Sno = SC.Sno 练习13
子查询 什么功能? SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname = '刘晨')
子查询 如果一个SELECT语句是嵌套在一个SELECT、INSERT、UPDATE或DELETE语句中,则称之为子查询或内层查询;而包含子查询的语句则称为主查询或外层查询。
基于集合的测试的子查询 通过运算符in或not in,将一个表达式的值与子查询返回的结果集进行比较 格式: where 表达式 [not] in (子查询) 该表达式的值与集合中的某个值相等,则此测试为true;如果该表达式与集合中所有的值均不相等,则返回false
子查询 例38.查询成绩大于90分的学生的学号、姓名 SELECT Student.Sno, Sname, FROM Student JOIN SC ON Student.Sno = SC.Sno where grade>90 还有其他表示方法吗?
子查询 求满足这些学生学号的学生信息 结果为: 求成绩大于90的学生学号 SELECT Sno, Sname FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Grade > 90 ) 结果为: 求满足这些学生学号的学生信息 求成绩大于90的学生学号 Sno Sname 9521102 吴宾 9531101 钱小平
子查询 例39 查询选修了“数据库基础”课程的学生的学号、姓名 SELECT Sno, Sname FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = '数据库基础') ) 练习14
基于比较测试的子查询 通过比较运算符(=、<>、<、>、<=、>=)将一个表达式的值与子查询返回的值进行比较 where 表达式 比较运算符(子查询) 使用子查询进行比较测试时,要求子查询语句必须是返回单值的查询语句。
基于比较测试的子查询 例40 查询修了‘c02’课程且成绩高于此课程的平均成绩的学生的学号和成绩 SELECT Sno , Grade FROM SC WHERE Cno = 'c02' and Grade > ( SELECT AVG(Grade) from SC WHERE Cno = 'c02') 结果为: Sno Grade 9512101 86 9512102 78
基于比较测试的子查询 where sage = (select max(sage) from student) 例42 查询年龄最大的学生的姓名 select sname from student where sage = (select max(sage) from student)
基于存在性测试的子查询 存在性测试时,一般使用EXISTS谓词 格式:where [not] exists(子查询)
基于存在性测试的子查询 例41 查询选修了‘c01’号课程的学生姓名 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = 'c01')
查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄 思考 查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄
(SELECT MAX(Sage) FROM Student WHERE Sdept= ‘计算机系 ') SELECT Sname,Sage FROM Student WHERE Sage < (SELECT MAX(Sage) FROM Student WHERE Sdept= ‘计算机系 ') AND Sdept <> '计算机系’
带有ANY(SOME)或ALL谓词的子查询 SELECT Sname,Sage FROM Student WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept= '计算机系') AND Sdept <> ‘计算机系’
带有ANY(SOME)或ALL谓词的子查询 结果: 执行过程: 1.RDBMS执行此查询时,首先处理子查询,找出 计算机系中所有学生的年龄,构成一个集合(20,19) 2.处理父查询,找所有不是计算机系且年龄小于 20 或19的学生 Sname Sage 王敏 18 张立 19
带有ANY(SOME)或ALL谓词的子查询 (续) 例43 查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄。 方法一:用ALL谓词 SELECT Sname,Sage FROM Student WHERE Sage < ALL (SELECT Sage FROM Student WHERE Sdept= '计算机系') AND Sdept <> '计算机系’;
带有ANY(SOME)或ALL谓词的子查询 (续) 方法二:用聚集函数 SELECT Sname,Sage FROM Student WHERE Sage <(SELECT MIN(Sage) FROM Student WHERE Sdept= '计算机系') AND Sdept <>'计算机系’;
查询没有选修“C01”课程的学生姓名和所在系 思考 查询没有选修“C01”课程的学生姓名和所在系
Select distinct Sname,Sdept from Student S JOIN SC on S.Sno=SC.Sno 方案1 Select distinct Sname,Sdept from Student S JOIN SC on S.Sno=SC.Sno Where Cno!=‘C01’
方案2 Select Sname,Sdept from Student where Sno IN (select Sno FROM SC where Cno!=‘C01’)
方案3 Select Sname,Sdept from Student where Sno NOT IN( select Sno FROM SC Where Cno=‘C01’)
方案4 Select Sname,Sdept from Student where Exists(select * from SC where.Sno=Student.Sno And Cno!=‘C01’)
创建数据库的步骤 创建数据库 创建表 插入数据 修改表中数据
插入数据 插入语句的格式为 insert [into] <表名> [(<列名表>)] values(值列表) 其中:<列名表>中的列名必须是表定义中有的列名,值列表中的值可以是常量也可以是NULL值,各值之间用逗号分隔
注意事项 值列表中的值与列名表中的列按位置顺序对应,它们的数据类型必须一致。 如果<表名>后边没有指明列名,则新插入记录的值的顺序必须与表中列的定义顺序一致,且每一个列均有值(可以为空)。
举例 例1 将新生记录(9521105,陈冬,男,信息系,18岁)插入到Student表中 INSERT INTO Student VALUES (‘9521105’, ‘陈冬’, '男', 18, '信息系') 例2 在SC表中插入一新记录,成绩暂缺 INSERT INTO SC(Sno, Cno) VALUES('9521105', 'c01') 或 insert into sc values('9521105', 'c01‘,null)
创建数据库的步骤 创建数据库 创建表 插入数据 修改表中数据
更新数据 使用UPDATE语句实现对数据的修改 UPDATE语句的语法格式为: UPDATE <表名> SET <列名=表达式> [,… n][WHERE <更新条件>]
无条件更新 如何将所有学生的年龄增加1岁 例1 将所有学生的年龄设为20岁 UPDATE Student SET Sage = 20
有条件更新 例2 将‘9512101’学生的年龄改为21岁 UPDATE Student SET Sage = 21 WHERE Sno = '9512101'
带子查询的更新 还有其他的表示方法吗? 例3 将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 例3 将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE ‘计算机系‘= (SELETE Sdept FROM Student WHERE Student.Sno = SC.Sno); 练习18
删除数据 删除语句:DELETE语句 语法格式为: DELETE [ FROM ] <表名> [WHERE <删除条件>]
无条件删除 删除表中全部数据,但保留表的结构 例1 删除所有学生的选课记录 DELETE FROM SC
有条件删除 例2 删除学号为9531101学生的记录 delete from student where no=‘9533101’
带子查询的删除语句 例3 删除计算机科学系所有学生的选课记录。 DELETE FROM SC 例3 删除计算机科学系所有学生的选课记录。 DELETE FROM SC WHERE ‘计算机系‘= (SELETE Sdept FROM Student WHERE Student.Sno=SC.Sno); 练习16
小结 创建数据库 创建表 插入数据 修改表中数据 查询数据
Thank You ! www.themegallery.com