create table student( sno varchar(20), sname varchar(20), ssex varchar(4), sday date, sdept varchar(20)); insert into student(sno,sname,ssex,sday,sdept) values("202115121","李勇","男",'1992-01-12',"信息学院"), ("202115123","刘晨","女",'1993-06-04',"信息学院"), ("202115124","王敏","女",'1991-02-04',"理学院"), ("202115125","张立","男",'1995-06-08',"工学院" create table sc( sno varchar(20), cno int, score double); insert into sc(sno,cno,score) values("202115121",1,92), ("202115121",2,85), ("202115122",3,88), ("202115122",2,90), ("202115123",3,80); create table course( cno int, cname varchar(20)); insert into course(cno,cname) values(1,"数据库"), (2,"高等数学"), (3,"信息系统"), (4,"操作系统"); 查询同时选修了课程号为1和2的学生的学号和姓名
时间: 2024-01-13 18:05:22 浏览: 75
ASP.NET保存PDF、Word和Excel文件到数据库
可以使用 `INNER JOIN` 和 `WHERE` 子句来查询同时选修了课程号为1和2的学生的学号和姓名,具体的 SQL 语句如下:
```
SELECT s.sno, s.sname
FROM student s
INNER JOIN sc s1 ON s.sno = s1.sno
INNER JOIN sc s2 ON s.sno = s2.sno
WHERE s1.cno = 1 AND s2.cno = 2;
```
解释一下这个 SQL 语句的每一部分:
- `SELECT s.sno, s.sname`:查询结果中只包含学号和姓名两个字段;
- `FROM student s`:从 `student` 表中查询学生信息;
- `INNER JOIN sc s1 ON s.sno = s1.sno`:将 `student` 表和 `sc` 表连接起来,查询学生选课信息,其中 `s1` 是 `sc` 表的别名;
- `INNER JOIN sc s2 ON s.sno = s2.sno`:再次将 `student` 表和 `sc` 表连接起来,查询学生选课信息,其中 `s2` 是 `sc` 表的别名;
- `WHERE s1.cno = 1 AND s2.cno = 2`:筛选出选修了课程号为1和2的学生,其中 `s1.cno = 1` 表示选修了课程号为1的学生,`s2.cno = 2` 表示选修了课程号为2的学生。
注意,这个 SQL 语句中选修了课程号为1和2的学生只有李勇(202115121)符合要求。
阅读全文