连接查询:将多张表进行记录的连接(按照某个指定条件进行数据拼接)
意义:在用户查看数据的时候,需要显示的数据来自多张表;
SQL中连接查询分为四类:内连接,外连接,自然连接,交叉连接
语法: 左表 join 右表
一.交叉连接
cross join 语法 左表 cross join 右表
交叉连接是笛卡尔集连接,等价于 from 左表,右表
二.内连接 [inner ] join ,从左表中取出一条记录,去与右表中所有的记录进行匹配:匹配必须满足某个条件在左表中与右表中相同,最终才会保留结果,否则不保留;
左表 [inner ] join 右表 on 左表.字段=右表.字段;
on表示连接条件,条件字段就是代表相同的业务含义,如my_student.c_id和my_class.id;
字段别名和表别名的使用:在查询数据的时候,不同表有同名字段,这时候需要加上表名才能区分,而表名太长,
通常可以使用别名;
select s.*,c.name,c.room from my_student as s join my_class c on s.c_id=c.id; 内连接可以没有连接条件,没有on之后内容,这时候系统会保留所有结果(交叉连接);
内连接还可以使用where代替关键字on 不过where没有on效率高
三.外连接
outer join 以某张表为主,取出里面的所有记录,,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留,能匹配则正确保留,不能匹配则其他表的字段设置为NULL
外连接分为左右连接
left join :左连接,以左表为主;
right join:右连接,以右表为主;
基本语法:左表 left/right join 右表 on 左表.字段=右表.字段;
左连接:
select s.*,c.number,c.room from my_student_1 as s left join my_class c on s.c_id=c.id; 右连接:select s.*,c.number,c.room from my_student_1 as s right join my_class c on s.c_id=c.id; 左连接与右连接有差异,但是显示的数据左表数据在左边,右表数据在右边;
四.自然连接
natural join 自动匹配连接条件,系统以字段名字作为匹配模式(同名字段作为条件,多个同名字段都作为条件)
自然连接可以分为自然外连接和自然内连接;
自然内连接:左表 natural join 右表;
自然外连接:左表 natural left/right join 右表;
左表 left/right/inner join 右表 using(字段名); -- 使用同名字段作为连接条件,自动合并条件