第7讲-SQL语言复杂查询-(NOT) in语句

本文介绍了SQL中的复杂查询技巧,特别是(NOT) IN语句的使用。通过子查询实现对集合成员判断、集合比较、空集合测试和重复元组检查。文中讲解了子查询的定义,包括非相关子查询和相关子查询的概念,并通过多个实例解析了如何运用(NOT) IN操作符进行多条件查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有的时候会有以下条件的判断:

      1)某一元素是否是某一集合的成员

      2)集合之间的比较,某一集合是否属于另一集合

      3)测试集合是否为空

      4)判断集合是否有重复的元组

       ......

子查询的定义:出现在where语句的select语句被称为子查询。子查询返回一个集合,可以通过这个集合的比较来确定另一个集合。

(NOT) in 语句:

  语法: 表达式  [NOT] in (子查询)

  语意: 判断某一表达式是否存在子查询中

  例: 查询张三,王三同学的所有信息、

select * From student
where  Sname in ('张三',‘王三’);

  上面查询等价于:

select * From student
where Sname='张三' or Sname='王三';

 例:列出选修的001号课程的学生学号和姓名

select S# ,Sname From student
where S# in(select S# From SC 
                      where C#='001');
--括号里面的子查询表示学过001号课程的学生的学号集合

例:查询既学过001号课程,又学过002号课程的学生的学号

select  S#  from  SC
where C#='001' and S# in(select  S#  From  SC
                                           where C#='001');
--上面语句是求学过001号课所有同学和学过002号课所有同学的交集

例:列出学过李明老师讲授课程的所有同学的姓名

select Sname From student
where  S# not in(select S# From SC,Course C ,Teacher T
 where T.Tname='李明' and SC.C#=C.C#and T.T#=C.C#);
--子查询表示学过李明老师的课的学生学号的集合

非相关子查询概念:内外存查询独立进行,互不影响,没有任何外层查询的相关信心的子查询。

相关子查询的概念:内存查询需要依赖外层查询的某些参数变量或某些限定条件。

例:查询学过001号课程同学的姓名

select Sname 
From student stu
where S# in(select S# From SC
where S#=stu.S# and C#='001');
--上面子查询中用到了stu,他是出现在外层查询中

特别注意的是:相关子查询只能由外层像内层传递参数,而不能反之。这也叫做变量的作用于范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值