MySQL中链接查询innerjoin与leftjoin使⽤
在有些场景下需要我们对两个表⾥的结果进⾏查询,这个时候就需要连接查询了。连接查询其实就是对两个表记录做笛卡尔乘积。如果不指定连接条件的话,则会对每⾏都做笛卡尔乘积,这样最后返回的结果树就会是两个表记录数的乘积;如果指定则,则仅对符合列条件的⾏进⾏笛卡尔乘积,并返回结果。在这⾥可以指定两个列相等,也可以⾃定两个列其他逻辑关系,⽽且也可以指定多个列通过or或者and进⾏连接。
mysql中主要可以使⽤如下⼏种join语法
1:join、inner join、cross join;语法select * from A inner join B on A.id = B.A_ID,返回匹配的⾏
2:left join;语法 select * from A left join B on A.id = B.A_ID,即使右表中没有匹配,也返回左表的所有的⾏,右表没匹配的都为null;
3:right join ;语法select * from A right join B on A.id = B.A_ID,即使左表中没有匹配,也返回右表所有的⾏,左表没匹配的都为null。
对于join语法有以下⼏点需要注意。
1:在mysql中,cross join可以由join或者inner join实现,这和mysql的实现是有关系的。对于cross join操作,是仅作笛卡尔积⽽没有过滤条件,就是说没有on关键字;对于join与inner join是有on关键字的。当使⽤join或者inner join⽽不使⽤on关键字,那么其作⽤就和cross join的作⽤⼀样了。
2:在mysql中没有out join,其实left join相当于left out join,同样对于right join也是类似。
3:对于mysql中join语法与两个表使⽤逗号隔开是⼀样的,也就是说select * from A join B = select * from A, B
4:当不是返回所有列的时候,必须指定某个表的某⼀列。select name from A join B on A.id = B.id则会报语法错误,必须对name前加上表格限定。
具体使⽤,现在有两个表person与comment表格:
场景1,inner join
可以看出,它只返回了相应的匹配的⾏,对没有匹配的⾏它没有把值返回。这⾥是针对了两个表的某⼀列进⾏连接,如果不指定列则会返回六条记录
场景2:left join
可以看出我们是利⽤comment left join person的,按照前⽂说的left join的 时候是按照左表来返回结果,⽽不管右表是否存在相应的匹配内容。通过开始的查询看到comment
含有三条记录,对于comment表中id=3的记录,在person表中没有对应的person,但是它还是返回了,只是返回的结果都为null。
场景3:right join
多表left join现在采⽤了right join,则查询结果是按照右表返回的。在右表person表中只有两条记录,所以只返回了两条记录。对于comment表中有⽽person表中没有的记录则直接忽略。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论