mysql使用交叉连接查询所有学生的可能选课组合,结果集包括学号、姓名、课程号及课程名
时间: 2023-11-16 14:15:13 浏览: 50
可以使用如下的SQL语句来实现:
```
SELECT s.id, s.name, c.id AS course_id, c.name AS course_name
FROM students s
CROSS JOIN courses c
ORDER BY s.id, c.id
```
其中,`students` 表存储学生信息,包括学号和姓名,`courses` 表存储课程信息,包括课程号和课程名。使用 `CROSS JOIN` 进行交叉连接,得到所有可能的学生-课程组合。最后使用 `ORDER BY` 对结果集进行排序,按照学号和课程号升序排列。
相关问题
数据库MySQL查询学生的学号、姓名、选修课程的课程名及成绩。(3表连接)
假设我们有三张表:`students`、`courses`和`scores`,分别存储学生信息、课程信息和成绩信息。它们的结构如下:
```
students表:
+----+--------+
| id | name |
+----+--------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie|
+----+--------+
courses表:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Math |
| 2 | Physics |
| 3 | Chemistry |
+----+-----------+
scores表:
+----+------------+--------+-------+
| id | student_id | course_id | score |
+----+------------+----------+-------+
| 1 | 1 | 1 | 90 |
| 2 | 1 | 2 | 85 |
| 3 | 2 | 1 | 95 |
| 4 | 2 | 3 | 80 |
| 5 | 3 | 2 | 92 |
| 6 | 3 | 3 | 88 |
+----+------------+----------+-------+
```
我们可以通过以下 SQL 语句查询学生的学号、姓名、选修课程的课程名及成绩:
```
SELECT students.id, students.name, courses.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.id;
```
运行结果如下:
```
+----+--------+-----------+-------+
| id | name | name | score |
+----+--------+-----------+-------+
| 1 | Alice | Math | 90 |
| 1 | Alice | Physics | 85 |
| 2 | Bob | Math | 95 |
| 2 | Bob | Chemistry | 80 |
| 3 | Charlie| Physics | 92 |
| 3 | Charlie| Chemistry | 88 |
+----+--------+-----------+-------+
```
1、用MySQL查询学生的学号、姓名、课程号、课程名、成绩。
可以回答这个问题。查询语句如下:
SELECT 学生表.学号, 学生表.姓名, 成绩表.课程号, 课程表.课程名, 成绩表.成绩
FROM 学生表, 成绩表, 课程表
WHERE 学生表.学号 = 成绩表.学号 AND 成绩表.课程号 = 课程表.课程号;