Mysql学习历程(12)-连接查询

xiaoxiao2021-02-28  145

连接查询:将多张表进行记录的连接(按照某个指定条件进行数据拼接)

意义:在用户查看数据的时候,需要显示的数据来自多张表;

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(字段名);   --  使用同名字段作为连接条件,自动合并条件

转载请注明原文地址: https://www.6miu.com/read-23277.html

最新回复(0)