使用SQL进行内外连接和嵌套查询

简介: 使用SQL进行内外连接和嵌套查询

1.查询每个学生的选课情况

使用内连接外连接

当我们涉及到两张表都要涉及的时候,就采用内连接

当我们涉及其中一张表的时候,就采取外连接

select
*
from
student
inner join//内连接
sc
on
student.sno=sc.sno

2.查询每个学生及其选修课程的情况, 包括没有选修课程的学生

select
*
from
sc
left join//左连接
sc
on
student.sno=sc.sno

3.查询每门课的选课人数,包括选课人数为0的课程。

SELECT 
Course.Cno,COUNT(SC.Cno)
FROM 
Course 
LEFT JOIN 
SC 
ON 
Course.Cno=SC.Cno
GROUP BY Course.Cno

4.查询选修了”10010”号课程的学生姓名。

SELECT Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno='10010')

5.查询选修了“计算机基础”这门课的学生学号和学生姓名

SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM Course
WHERE Cname='计算机基础'))

6.查询选修“计算机基础”这门课成绩在80分以上的学生学号,姓名。

SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Score>90 AND Cno IN
(SELECT Cno
FROM Course
WHERE Cname='计算机基础'))

7.查询与“王磊”在同一个系的学生信息

SELECT Sno,Sname
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='王磊')

8.查询每个学生超过他选修课平均成绩的课程号。

SELECT Sno,Cno
FROM SC x
WHERE Score>=
(SELECT AVG(Score)
FROM SC y
WHERE x.Sno=y.Sno)

9.查询其他系中比“计算机系”某一学生年龄小的学生姓名和年龄(分别使用ANY谓词和MAX函数完成)。

--ANY谓词
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<ANY
(SELECT Sage
FROM Student
WHERE Sdept='计算机系')
--MAX函数
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<
(SELECT MAX(Sage)
FROM Student
WHERE Sdept='计算机系')

10.查询其他系中比“计算机系”所有学生年龄都小的学生姓名及年龄(分别使用ALL谓词和MIN函数完成)。

--ALL谓词
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<ALL
(SELECT Sage
FROM Student
WHERE Sdept='计算机系')
--MIN函数
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<
(SELECT MIN(Sage)
FROM Student
WHERE Sdept='计算机系')

11.查询选修了10001号课程的学生姓名(使用EXISTS谓词)

SELECT Sno,Sname
FROM Student
WHERE EXISTS
(SELECT *
 FROM SC
 WHERE Sno=Student.Sno AND Cno='10001')

12.查询没有选修10001号课程的学生姓名。

SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno='10001')

13.查询选修了全部课程的学生学号和姓名

SELECT Sno,Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
 FROM SC
 WHERE SC.Sno=Student.Sno AND Course.Cno=SC.Cno))


目录
打赏
0
0
0
0
42
分享
相关文章
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
OmniSQL是开源的文本到SQL转换模型,通过创新的数据合成框架生成250万条高质量样本,支持7B/14B/32B三种模型版本,能处理从简单查询到复杂多表连接等各种SQL需求。
165 16
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
137 35
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
118 14
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
80 1
SQL为什么不建议执行多表关联查询
本文探讨了SQL中不建议执行多表关联查询的原因,特别是MySQL与PG在多表关联上的区别。MySQL仅支持嵌套循环连接,而不支持排序-合并连接和散列连接,因此在多表(超过3张)关联查询时效率较低。文章还分析了多表关联查询与多次单表查询的效率对比,指出将关联操作放在Service层处理的优势,包括减少数据库计算资源消耗、提高缓存效率、降低锁竞争以及更易于分布式扩展等。最后,通过实例展示了如何分解关联查询以优化性能。
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等