本关任务:使用exists子查询,查询选修了“数据库”的学生的学号、姓名和专业,结果集按学号的升序排序输出。 需要设置查询结果的列别名为:学号、姓名、专业名。
时间: 2024-10-10 20:16:19 浏览: 206
在SQL中,你可以使用`EXISTS`子查询来查找那些选修了"数据库"课程的学生信息。假设我们有两个表,一个是学生表(students)记录学生的相关信息,另一个是课程选择表(courses)记录学生选课情况,其中包含学生ID(student_id),课程名称(course_name)。以下是完成此任务的SQL查询示例:
```sql
SELECT s.student_id AS "学号",
s.name AS "姓名",
p.department_name AS "专业名"
FROM students s
JOIN (
SELECT student_id
FROM courses
WHERE course_name = '数据库'
) exists_courses ON s.student_id = exists_courses.student_id
ORDER BY s.student_id ASC;
```
在这个查询中,外部查询(ON部分)通过`JOIN`操作连接了学生表和内部子查询(存在课程的集合),然后选择了对应的学号、姓名和专业信息。最后,`ORDER BY`语句按照学号升序排列结果。
相关问题
嵌套查询和组合查询操作。 (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');
```
希望以上查询语句能够满足您的需求。
用相关子查询查询没有选修’数据库原理’课程的学生的学号、姓名
好的,以下是使用相关子查询的查询语句:
```
SELECT 学号, 姓名
FROM 学生
WHERE NOT EXISTS (
SELECT *
FROM 选课
WHERE 学生.学号 = 选课.学号 AND 选课.课程名称 = '数据库原理'
)
```
这个查询语句使用了相关子查询。在子查询中,查询选修了"数据库原理"课程的学生,然后在主查询中使用`NOT EXISTS`关键字来表示不存在这样的学生。最后查询学号和姓名。这个查询语句也可以实现查询没有选修"数据库原理"课程的学生的学号和姓名。
阅读全文