SQL语言复杂查询-IN/Not IN子查询
2022/2/6 19:12:50
本文主要是介绍SQL语言复杂查询-IN/Not IN子查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
学生:学号,姓名,性别,年龄,系别,班级 Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6)) 院系:系别,系名,系主任 Dept(D# char(2),Dname char(10),Dean char(10)) 课程:课程,课号,教师编号,学时,学分 Course(C# char(3),Cname char(12),Chours integer,Credit float(1),T# char(3)) 教师:教师编号,教师姓名,所属院系,工资 Teacher(T# char(3),Tname char(10),D# char(2),Salary float(2)) 选课:学号,课号,成绩 SC(S# char(8),C# char(3),Score float(1))
1.子查询解决的问题
(1)集合成员资格:某个元素是否是集合的元素
(2)集合之间比较:一个集合是否包含另一个集合
(3)集合基数测定:集合是否为空和集合是否有重复元组
2.子查询
(1)定义:出现在 Where 子句中的 Select 语句被称为子查询 (subquery),子查询返回了一个集合,可以通过与这个集合的比较来确定另一个查询的集合
(2)分类:(NOT) IN - 子查询;θ - Some/ θ - All 子查询;(NOT) EXISTS 子查询
3.(NOT) IN 子查询
(1)基本语法:表达式 [not] in (子查询)
(2)语义:判断某一表达式的值是否在子查询的结果中
4.非相关子查询举例
(1)非相关子查询:内层查询独立进行,没有涉及任何外层查询的相关信息
(2)列出张三,李四同学的所有信息
Select *
From Student
Where Sname = "张三" or Sname = "李四";
Select *
From Student
Where Sname in ("张三", "李四"); //直接用枚举的形式给出了子集合
(3)列出了选修了 001 号课程的学生的学号和姓名
Select S#, Sname
From Student
Where S# in (Select S# From SC Where C# = '001');
(4)求既学过 001 号课程,又学过 002 号课程的同学的学号
Select S# From SC
Where C# = '001' and S# in ( Select S# From SC Where C# = '002' );
(5)列出没学过李明老师讲授课程的所有同学姓名
Select Sname From Student
Where S# not in ( Select S# From SC, Coures C, Teacher T Where T.Tname = '李明' and SC.C# = C.C# and T.T# = C.T# );
5.相关子查询举例
(1)相关子查询:内层查询需要依靠外层查询的某些参量作为限定条件才能进行的子查询,外层向内层传递的参量需要使用外层的表名或表别名来限定
(2)说明:外层查询能向内层查询传递参数,反之不成立,涉及到作用域原则
(3)求学过 001 号课程的同学的姓名
Select Sname From Student
Where S# in ( Select S# From SC Where Student.S# = S# and C# = '001' );
这篇关于SQL语言复杂查询-IN/Not IN子查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南