口检索同时选修了课程号为CO1和C02的学生学号SELECT S# FROMSC WHERE C# ‘CO1INTERSECTSELECT S# FROM SC WHERE C# =‘CO2'(仅ORACLE)等价于:SELECT S#FROMSCWHERE C#=‘CO1’ AND S# IN(SELECT S# FROM SC WHERE C# =‘C02")口检索选修了课程号为C01而未选修C02的学生学号SELECT S#FROM SC WHERE C#=‘CO1MINUSSELECT S# FROM SC WHERE C#=‘CO2'(仅ORACLE)等价于:SELECT S#FROMSCWHERE C#=‘CO1'ANDS# NOT IN(SELECT S# FROM SC WHERE C#=‘CO2')
❑检索同时选修了课程号为C01和C02的学生学号 SELECT S# FROM SC WHERE C#=‘C01’ INTERSECT SELECT S# FROM SC WHERE C#=‘C02’(仅ORACLE) 等价于: SELECT S# FROM SC WHERE C# = ‘C01’ AND S# IN (SELECT S# FROM SC WHERE C# = ‘C02’) ❑检索选修了课程号为C01而未选修C02的学生学号。 SELECT S# FROM SC WHERE C#=‘C01’ MINUS SELECT S# FROM SC WHERE C#=‘C02’(仅ORACLE) 等价于: SELECT S# FROM SC WHERE C#=‘C01’AND S# NOT IN (SELECT S# FROM SC WHERE C#=‘C02’)
3.4SQL的数据更新(DML)3.4.1数据插入>插入单个元组语法:INSERT INTO<表名>[(<列名1>[<列名2>]..)]VALUES(<常量1>[,<常量2>].....)INSERT INTO S VALUES('SOO1’,“张三’,‘男’,18,‘IS")>插入子查询结果语法:INSERTINTO<表名>「(<列名1>「,<列名2>].....)<子查询>例:为所有学生插入一条选修CO1课程的记录INSERT INTO SC SELECT S#,‘CO12,nu1 FROM S
3.4 SQL的数据更新(DML) 3.4.1数据插入 ➢ 插入单个元组 语法: INSERT INTO <表名>[ (<列名1> [, <列名2>].)] VALUES(<常量1>[,<常量2>].) INSERT INTO S VALUES(’S001’, ‘张 三’ , ‘男’ ,18, ‘IS’) ➢ 插入子查询结果 语法: INSERT INTO <表名> [ (<列名1> [, <列名2>].)]<子查询> 例:为所有学生插入一条选修C01课程的记录 INSERT INTO SC SELECT S#,‘C01’,null FROM S
3.4.2数据修改>语法:UPDATE<表名> SET<列名>=<表达式>[,<列名>=<表达式>]..[WHERE<条件>];>修改某一个元组的值将学生S001的年龄该为22岁UPDATE S SET SA-22 WHERE S# ='S001>修改多个元组的值将所有的学生年龄增加1岁UPDATE S SET SA=SA+1
3.4.2数据修改 ➢ 语法: UPDATE <表名> SET <列名>=<表达式>[, <列名>= <表达式>]. [WHERE <条件>]; ➢ 修改某一个元组的值 将学生S001的年龄该为22岁 UPDATE S SET SA=22 WHERE S# =’S001’ ➢ 修改多个元组的值 将所有的学生年龄增加1岁 UPDATE S SET SA=SA+1
>带子查询的修改语句将计算机科学系所有的学生成绩置零UPDATE SC SET GR=OWHERE“CS'=(SELECT SDFROM S WHERE S# =SC.S#)(相关子查询)不同的DBMS可以使用oin实现同样功能,如SYBASEUPDATE SC set GR=O from S where S.S#=SC.S#and SD='CS'或 UPDATE SC set GR=O where S# in(SELECT S# from S where SD='CS')>修改操作与数据库的一致性如同时修改S和SC两表中的S#的值为了保证数据库的一致性,引入事务概念
➢ 带子查询的修改语句 将计算机科学系所有的学生成绩置零 UPDATE SC SET GR=0 WHERE ‘CS’ = (SELECT SD FROM S WHERE S# = SC.S#) (相关子查询) 不同的DBMS可以使用join实现同样功能,如SYBASE UPDATE SC set GR=0 from S where S.S#=SC.S# and SD=’CS’ 或 UPDATE SC set GR=0 where S# in (SELECT S# from S where SD=’CS’) ➢ 修改操作与数据库的一致性 如同时修改S和SC两表中的S#的值 为了保证数据库的一致性,引入事务概念
3.4.3数据删除>语法:DELETE FROM<表名>[WHERE<条件>];>删除某一个元组的值删除学号为S001的学生DELETE FROM S WHERE S#=°SOO1>删除多个元组的值删除所有学生的选课记录DELETEFROMSC>带子香询的删除语句删除计算机科学系所有学生的选课记录DELETE FROM SC WHERE °CS'=(SELECTSDFROMSWHERES#=SC.S#)(相关子查询)DELETE from SC where S# in(SELECTS#fromSwhereSD='CS’)(非相关子香查询)
3.4.3数据删除 ➢ 语法: DELETE FROM <表名> [WHERE <条件>]; ➢ 删除某一个元组的值 删除学号为S001的学生 DELETE FROM S WHERE S#=‘S001’ ➢ 删除多个元组的值 删除所有学生的选课记录 DELETE FROM SC ➢ 带子查询的删除语句 删除计算机科学系所有学生的选课记录 DELETE FROM SC WHERE ‘CS’=( SELECT SD FROM S WHERE S#=SC.S#) (相关子查询) DELETE from SC where S# in (SELECT S# from S where SD=’CS’) (非相关子查询)