SQL语句基础 |
您所在的位置:网站首页 › sql语句子查询执行顺序 › SQL语句基础 |
子查询
在SQL语句中,一个select-from-where语句称为一个查询块。如果一个select语句嵌套在一个select,insert,update或delete语句中,则称之为子查询或者内存查询。包含子查询的语句则称为主查询或者外层查询 子查询语句一般出现在where和having子句中 写在where中的子句中的子查询一般有下面的形式 WHERE [NOT] IN (子查询) // (集合WHERE 比较运算符 (子查询) //(单值WHERE EXISTS (子查询) //(是否空值 例如: 使用子查询进行基于集合的查询 //查询与钟文辉同学在同一个系的同学 //第一步先查询钟文辉同学所在的系 //然后把系作为已知条件查找同学信息 SELECT * FROM Student WHERE Sdept IN( SELECT Sdept FROM Student Where Sname ='钟文辉') ;使用子查询进行比较查询 //查询选修了C04课程且课程成绩高于此课程平均成绩的的学生学号和该门课成绩 //先查出C04课程的平均成绩 //然后把平均成绩作为已知条件查找同学学号和成绩 SELECT Sno, Grade FROM SC WHERECno='C04' AND Grade>( SELECT AVG(Grade) FROM SC Where Cno ='C04') ;带有ANY和ALL的子查询 //查询比C03课程成绩都高的选了C04课程的学生的学号和成绩 SELECT Sno, Grade FROM SC WHERECno='C04' AND Grade>ALL( SELECT Grade FROM SC Where Cno ='C03') ;使用带EXSITS谓词的子查询 //查询选修了C04课程且课程的学生姓名 SELECT Sname FROM SC WHERE EXISTS( SELECT * FROM SC Where SC.Sno=Student.Sno AND Cno ='C04');注意,带exists谓词的子查询是先执行外层,再执行内层查询,根据内存查询返回的true和false来判断外层数据是否满足条件。 查询的集合运算SQL提供与关系代数中集合并,交,差对应的谓词,他们分别是UNION,INTERSECT,EXCEPT,当使用这些操作进行查询时,参与运算的两个查询分别用括号括起来。 例如: //查询计算机系和机电系的所有学生信息 ( SELECT *FROM Student WHERE Sdept='计算机系') UNION ( SELECT *FROM Student WHERE Sdept='机电系') //查询同时选修了C03和C04课程的学生的学号 (SELECT Sno FROM SC WHERE Cno='C03') INTERSECT (SELECT Sno FROM SC WHERE Cno='C04') //查询选修了C01但是没有选修C02课程的学生的学号 (SELECT Sno FROM SC WHERE Cno='C01') EXCEPT (SELECT Sno FROM SC WHERE Cno='C02') |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |