多表查询
多表查询:就是输出的字段来自很多表,不单单是一张表
1:交叉连接
不适用任何匹配条件,生成笛卡尔积
select * from course cross join class;
2个表的字段都连接在一张大表上
2:内连接
含义:取出2张表的公共部分,相当于就是从笛卡尔积中筛选出正确的结果
就是输出来自多张表,且筛选出符合条件的字段,对于连接表的顺序没有固定的要求
思路
找公共的列,就是2张表中都有的公共列,如果没有公共列的话,就找第三方的表,总会有公共列的
格式有2种
select from 表1 as 表2 as on 表1.字段名=表2.字段名 where 筛选条件 select from 表1,表2 as where 表1.字段名=表2.字段名 and 字段 筛选条件
2种选择
3:外连接
查看哪一张表的完整数据,包括不符合连接条件的数据也要
就是输出的字段来自于多张表,既要满足条件也要不满足条件的字段的信息
有左外连接和右外连接,这2个有非常大的差别
左外连接:在内连接的基础上保留左表的记录
格式:
select from 表1 left join 表2 on 表1.字段1=表2.字段2
如果是左外连接,就把表放在主表放在左边
,如果是没有对应的记录也会显示出来,用null显示
右外连接:在内连接的基础上保留了右表的记录
select from 表1 right join 表2 on 表1.字段=表2.字段
全外连接:在内连接的基础上,保留左右2个表没有对应关系的记录
mysql不支持使用全外连接
4:子查询
就是嵌套查询