




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 SQL的数据查询3.3 SQL的数据查询n查询即检索操作,是对已经存在的基本表及视图进行数据检索,不改变数据本身。3.3.1 SELECT语句的基本语法n(1):SELECT-FROM-WHERE句型:n组成的查询块,一般形式:SELECT SELECT , ( (指出要检索的数据项指出要检索的数据项) )FROM FROM , ( (给出要操作的关系表名给出要操作的关系表名) )WHERE WHERE ( (给出查询结果应满足的条件给出查询结果应满足的条件) )n等价于:等价于:A1 , A2 , , An(p(r1 r2 rm)(1)、SELECT-FROM-WHERE句型nSel
2、ect语句的含义n根据 Select 子句中的属性列表,对上述结果作投影()操作n对 From 子句中的各关系,作笛卡儿积()n对 Where 子句中的逻辑表达式进行选择()运算,找出符合条件的元组n结果集n查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集1、SELECT子句n说明:n对应于关系代数的投影运算,用以列出查询结果集中的期望属性n目标列形式:可以为列名,* ,算术表达式,聚合函数。(1)、“* *”:表示“所有的属性”。示例:检索学生的姓名,年龄和性别SELECT S#,AGE,SEX FROM S;(SELECT * FROM S;)1、SELECT子句n
3、示例:给出所有老师的姓名及税后工资额。select TNAME,SAL 0.95from TEACHER关系定义为:TEACHER(TNO,TNAME,SAL,EDEPT)(2)、select中有含, , 的算术表达式2、from子句n说明 FROM子句列出查询的对象表。当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系,否则,要指出关系名。 示例: 检索TOM同学所学课程的课程号及成绩select SNAME,CNO,GRADE,S.SNO from S,SCwhere S.SNO=SC.SNO and SNAME=TOM注注:当数据类型为文本、日期或备注类型时,要加单迎号当
4、数据类型为文本、日期或备注类型时,要加单迎号 。当数据类型为数字或逻辑类型时,直接引用即可当数据类型为数字或逻辑类型时,直接引用即可n示例:查询学习课程名为数据库教程的学生学号和姓名。n涉及到三个表student 、 sc和Course select student.number,,C,memory from student,sc,Course where student.number=sc.studentnum and sc.Coursenum=Course.number and C=数据库教程 3 3、WHEREWHERE子句
5、子句n说明:说明:查询满足指定条件的元组可以通过查询满足指定条件的元组可以通过WHEREWHERE子子句实现。句实现。WHEREWHERE子句常用的查询条件如表所示。子句常用的查询条件如表所示。 n常用的查询条件常用的查询条件查询条件查询条件 比较比较确定范围确定范围确定集合确定集合自符匹配自符匹配 空值空值多重条件多重条件谓词谓词=,,=,=,!=,!,NOT+上述比较运算上述比较运算BETWEEN ANDIN,NOT INLIKE,NOT LIKEIS NULL,IS NOT NULLAND,OR3 3、WHEREWHERE子句子句(1) (1) 比较比较示例示例1 1:查计算机系全体学生
6、的名单:查计算机系全体学生的名单 SELECT snameSELECT sname FROM S WHERE FROM S WHERE dept=JSJdept=JSJ示例示例2 2:查所有年龄在查所有年龄在20岁以下的学生姓名及其年龄岁以下的学生姓名及其年龄nSELECT snameSELECT sname, age FROM S WHERE , age FROM S WHERE age 20age = 20NOT age= 203 3、WHEREWHERE子句子句(1) (1) 比较比较示例示例1 1:查:查19651965年以前出生的雇员名单年以前出生的雇员名单select select
7、 * * from from 雇员雇员where where 出生日期出生日期1965-1-11965-1-1select select * * from from 雇员雇员where year(where year(出生日期出生日期)1965)1965select select * * from from 雇员雇员where year(getdate()-year(where year(getdate()-year(出生日期出生日期)50)503 3、WHEREWHERE子句子句(2)确定范围查询年龄在18至23岁之间的学生的姓名、系别、和年龄 SELECT snameSELECT snam
8、e, dept, age , dept, age FROM S WHERE age FROM S WHERE age BETWEEN 18 AND 23BETWEEN 18 AND 23与与BETWEEN.AND.BETWEEN.AND.相对的谓词是相对的谓词是NOT BETWEEN.AND.NOT BETWEEN.AND.是大于还是大于等于?n(3) 确定集合n查物理系(WL)、数学系(XS)和计算机系(JSJ)的学生的姓名和性别nSELECT sname,sex,dept FROM S WHERE dept IN (WL,SX,JSJ)3 3、WHEREWHERE子句子句n与与ININ相对
9、的谓词是相对的谓词是NOT INNOT IN,用于查找,用于查找属性值不属于指定集合的元组。属性值不属于指定集合的元组。(4)字符匹配n谓词:谓词: NOT LIKE ESCAPE 1)匹配串为固定字符串例14 查询学号为200215121的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE 200215121;等价于: SELECT * FROM Student WHERE Sno = 200215121 ;3 3、WHEREWHERE子句子句字符匹配(续) 2) 匹配串为含通配符的字符串例15 查询所有姓刘学生的姓名、学号和性别。 SELECT Sn
10、ame,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;例16 查询姓欧阳且全名为三个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳_;3 3、WHEREWHERE子句子句字符匹配(续)例17 查询名字中第2个字为阳字的学生的姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE _阳%;例18 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘%;3
11、3、WHEREWHERE子句子句字符匹配(续)3) 使用换码字符将通配符转义为普通字符 例19 查询DB_Design课程的课程号和学分。 SELECT Cno,Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE ;例20 查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。 SELECT * FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ; ESCAPE 表示表示“ ” 为换码字符为换码字符 3 3、WHEREWHERE子句子句(5) 涉及空值的查询n谓词:谓词: IS NULL 或 I
12、S NOT NULLn “IS” 不能用 “=” 代替 例21 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL例22 查所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;3 3、WHEREWHERE子句子句3 3、WHEREWHERE子句子句(6)多重条件查询 逻辑运算符AND和OR可用来联结多个查询条件。如果这两个运算符同时出现在同一个WHERE条件子句中,则AND的优先级高
13、于OR,但用户可以用括号改变优先级。查询的类型n1、单表查询n2 2、连接查询、连接查询n3 3、嵌套查询、嵌套查询n4、集合查询n示例:查询学习课程号为103的学生学号和姓名。n涉及到表student 和 sc n三种写法:只是效率不同n自然连接:n笛卡尔积n嵌套n示例:查询学习课程名为数据库教程的学生学号和姓名。Student(number , name ,sex,age,qq,email,memory,dept )SC(studentnum, classnum, score)Course(number ,name ,grade)n示例:查询学习课程号为103的学生学号和姓名。n涉及到表s
14、tudent 和 sc n三种写法:只是效率不同n自然连接:n等值连接n嵌套学生(学号,姓名,年龄,性别)学生(学号,姓名,年龄,性别) S(number,name,SEX,AGE)课程(课程号,课程名,教师)课程(课程号,课程名,教师) C(number, nameE,grade)选课(课程号,学号,成绩)选课(课程号,学号,成绩)SC(studentnum,classnum,score)n自然连接 select number, from student inner join sc on student.number=sc.studentnum where sc.cl
15、assnum=103n等值连接 select number, name from student,sc where student.number=sc.studentnum and sc.classnum=103n嵌套n select number,name from student where number in (select studentnum from sc where classnum=103)n select number,name from student where exists (select studentnum from sc where classnum=103)查询
16、的类型连接查询查询学习课程名为103的学生学号和姓名。查询的类型嵌套查询n在一个select语句的where子句中,又出现了另一个select语句,这种查询称为嵌套查询。子查询中还可以嵌入子查询。n示例:检索既学习了C1又学习了C2课程的学生的学号。nselect select snosno from sc from sc where cno=C1 and sno where cno=C1 and sno in in ( (select sno from sc where cnoselect sno from sc where cno=C2=C2) )查询的类型嵌套查询n在一个select语句
17、的where子句中,又出现了另一个select语句,这种查询称为嵌套查询。子查询中还可以嵌入子查询。n无论单层嵌套还是多层嵌套查询,执行的过程都是由里向外,即先做最内层的查询,求得一个结果,然后根据这个结果执行上一层查询,由里向外,直到求得最外层的查询结果。考虑:嵌套查询的内层查询执行几次?3.3.3 SELECT语句中的限定1、重复元组的处理n语法约束:缺省为保留重复元组,也可用关键字all显式指明。若要去掉重复元组,可用关键字distinct或unique指明。n示例:找出所有选修了课程的学生。select distinct sno from SC演示select (all)student
18、num from SC与select distinct studentnum from SC结果不同2、条件表达式中的算术比较操作n示例:检索课程号为C2且成绩高于85分以上的学生学号和成绩 SELECT sno,grade FROM SC WHERE cno=C2 AND grade852、条件表达式中的算术比较操作 运算符 BETWEENAND可以选择属性列在一定值范围内的行n示例n 检索成绩在70分至80分之间的学生学号,课程号和成绩SELECT * FROM SCWHERE GRADE BETWEEN 70 AND 80;3、列和基本表的改名操作n格式old_name as new_n
19、ame 为关系和属性重新命名,可出现在select和from子句中。n为结果集中的某个属性改名为结果集中的某个属性改名n使结果集更具可读性使结果集更具可读性n1、属性更名 例1:Select sno as 学号学号, cno as 课程课程号号,grade as 成绩成绩From SC例2:Select sno, sname, 2003-age as birthdayFrom S3、列和基本表的改名操作3、列和基本表的改名操作n2.关系更名 示例:检索至少选修课程号为C2和C4的学生学号(第二章的习题)。S(SNO , SNAME ,AGE,SEX )SC(SNO,CNO,GRADE)C(CN
20、O, CNAME ,TEACHER)SELECT X.SNO FROM SC AS X, SC AS Y WHERE X.SNO=Y.SNO AND X.CNO=C2 AND Y.CNO= C4 示例:检索至少选修课程号为103和126的学生学号Student(number , name ,sex,age,qq,email,memory,dept )SC(studentnum, classnum, score)Course(number ,name ,grade)演示SELECT X.Studentnum FROM SC AS X,SC AS Y WHERE X.Studentnum =Y.
21、Studentnum AND X.Classnum=103 AND Y. Classnum=126 4、字符串的匹配操作n命令格式nlike:找出满足给定匹配条件的字符串。 格式:列名 not like “字符串”n匹配规则: “*” :匹配零个或多个字符。 “?”:匹配任意单个字符。 escape :定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待。如escape “”,是定义了 作为转义字符,则可用%去匹配%,用去匹配,用 去匹配 。n大小写敏感大小写敏感4、字符串的匹配操作示例:列出姓刘的学生的学号、姓名。Select sno,snameFrom StudentWhere
22、sname LIKE 刘%SnameSnameSnoSnoSageSageSsexSsexSdeptSdept刘勇刘勇95001950012222男男CsCs张新张新95002950022121女女CsCs刘晨刘晨95003950032222女女IfIf李立李立95004950042323男男ififSname SnoSageSsexSdept刘勇刘勇9500122男男Cs刘晨刘晨9500322女女If4、字符串的匹配操作n示例n例:列出张姓且单名的学生的学号、姓名。Select sno,snameFrom SWhere sname LIKE 张_ _n例:列出姓名中含美字的人。select
23、* from student where sname like %美%4、字符串的匹配操作n转义符: escape 例:列出课程名称中带有_的课号及课名。Select cno,cnameFrom CWhere cname LIKE %_% escape n列出名称中含有4个字符以上,且倒数第3个字符是d,倒数第2个字符是_的课程的所有信息。 select * from c where CNAME like “% d ”4、字符串的匹配操作n查以”DB_”开头,且倒数第三个字符为i的课程的详细情况nSELECT * FROM C WHERE Cname LIKE DB_%i_ ESCAPE ;n
24、注意这里的匹配字符串DB_%i_。第一个_前面有换码字符,所以它被转义为普通的_字符。而%、第二个_和第三个_前面均没有换码字符,所以它们仍作为通配符。其执行结果为:Cno Cname CcreditCno Cname Ccredit - - - - - - - - 8 DB_Design 4 8 DB_Design 4 10 DB_Programing 10 DB_Programing 2 2 13 DB_DBMS Design 4 13 DB_DBMS Design 4聚合函数聚合函数 为了进一步方便用户,增强检索功能,SQL提供了许多聚合函数,主要包括: COUNT(DISTINCT|A
25、LL COUNT(DISTINCT|ALL * *) ) 统计元组个数 COUNT(DISTINCT|ALL COUNT(DISTINCT|ALL ) 统计一列中非空值的个数 SUM(DISTINCT|ALL SUM(DISTINCT|ALL ) 计算一列值的总和(此列必须是数值型) AVG(DISTINCT|ALL AVG(DISTINCT|ALL ) 计算一列值的平均值(此列必须是数值型)MAX(DISTINCT|ALL MAX(DISTINCT|ALL ) 求一列值中的最大值 MIN(DISTINCT|ALL MIN(DISTINCT|ALL ) 求一列值中的最小值 聚合函数聚合函数n1
26、、求男学生的总人数和平均年龄SELECT COUNT(*),AVG(AGE) FROM S WHERE SEX=M演示查看男女生的人数查看男女生的人数select sex,count(sex) from student group by sex查看各年龄的人数查看各年龄的人数select age,count(age) from student group by age聚合函数聚合函数n举例:统计选修了课程的学生人数SELECT COUNT(S#) FROM SCSELECT count(grade) as 成绩人数, count(*) as 总人数 , avg(grade) as 平均分数 f
27、rom sc举例:如果有一个grade值为空下面的结果相同吗?1、COUNT(*) 对行的计数,不消除重复行 2、只有count(*)将空值null的行也记入结果。演示SELECT COUNT(qq) FROM STUDENT与SELECT COUNT(number) FROM STUDENT结果不同因为qq有空值的记录存在n示例n列出老师的最高、最低、平均工资。 select DNO,max(SAL),min(SAL),avg(SAL) from TEACHER nNull在聚集函数中的角色nNull意为当前值不确定当前值不确定。nCount为0,其余均忽略 NullnSum:不将其计入nA
28、vg:具有 Null 的元组不参与,举例说明nMax / Min:不参与n举例:nSELECT count(sno),count(sname) from sn 英语四级通过律 缺考 avg 科学合理 聚合函数聚合函数演示计算平均年龄,有空值是不计算在内select avg(age) from student 聚合函数聚合函数nGroup By子句指定查询结果的分组条件 GROUP BY子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组。 对查询结果分组的目的是为了细化集合函数的作用对象。如果未对查询结果分组,集合函数将作用于整个查询结果,即整个查询结果只有一个函数值。如果用GROUP
29、分了组,集合函数将作用于每一个组,即每一组都有一个函数值。聚合函数聚合函数GROUP BY举例:查询各个课程号以及相应的选课人数 该SELECT语句对SC表按Cno的取值进行分组,所有具有相同Cno值的元组为一组,然后对每一组作用集函数COUNT以求得该组的学生人数。查询为:SELECT Cno, COUNT(Sno)FROM SCGROUP BY Cno演示统计每门课程有多少学生选修统计每门课程有多少学生选修Select classnum,count(student) from sc group by classnum聚合函数聚合函数nHaving子句指定分组搜索条件 n可以针对聚合函数的结
30、果值进行筛选,它是作用于分组计算的结果集n跟在Group By子句的后面,有GROUP BY 才有HAVING例:列出选修两门(含)以上课程的学生的学号。SELECT studentnum FROM SC GROUP BY studentnum HAVING COUNT(classnum)=2聚合函数例:列出具有两门(含)以上不及格的学生的学号、不及格的课目数。Select studentnum,count(studentnum)From SCWhere score = 2只选出有不及格的学生注意 select 语法顺序思考:列出具有5人以上不及格的科目的课程号。n列出平均成绩在80分以上的学
31、生的学号。 select studentnum,avg(score) from SC group by studentnum having avg(score)=80聚合函数聚合函数聚合函数聚合函数nHaving 与 Where的区别nWhere 决定哪些元组被选择参加运算,作用于关系中的元组nHaving 决定哪些分组符合要求,作用于分组n聚合函数的条件关系必须用Having,Where中不应出现聚集函数元组显示顺序n命令 order by 列名 asc | descn示例n检索选修C1的学生学号和成绩,并按成绩的降序和学号的升序排列 SELECT Sno,GRADE FROM SC WHE
32、RE Cno=C1 ORDER BY GRADE DESC,Sno;n注意:ORDER BY 子句表示结果要排序,它必须在所有其它子句之后作为最后一个子句出现小结:小结:n SELECT语句是SQL的核心语句,其语句成份多样,尤其是目标类表达式和条件表达式,可以有多种可选形式.这里总结一下它们的一般格式.n SELECT语句的一般格式:n SELECTALL|DISTINCT别名nTop n percentTop n percent FROM别名,别名n WHEREn GROUP BY HAVINGn ORDER BY ASC|DESC;语句的执行过程(1)读取FROM子句中基本表,视图的数据
33、,执行笛卡儿积操作;(2)选取满足WHERE子句中给出的条件表达式的元组;(3)按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组;(4)按SELECT子句中给出的列名或列表达式求值输出;(5)ORDER子句对输出的目标表进行排序,可选择升序获降序.注意:注意:SELECTSELECT语句中各子句的排列次序是语句中各子句的排列次序是很重要的,子句必须依相应的次序来使用很重要的,子句必须依相应的次序来使用。 SELECT查询语句 练习nSELECT句型使用实例例3.8 教学数据中有三个基本表:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C
34、(C#,CNAME,TEACHER) 下面用SELECT查询语句表达每个查询。 检索学习课程号为103的学生学号与成绩。 检索学习课程号为103的学生学号与姓名。 检索选修课程名为数据库教程的学生学号与姓名。 检索选修课程号为103或126的学生学号。 检索至少选修课程号为103和126 的学生学号。 检索不学103号课程的学生姓名和学号。 检索学习了全部课程的学生姓名。 检索所学课程包含学号48177所学课程的学生学号。SQL语句使用举例1n1、检索学习课程号为103号的学生学号和成绩。Student(number , name ,sex,age,qq,email,memory,dept )
35、SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)SELECT studentnum,score FROM SC WHERE Classnum=103 studentnum,score ( Classnum=103(SC)SQL语句使用举例2n2、检索学习课程号为103号的学生学号与姓名。SELECT Student.number,name FROM Student,SC WHERE Student.number=SC.studentnum AND Classnum=103S#,SNAME(c#=C2(SC S)Student(number , n
36、ame ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)SQL语句使用举例2-方法2n2、检索学习课程号为103号的学生学号与姓名。SELECT number,name FROM Student WHERE number IN (SELECT studentnum FROM SC WHERE Classnum=103)S#,SNAME(c#=C2(SC) S)SQL语句使用举例2-方法3n2、检索学习课程号为103号的学生学号与姓名。SELECT number,name FROM St
37、udent WHERE 103 IN (SELECT Classnum FROM SC WHERE Studentnum=Student.number)SQL语句使用举例2-方法4n2、检索学习课程号为103号的学生学号与姓名。SELECT number,name FROM Student WHERE EXISTS (SELECT * FROM SC WHERE SC.Studentnum=Student.number AND Classnum=103)http:/ , SNAME ,AGE,SEX )SC(SNO,CNO,GRADE)C(CNO, CNAME ,TEACHER)SELECT
38、Student.number, FROM Student,SC,Course WHERE Student.number=SC.Studentnum AND SC.Classnum=Course.number AND C= 数据库教程S#,SNAME(CNAME=MATHS(C SC S)Student(number , name ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)SQL语句使用举例3方法2SELECT number, name
39、FROM Student WHERE number IN(SELECT Studentnum FROM SC WHERE Classnum IN (SELECT number FROM Course WHERE NAME= 数据库教程)3、检索选修课程名为数据库教程的学生学号与姓名关系代数实例3查询至少学习查询至少学习LIU老师所授一门课程的女学老师所授一门课程的女学生学号和姓名。生学号和姓名。S#,SNAME(TEACHER=LIU SEX=F(L(SC.C#=C.C# SC.S#=S.S# (SSCC)这里L为S,SNAME,AGE,SEX,C#,GRADE,CNAME,TEACHER学生
40、(学号,姓名,年龄,性别)学生(学号,姓名,年龄,性别) S(S#,SNAME,SEX,AGE)课程(课程号,课程名,教师)课程(课程号,课程名,教师) C(C#,CNAME,TEACHER)选课(课程号,学号,成绩)选课(课程号,学号,成绩)SC(C#,S#,GRADE)SELECT Student.number, FROM Student,SC,Course WHERE Student.number=SC.学号 AND SC.课程号=Course.number AND Course.tname= LIU老师老师And sex=女关系代数实例3查询至少学习查询至少学习
41、LIU老师所授一门课程的女学老师所授一门课程的女学生学号和姓名。生学号和姓名。学生(学号,姓名,年龄,性别)学生(学号,姓名,年龄,性别) S(S#,SNAME,SEX,AGE)课程(课程号,课程名,教师)课程(课程号,课程名,教师) C(C#,CNAME,TEACHER)选课(课程号,学号,成绩)选课(课程号,学号,成绩)SC(C#,S#,GRADE)SELECT number, name FROM Student WHERE number in (select 学号学号 from SC where 课程号课程号 in(select number from Course where tnam
42、e= LIU老师老师)SQL语句使用举例44、检索选修课程号为103号或126号的学生学号S(SNO , SNAME ,AGE,SEX )SC(SNO,CNO,GRADE)C(CNO, CNAME ,TEACHER)SELECT Student.number FROM SC WHERE Classnum=103 OR Classnum=126 S#(c#C2 C#C4(SC)Student(number , name ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)SQL语句使用举例5
43、5、检索至少选修课程号为103号和126号的学生学号SELECT X.Studentnum FROM SC AS X,SC AS Y WHERE X.Studentnum =Y. Studentnum AND X.Classnum=103 AND Y. Classnum=126 Student(number , name ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)1(1=4 22 5=3(SCSC)学号课程号成绩学号课程号成绩950012859500128595001285950
44、013889500128595002290950022909500128595002290950022909500229095002380关系代数实例51(1=4 22 5=3(SCSC)SQL语句使用举例6n6、检索不学103号课程的学生姓名与年龄。SELECT NAME,AGE FROM Student WHERE number NOT IN(SELECT Studentnum FROM SC WHERE Classnum=103)SNAME,AGE(S)SNAME,AGE(C#=2(SC S)Student(number , name ,sex,age,qq,email,memory,d
45、ept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)SQL语句使用举例6方法2n6、检索不学103号课程的学生姓名与年龄。SELECT NAME,AGE FROM Student WHERE NOT EXISTS(SELECT * FROM SC WHERE Student.number=SC.Studentnum AND Classnum=103)关系代数关系代数实例实例7n检索学习全部课程的学生姓名。涉及“全部值”用除法操作,先求全部课程,再用除法求出学习了全部课程的学生的学号,最后求出学生姓名。n学号Sno、姓名SnameStuden
46、t表n课程号CnoCourse表n学号Sno、课程号CnoSC表nStudent SCCoursesnocnoStudent(number , name ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)关系代数实例7学生的选课情况可用Sno,Cno(SC)表示全部课程可用Cno(C) 表示学了全部课程的学号可以用除法得到(学号集)Sno,Cno(SC) Cno(C) 从学号求出学生的姓名:sname(S (Sno,Cno(SC) Cno(C) )SQL语句使用举例7n7、检索学习了全部
47、课程的学生姓名思路:在表S中找学生,要求此学生学习了全部课程,换言之,在表S中找学生,表C中不存在任一门课程此学生没有学。 根据此语义可写sql语句:sname(S (Sno,Cno(SC) Cno(C) )Student(number , name ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)SQL语句使用举例7n7、检索学习了全部课程的学生姓名和学号。SELECT Number,NAME FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS(SELECT * FROM SC WHERE Student.number=SC.Studentnum AND SC.classnum =Course.Number) 在C表中的有课程此学生没学,为真Student(number , name ,sex,age,qq,email,memory,dept )SC(学号学号,课程号课程号, 成绩成绩)Course(number ,name ,grade)n检索所学课程包含学生S3所学课程的学生学号。涉及“全部值”用除法操作,先求学生的选课情况,再求S3学生所学的课程,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国电锌板行业深度研究及发展前景投资评估分析
- 2025至2030中国特种建材行业发展分析及竞争策略与趋势预测报告
- 医疗知识更新中的学习动力策略
- 企业内部管理与智慧零售技术融合策略研究
- 大五人格学习路径与现代教学技术的结合研究
- 教育科技与学生学习动机的激发
- 创新教育心理学在校园中的应用
- 学生情商与心理健康教育的结合点探讨
- 开车安全培训课件
- 提升小学生学习动力的教育心理学途径
- 优生优育课件-提高生育健康水平
- 单位车辆领取免检标志委托书范本
- 老年患者风险评估与防范措施
- 人教版小学数学一年级上册全套课件合集
- 父母与高中生之间的协议书
- 2022年韶关市法院系统招聘考试真题
- 2022年江苏省射阳中等专业学校工作人员招聘考试真题
- 2023年副主任医师(副高)-中医内科学(副高)考试历年真题精华集选附答案
- 高中英语新课程标准试题含答案(四套)
- 上海六年级下册数学期中考试试卷及答案3篇(沪教版第二学期)
- 危险品储存、运输、使用安全技术交底
评论
0/150
提交评论