使用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))


目录
相关文章
|
6天前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
100 77
|
25天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
75 9
|
1月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
182 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
46 8
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
82 4
|
2月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
2月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
206 10
|
2月前
|
SQL 关系型数据库 MySQL
|
3月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
2月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
40 0