连接查询
---------------------------------------------------------
将多张表进行记录的连接;
四类连接查询:内连接 ,外连接,自然连接,交叉连接
交叉连接:
从一张表中循环取出每一条记录去另一张表的每一条记录进行匹配,最终形成的表叫笛卡尔积。
左表 cross join 右表;
内连接:
——————————————————————————————————————————
左表的每一条记录与右表的所有记录进行匹配:当左表的某个条件与右表的某个条件相同时,结果才会保留。
左表 [inner] join 右表 on 左表.字段=右表.字段;//on表示连接条件
当on后面没有条件,结果会形成笛卡尔积;
where可以代替on,但是使用on效率更高;
字段别名,表别名
例
select s.* ,c.name as c_name ,
c.room from my_student as s inner join my_class as c on s.id=c.id;
外连接:
———————————————————————————————————————————
以某张表为主,取出里面的记录,然后每条记录与另一张表进行连接;
不管能不能匹配上条件,最终都会保留:能匹配,能正确保留;不匹配,其副表的字段为空;
外连接分为两种:
有主表
left join:左外连接,以左表为主
right join:右外连接,以右表为主
语法:select * from a left join b on 左表.字段=右表.字段;
select * from b right join a on 左表.字段=右表.字段;
以上两种效果相同,都以a为主表
自然连接:
——————————————————————————————————————————
nature join:自动匹配连接条件:系统一字段的名字作为匹配模式
(同名字段就作为条件,多个同名字段就都作为条件)
自然连接:分为自动内连接和自动外连接。
自然内连接
select * from 表名1 nature join 表名2;//连接后合并同名字段
自然外连接
select * from 表名1 nature left join 表名2;
外连接,内连接可以模拟自然连接
例: select * from 表名1 left join 表名2 using(字段);using()合并字段