mysql多表查询多对多查询
时间: 2024-12-09 07:04:09 浏览: 10
MySQL中的多表查询,特别是处理多对多(Many-to-Many)关系时,通常需要使用连接(JOIN)操作。在多对多的关系中,两个表并不直接对应,而是通过第三个关联表(通常是中间表)来存储它们之间的关系。例如,考虑学生和课程的多对多关系,可以有学生表、课程表和一个链接表student_course。
1. **INNER JOIN**:最常用的类型,它返回两个表中匹配行的结果。如果学生A选了课程B,那么在结果集中会显示这条记录。
```sql
SELECT students.name, courses.title
FROM students
INNER JOIN student_course ON students.id = student_course.student_id
INNER JOIN courses ON courses.id = student_course.course_id;
```
2. **LEFT JOIN / RIGHT JOIN**:保留全部一方数据,即使另一方没有匹配。例如,获取所有学生及其选择的所有课程:
```sql
SELECT students.*, courses.*
FROM students
LEFT JOIN student_course ON students.id = student_course.student_id
LEFT JOIN courses ON courses.id = student_course.course_id;
```
3. **SELF JOIN**:当一张表既作为主表又作为从表时,用于查询自身的关系。例如,找出每个课程的学生人数:
```sql
SELECT courses.title, COUNT(DISTINCT student_course.student_id) as student_count
FROM courses
JOIN student_course ON courses.id = student_course.course_id
GROUP BY courses.id;
```
阅读全文