sql3.4数据查询

本文深入探讨了SQL查询的各种高级技巧,包括使用in谓词的子查询,比较运算符与Any或All谓词的组合,Exists谓词的逻辑应用,以及集合查询的并、交和差操作。此外,还详细介绍了基于派生表的查询方法,帮助读者提升数据库查询效率。
摘要由CSDN通过智能技术生成

嵌套查询

带有in谓词的子查询

  • 子查询不能使用order by子句
--例子:查询选修2号课程的所有学生的姓名
--连接查询
select sname
from student s,sc
where s.sno=sc.sno and cno=2;
--嵌套查询,先查选修了2号课程的学生学号,再查学号对应的姓名
select sname
from student
where sno in(
	select sno
	from sc
	where cno=2
);

--例子:找出每个学生超过他自己选修课程平均成绩的课程号
select sno,cno
from sc x
where grade>(
	select avg(grade)
	from sc y
	where y.sno=x.sno
);

--例1:查询与“刘晨”在同一个系学习的学生学号、姓名和所在系
--(用自身连接实现)
select s1.sno,s1.sname,s1.sdept
from student s1,student s2
where s1.sdept=s2.sdept and s2.sname='刘晨';

--带in谓词的子查询   
--1、查询刘晨所在的系
--2、查询在刘晨所在系的学生
select sname,sno,sdept
from student
where sdept in(
	select sdept
	from student
	where sname='刘晨');
	
--查询选修课程名为IS的学生的学号和姓名
--先在course中查IS的课程号,再在sc中查选修IS课程号的学生的sno,再在student中找到姓名
select sno,sname
from student
where sno in(
	select sno
	from sc
	where cno in(
		select cno
		from course
		where cname='IS'));

连接查询
当确切知道内层查询返回的是单值时,可用比较运算符,与any或all配合使用

带有比较运算符的子查询

--假设一个学生只可能在一-个系学习,并且必须属于一个系,则在例1 可以用=代替IN :
select sno,sname
from student
where sdept=(
	select sdept
	from student
	where sname='刘晨');
	
--找出每个学生超过他选修课程平均成绩的课程号
select  sno,cno
from sc s1
where grade > (
	select avg(grade
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值