没有选修’数据库原理’课程的学生
时间: 2023-10-24 21:07:44 浏览: 72
好的,以下是一种可能的 SQL 语句,可以查询没有选修‘数据库原理’课程的学生的学号、姓名:
```
SELECT 学号, 姓名 FROM 学生表
WHERE 学号 NOT IN
(SELECT 学号 FROM 选课表 WHERE 课程名称 = '数据库原理')
```
其中,学生表包含学生的学号、姓名等信息,选课表包含选课记录的学号、课程名称等信息。该 SQL 语句的主要思路是先查询选修了‘数据库原理’课程的学生学号,然后在学生表中排除这些学生,得到没有选修该课程的学生的学号和姓名。需要注意的是,具体的表结构和字段名称可能因学校而异,以上语句仅供参考。
相关问题
创建一个选修数据库原理课程的学生的学号姓名和专业的视图
创建一个名为“StudentCourses”的视图,用于显示选择数据库原理课程的学生的信息,包括学号、姓名和专业,可以使用SQL语句来实现。假设我们有两个表,一个是学生信息表(Students),另一个是课程选择表(CourseRegistrations)。视图的基本结构如下:
```sql
CREATE VIEW StudentCoursesView AS
SELECT Students.student_id AS StudentID,
Students.name AS StudentName,
Students.major AS Major
FROM Students
INNER JOIN CourseRegistrations ON Students.student_id = CourseRegistrations.student_id
WHERE CourseRegistrations.course_name = '数据库原理';
```
这个视图将关联两个表,通过`student_id`连接学生和他们注册的课程。然后筛选出课程名称为“数据库原理”的记录,只展示相关的学号、姓名和专业。
嵌套查询和组合查询操作。 (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');
```
希望以上查询语句能够满足您的需求。
阅读全文