Django ORM的默认JOIN方式
SQL的JOIN操作
对于SQL的JOIN操作,无非就这么几种
- INNER JOIN
- OUTER JOIN
- LEFT JOIN
- RIGHT JOIN
- CROSS JOIN
通过文氏图,可以更清晰的了解每种操作以及所得的结果集。

Django ORM的JOIN操作
Django跨表查询时,使用
select_related(),将相关表JOIN,从而减少查库次数。
那Django会使用哪种SQL JOIN呢?
Django 定义两张表
1 | from django.db import models |
初始化后,python manage.py shell中执行, 输出相关SQL
1 | from demo.models import * |
将表Student.teacher字段null=True,重复上一步操作,输出SQL如下
1 | SELECT `student`.`id`, `student`.`name`, `student`.`teacher_id`, `teacher`.`id`, `teacher`.`name` |
由此可知,在ForeignKey null=True时,关联查询会通过LEFT JOIN,将左表数据查出,没有匹配的数据则用null代替。反之则通过INNER JOIN筛选出两表并集。