数据库sql语言学习(七)

本文详细介绍了数据库查询中的嵌套子查询,包括不相关子查询和相关子查询的使用。通过实例展示了如何利用子查询进行集合成员资格检查(如IN表达式)、集合比较(SOME, ALL)和存在表达式的应用。示例涵盖了查询学生信息、课程信息以及比较操作,帮助读者理解子查询在SQL查询中的重要性。" 106611280,1480975,Wireshark分析微服务通信:从抓包到解密,"['网络封包分析', 'SpringCloud', '服务治理', '通信协议']
摘要由CSDN通过智能技术生成

数据库查询之嵌套(一)

/*
可能用到的表结构
Departments(Dno, Dname,Dheadno)  
院系(院系号,院系名,院主任)
Teachers (Tno,Tname,Sex,Birthday,Title,Dno)
老师(教工号,教师名,性别,生日,职称,所在院系号)
Students(Sno,Sname,Sex,Birthday,Speciality,Dno)
学生(学号,名字,性别,生日,专业名,院系号)
Course(Cno, Cname,Credit)
课表(课程号,课程名,学分)
Teaches(Tno,Cno,TCscore)
实体教(教工号,课程号,评估得分)
SC(Sno,Cno,Greade)
选课(学生学号,课程号,学生成绩)


*/






/*


1.最常见的嵌套是将子查询嵌套在where子句或having短语的条件中
2.我们称将一个查询嵌套在另一个查询中的查询称为嵌套查询,并称前者为子查询(内层查询),后者为父查询(外层查询)
3.子查询中不能使用group by子句(一定要注意的一个地方)


嵌套查询可以分两类
   不相关子查询的子查询的条件不依赖于父查询
   相关子查询的子查询的查询条件依赖于父查询


使用子查询可以对集合的成员资格(in)、集合比较(some  ,all )和集合基数进行检查(exists)
可以引进子查询的表达式: IN表达式、存在表达式、null表达式和唯一表达式等
*/




/*
1. IN引出的子查询:(作用是判断某一个元素是否是某一个集合的成员)这种一般使用主码的属性来进行整合为集合
IN表达式的第一种形式,用于判定一个给定的值是否在给定的集合中


IN表达式的第二种形式可以更一般地判定集合成员资格,其形式如下:
 <元组> [NOT] IN <子查询>


其中<元组>形如(<值表达式>,…,<值表达式>),并且当元组只有一个分量时,可以省略圆括号
当<元组>出现在<子查询>的结果中,<元组> IN <子查询>为真,而<元组> NOT IN <子查询>为假 
*/






-- 查询和张华在同一个专业学习的男同学的学号和姓名。
--这种检查某一个元素是否在另一个集合的成员中,我们可以先将集合找到,在将每一个元素去查询,集合中是否有(或者是没有)这个元素;
-- 第1步.查询张华的专业(他是一个集合)(将它作为子查询)


select Speciality from Students where Sname = '张华';


-- 第2步.再到学生表中查找和张华同一专业的男同学的学号和姓名(将表中每一个元素都去做判断)
select Sno,Sname
from Students
where Sex = '男' and Sname <> '张华' and Speciality in 
(select Speciality from Students where Sname = '张华');
--注意: 
-- 子查询的FROM子句中的表(包括它的属性,下同)仅在子查询中存在并起作用
-- 父查询from子句中的表在父查询和子查询都存在,但是当子查询的from子句包含相同的表时,其作用域不包含子查询




-- 列出林艳和张华同学所有的信息(这是最简单的集合判断,因为它的集合已经给出来了,这个时候可以直接使用这个集合)
select * 
from Students 
where Sname in ('张华','林艳');
-- 上面这个语句相当于是
select *
from Students
where Sname = '张华' or Sname = '林艳';








-- 列出了选修了CS101号

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值