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
筛选出两表并集。