多表关联查询
先确定数据要用到哪些表。
将多个表先通过笛卡尔积变成一个表。
然后去除不符合逻辑的数据(根据两个表的关系去掉)。
最后当做是一个虚拟表一样来加上条件即可。
笛卡尔积,通俗点说就是指包含两个集合中任意取出两个元素构成的组合的集合.
MySQL的多表查询(笛卡尔积原理)
多表连接 :---> 两链表的关系
-- 两个表的交际 : inner join 简写 join 内连接
--select * from 表1 join 表2 on 表1.id= 表2.id
左连接 :
-- left outer join 简写 left join 以左边表为主,右边的表为副关联查询,结果以左边为准
-select * from A LEFT join B on A.id = B.id
筛选 A表中的数据但又不存在B表的关联数据
select * from A left join B On A.id = B.id where B.id is null;
右连接 :
只需要把左连接的两个关联表替换一下位置即可实现右连接的效果
以B为主表,A为副表关联查询,查询结果以B表数据为基准;关键字:RIGHT OUTER JOIN 可简写成 RIGHT JOIN
SELECT * FROM tb_user A RIGHT JOIN tb_dept B ON A.dept_id = B.dept_id
关联条件时,其查询结果与内连接相同 ;无关联条件时,其结果集为两表的笛卡尔积
SELECT * FROM tb_user A, tb_dept B WHERE A.dept_id = B.id;
'''
## sql命令 :
### 执行顺序 :
#### from > join > on(筛选器) > where > group by(分组)
#### > avg (聚合函数) > having( 衰选)
#### > select > distinct > order by >limit(选取条数)
#### 1.查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入
#### where 和 on 的区别:
```python
ON:针对关联表进行条件筛选,不会影响结果集的数量和主表数据。
WHERE:针对结果集进行条件筛选,会影响结果集的数量。