嵌套查询练习

(1)查询计算机工程系女学生的学生学号、姓名及考试成绩。

SELECT student.sno,sname,degree

FROM student,sc

WHERE student.sno=sc.sno

and sdept IN

(SELECT sdept FROM student WHERE sdept="计算机工程系")

AND ssex IN

(SELECT ssex FROM student WHERE ssex="女");

(2)查询“李勇”同学所选课程的成绩。

SELECT cno,degree

FROM sc

WHERE (SELECT sno FROM student WHERE sname="李勇")=sc.sno;

(3) 查询“李新”老师所授课程的课程名称。

SELECT cname

FROM course

WHERE

(SELECT cno FROM teaching WHERE

(SELECT tno FROM teacher WHERE tname="李新")=teaching.tno)=course.cno;

(4) 查询女教师所授课程的课程号及课程名称。

SELECT course.cno,cname

FROM course

WHERE cno IN

(SELECT cno FROM teaching WHERE tno

IN (SELECT tno FROM teacher WHERE tsex="女"));

(5) 查询姓“王”的学生所学的课程名称。

SELECT cname

FROM course

WHERE

(SELECT cno FROM sc WHERE

(SELECT sno FROM student WHERE sname like "王%")=sc.sno)=course.cno;

(6) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。

SELECT distinct sno,degree

FROM sc,course

WHERE sc.cno IN (SELECT cno FROM course WHERE cname="数据库") AND

degree BETWEEN 80 AND 90;

(7) 查询选修“C04”课程的学生的平均年龄。

SELECT AVG(YEAR(NOW())-YEAR(sbirthday)) acv_age

from student

WHERE sno IN (SELECT sno FROM sc WHERE cno=(SELECT cno FROM course WHERE cno="C04"));

(8) 查询学习课程名为“数学”的学生学号和姓名。

SELECT sno,sname

from student

WHERE sno in (SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE cname="数学"));

(9) 查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。

SELECT sno,degree

FROM sc

WHERE cno IN

(SELECT cno FROM teaching WHERE tno IN

(SELECT tno FROM teacher WHERE tname="钱军"));

(10) 查询在第3学期所开课程的课程名称及成绩。

SELECT cname,degree

FROM sc,course

WHERE sc.cno=(SELECT cno FROM course WHERE cno in (SELECT cno FROM teaching WHERE cterm=3)) AND sc.cno=course.cno;

(11) 查询与“李勇”同一个系的同学姓名。

SELECT sname

FROM student

WHERE sdept IN (SELECT sdept FROM student WHERE sname="李勇");

(12) 查询学号比“刘晨”同学大,而出生日期比他小的学生姓名。

SELECT sname

FROM student

WHERE sno>(SELECT sno FROM student WHERE sname="刘晨") AND

sbirthday<(SELECT sbirthday FROM student WHERE sname="刘晨");

(13) 查询出生日期大于所有女同学出生日期的男同学的姓名及系别。

SELECT sname,sdept

FROM student

WHERE ssex="女" AND

sbirthday<ALL(SELECT sbirthday FROM student WHERE ssex="男");

(14) 查询成绩比该课程平均成绩高的学生的学号及成绩。

SELECT sno,degree

FROM sc,(SELECT AVG(degree) avg_degree,cno FROM sc GROUP BY cno) a

WHERE sc.cno=a.cno AND sc.degree>a.avg_degree;

(15)  查询没有选修“C02”课程的学生学号及姓名。

SELECT sno,sname

FROM student

WHERE sno NOT IN

(SELECT sno FROM sc WHERE cno IN

(SELECT cno FROM sc WHERE cno="C02"));

(16) 查询选修了“数据库”课程的学生学号、姓名及系别。

SELECT sno,sname,sdept

FROM student

WHERE sno IN

(SELECT sno FROM sc WHERE cno IN

(SELECT cno FROM course WHERE cname="数据库"));

(17)查询“C02”号课程不及格的学生信息

SELECT *

FROM student

WHERE sno IN (SELECT sno FROM sc WHERE cno="C02" AND degree<60);

(18)查询只被一名学生选修的课程的课程号、课程名

SELECT cno,cname

FROM course

WHERE cno IN

(SELECT a.cno FROM(SELECT COUNT(cno) ct,cno FROM sc GROUP BY cno) a WHERE a.ct=1);

### MySQL IN 子查询嵌套查询练习 #### 练习目标 通过一系列具体的例子来理解如何使用 `IN` 关键字进行子查询以及嵌套查询的操作。 #### 示例场景一:查找特定条件下的记录 假设有一个名为 `employees` 的表,其中包含员工的信息。现在需要找出所有部门编号(`dept_id`)在给定列表中的员工姓名和职位。 ```sql SELECT emp_name, position FROM employees WHERE dept_id IN ( SELECT DISTINCT dept_id FROM departments WHERE location = 'New York' ); ``` 这条 SQL 语句的作用是从 `departments` 表中选取位于纽约的所有不同部门编号,并以此作为过滤条件,在 `employees` 表里找到对应的员工信息[^2]。 #### 示例场景二:多层嵌套查询的应用 考虑两个表格——`orders` 和 `order_items`。前者存储订单基本信息;后者保存每笔订单的具体商品项详情。为了得到那些购买过某类产品的客户名单,可以构建如下查询: ```sql SELECT c.customer_name FROM customers AS c JOIN orders AS o ON c.id = o.customer_id WHERE o.order_id IN (SELECT order_id FROM order_items WHERE product_category = 'Electronics'); ``` 这里先从 `order_items` 中筛选出电子类产品所属的订单号集合,再利用这些订单号去匹配相应的顾客数据[^3]。 #### 示例场景三:结合聚合函数的高级应用 如果想要知道哪些供应商提供了超过一定数量的不同产品种类,则可以通过下面的方式实现: ```sql SELECT supplier_name FROM suppliers WHERE id IN ( SELECT supplier_id FROM products GROUP BY supplier_id HAVING COUNT(DISTINCT category) > 5 ); ``` 此命令首先统计各供应商所提供的独特类别数目,接着依据这个结果集进一步限定最终返回的对象范围[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值