查询选修了2号课程并且成绩在90分以上的所有学生的学号和姓名。 (分别用连接查询和嵌套查询实现)
时间: 2024-11-14 15:23:49 浏览: 19
查询选修了2号课程并且成绩在90分以上的所有学生的学号和姓名,可以使用SQL语言中的连接查询和嵌套查询来完成。这里假设我们有两个表,一个是`Students`表,包含字段`StudentID`, `Name`, 和`ClassID`;另一个是`Scores`表,包含字段`StudentID`, `CourseID`, 和`Score`。
**连接查询(JOIN)实现:**
```sql
SELECT s.StudentID, s.Name
FROM Students s
INNER JOIN Scores sc ON s.StudentID = sc.StudentID
WHERE sc.CourseID = 2 AND sc.Score > 90;
```
这个查询通过`INNER JOIN`将`Students`表和`Scores`表连接起来,并且筛选出课程ID为2且分数大于90的学生信息。
**嵌套查询(Subquery)实现:**
```sql
SELECT s.StudentID, s.Name
FROM Students s
WHERE s.StudentID IN (
SELECT StudentID
FROM Scores
WHERE CourseID = 2 AND Score > 90
);
```
在这个嵌套查询中,首先从`Scores`表中找出课程ID为2且分数大于90的所有学生ID,然后外层查询在`Students`表中查找这些学生的信息。
相关问题
4.嵌套查询 利用T-SQL语句在JXGL数据库中实现其嵌套查询操作: (1)查询选修了“离散数学”的学生的学号和姓名。 (2)查询课程号为C2的课程的成绩高于张林的学生的学号和成绩。 (3)查询其他系中年龄小于计算机科学系(CS)中年龄最大者的学生。 (4)查询其他系中比计算机科学系(CS)的学生年龄都小的学生。 (5)查询和“王洪敏”的“数据库原理及应用”课程分数相同的学生的学号。 (6)查询没有选修C2课程的学生的姓名。 5.组合查询和统计查询 利用T-SQL语句在JXGL数据库中实现其数据组合查询和统计查询操作: (1)查找选修“计算机基础”课程的学生成绩比此课程的平均成绩高的学生的学号和成绩。 (2)查询选修“计算机基础”课程的学生的平均成绩。 (3)查询年龄大于女同学平均年龄的男同学的姓名和年龄。 (4)列出各系学生的总人数,并按人数进行降序排列。 (5)统计各系各门课程的平均成绩。 (6)查询选修“计算机基础”和“离散数学”的学生的学号和平均成绩。
先前提醒一下,由于我并不知道你的数据库表结构和数据,以下的语句只是一个参考,需要根据实际情况进行修改和调整。
4. 嵌套查询:
(1) 查询选修了“离散数学”的学生的学号和姓名。
```sql
SELECT 学号, 姓名
FROM 学生
WHERE 学号 IN (SELECT 学号 FROM 成绩 WHERE 课程号 = 'C1');
```
(2) 查询课程号为C2的课程的成绩高于张林的学生的学号和成绩。
```sql
SELECT 学号, 成绩
FROM 成绩
WHERE 课程号 = 'C2' AND 成绩 > (SELECT 成绩 FROM 成绩 WHERE 学号 = '张林' AND 课程号 = 'C2');
```
(3) 查询其他系中年龄小于计算机科学系(CS)中年龄最大者的学生。
```sql
SELECT 学号, 姓名, 年龄, 所在系
FROM 学生
WHERE 年龄 < (SELECT MAX(年龄) FROM 学生 WHERE 所在系 = 'CS') AND 所在系 <> 'CS';
```
(4) 查询其他系中比计算机科学系(CS)的学生年龄都小的学生。
```sql
SELECT 学号, 姓名, 年龄, 所在系
FROM 学生
WHERE 年龄 < (SELECT MIN(年龄) FROM 学生 WHERE 所在系 = 'CS') AND 所在系 <> 'CS';
```
(5) 查询和“王洪敏”的“数据库原理及应用”课程分数相同的学生的学号。
```sql
SELECT 学号
FROM 成绩
WHERE 成绩 = (SELECT 成绩 FROM 成绩 WHERE 学号 = '王洪敏' AND 课程号 = 'C3') AND 课程号 = 'C3' AND 学号 <> '王洪敏';
```
(6) 查询没有选修C2课程的学生的姓名。
```sql
SELECT 姓名
FROM 学生
WHERE 学号 NOT IN (SELECT 学号 FROM 成绩 WHERE 课程号 = 'C2');
```
5. 组合查询和统计查询:
(1) 查找选修“计算机基础”课程的学生成绩比此课程的平均成绩高的学生的学号和成绩。
```sql
SELECT 学号, 成绩
FROM 成绩
WHERE 课程号 = 'C1' AND 成绩 > (SELECT AVG(成绩) FROM 成绩 WHERE 课程号 = 'C1');
```
(2) 查询选修“计算机基础”课程的学生的平均成绩。
```sql
SELECT AVG(成绩)
FROM 成绩
WHERE 课程号 = 'C1';
```
(3) 查询年龄大于女同学平均年龄的男同学的姓名和年龄。
```sql
SELECT 姓名, 年龄
FROM 学生
WHERE 性别 = '男' AND 年龄 > (SELECT AVG(年龄) FROM 学生 WHERE 性别 = '女');
```
(4) 列出各系学生的总人数,并按人数进行降序排列。
```sql
SELECT 所在系, COUNT(*) AS 总人数
FROM 学生
GROUP BY 所在系
ORDER BY 总人数 DESC;
```
(5) 统计各系各门课程的平均成绩。
```sql
SELECT 所在系, 课程号, AVG(成绩) AS 平均成绩
FROM 成绩
JOIN 学生 ON 成绩.学号 = 学生.学号
GROUP BY 所在系, 课程号;
```
(6) 查询选修“计算机基础”和“离散数学”的学生的学号和平均成绩。
```sql
SELECT 学号, AVG(成绩) AS 平均成绩
FROM 成绩
WHERE 课程号 IN ('C1', 'C2')
GROUP BY 学号
HAVING COUNT(*) = 2;
```
嵌套查询和组合查询操作。 (1) 统计选修了【数据库原理】课程的学生人数。 (2) 查询没有选修【数据库原理】课程的学生学号、姓名。 (3) 查询其他系中比计算机系学生年龄都小的学生学号、姓名和所在系。 (4) 查询被0602001 学生或0602002 学生所选修的课程的课程号(用UNION 组合查询与OR条件查询两种方法实现)。 (5) 查询0602001 学生和0602002 学生同时选修的课程的课程号(用IN 子查询与EXISTS 嵌套子查询两种方法实现)。 (6) 查询被学号0602001 学生选修,但没有被0602002 学生所选修的课程的课程号。
好的,以下是针对您提出的问题的SQL查询语句:
1. 统计选修了【数据库原理】课程的学生人数
```
SELECT COUNT(DISTINCT sid) AS num FROM sc WHERE cno='数据库原理';
```
2. 查询没有选修【数据库原理】课程的学生学号、姓名
```
SELECT sno, sname FROM student WHERE sno NOT IN (SELECT sid FROM sc WHERE cno='数据库原理');
```
3. 查询其他系中比计算机系学生年龄都小的学生学号、姓名和所在系
```
SELECT sno, sname, sdept FROM student WHERE sage < (SELECT MIN(sage) FROM student WHERE sdept='计算机系') AND sdept <> '计算机系';
```
4. 查询被0602001学生或0602002学生所选修的课程的课程号(用UNION组合查询与OR条件查询两种方法实现)
```
-- UNION组合查询方式
SELECT cno FROM sc WHERE sid='0602001'
UNION
SELECT cno FROM sc WHERE sid='0602002';
-- OR条件查询方式
SELECT cno FROM sc WHERE sid='0602001' OR sid='0602002';
```
5. 查询0602001学生和0602002学生同时选修的课程的课程号(用IN子查询与EXISTS嵌套子查询两种方法实现)
```
-- IN子查询方式
SELECT cno FROM sc WHERE sid='0602001' AND cno IN (SELECT cno FROM sc WHERE sid='0602002');
-- EXISTS嵌套子查询方式
SELECT cno FROM sc s1 WHERE sid='0602001' AND EXISTS (SELECT * FROM sc s2 WHERE sid='0602002' AND s1.cno=s2.cno);
```
6. 查询被学号0602001学生选修,但没有被0602002学生所选修的课程的课程号
```
SELECT cno FROM sc WHERE sid='0602001' AND cno NOT IN (SELECT cno FROM sc WHERE sid='0602002');
```
希望以上查询语句能够满足您的需求。
阅读全文