SELECT(连接查询、嵌套查询)
目录
一、 连接查询
若一个查询同时涉及两个及以上的表,则称为连接查询。
查询条件
WHERE [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
这里的列名叫做连接字段
比较运算符为=时是等值查询,其他(>=,>,<,!=等)为非等值查询
等值连接
【例 3.49】查询每个学生及其选修课程的情况。等值连接
SELECT Student.*, SC.*
--简单来讲就是输出全部,在这里可以直接是select *
FROM Student, SC
WHERE Student.Sno = SC.Sno; /*将Student与SC中同一学生的元组连接起来*/
简单来讲,等值连接的效果就是把两个表拼在一起。
所以会出现重复列(这里的Sno,也就是连接字段)
自然连接
【例 3.50】查询每个学生及其选修课程的情况。自然连接
SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade
--这里把所有需要的属性列出来就可以避免重复
FROM Student, SC
WHERE Student.Sno = SC.Sno;
这里需要注意的是Sno这一列,对于两个表里的同名属性,要指出是哪个表里的(不然就属于语法错)
一条SQL语句完成连接查询加选择查询
这里where子句是一条复合语句
【例3.51】查询选修2号课程且成绩在90分以上的所有学生的学号和姓名。
SELECT Student.Sno, Sname
FROM Student, SC
WHERE Student.Sno = SC.Sno AND SC.Cno = '2' AND SC.Grade > 80;
SELECT *
FROM