《mysql之inner join,left join,right join详解》由会员分享,可在线阅读,更多相关《mysql之inner join,left join,right join详解(5页珍藏版)》请在金锄头文库上搜索。
1、Mysql 之 inner join,left join,right join 详解文章分类: PHP 编程首先借用官方的解释下:inner join(等值连接):只返回两个表中联结字段相等的行;left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录;right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录。比如我们有 xs、cj 两个表xs 表 cj 表- -id name id score1 张三 1 962 李四 2 803 86Sql 代码 SELECT * FROM xs INNER JOIN cj ON xs.id = cj.i
2、d 返回-id name id score1 张三 1 962 李四 2 80-Sql 代码 SELECT * FROM xs LEFT JOIN cj ON xs.id = cj.id 返回-id name id score1 张三 1 962 李四 2 80-Sql 代码 SELECT * FROM xs RIGHT JOIN cj ON xs.id = cj.id 返回id name id score1 张三 1 962 李四 2 80NULL NULL 3 86其中还有 inner join 还有另外一种写法,两者是等价的,都是等值连接Sql 代码 SELECT * FROM xs,c
3、j WHERE xs.id = cj.id mysql 多表连接查询 inner join, left join , right join ,full join ,cross join关键字: mysql inner join left join right join full join cross joininner join,full outer join,left join,right jion内部连接 inner join 两表都满足的组合full outer 全连 两表相同的组合在一起,A 表有,B 表没有的数据(显示为 null),同样 B表有A 表没有的显示为(null)A 表
4、left join B 表 左连,以 A 表为基础,A 表的全部数据,B 表有的组合。没有的为 nullA 表 right join B 表 右连,以 B 表为基础,B 表的全部数据,A 表的有的组合。没有的为null查询分析器中执行:-建表 table1,table2:create table table1(id int,name varchar(10)create table table2(id int,score int)insert into table1 select 1,leeinsert into table1 select 2,zhanginsert into table1 s
5、elect 4,wanginsert into table2 select 1,90insert into table2 select 2,100insert into table2 select 3,70如表-table1|table2|-idname|idscore|1lee|190|2zhang|2100|4wang|370|-以下均在查询分析器中执行一、外连接1.概念:包括左向外联接、右向外联接或完整外部联接2.左连接:left join 或 left outer join(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表
6、的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。(2)sql 语句select * from table1 left join table2 on table1.id=table2.id-结果-idnameidscore-1lee1902zhang21004wangNULLNULL-注释:包含 table1的所有子句,根据指定条件返回 table2相应的字段,不符合的以 null 显示3.右连接:right join 或 right outer join(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为
7、左表返回空值。(2)sql 语句select * from table1 right join table2 on table1.id=table2.id-结果-idnameidscore-1lee1902zhang2100NULLNULL370-注释:包含 table2的所有子句,根据指定条件返回 table1相应的字段,不符合的以 null 显示4.完整外部联接:full join 或 full outer join(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。(2)sql 语
8、句select * from table1 full join table2 on table1.id=table2.id-结果-idnameidscore-1lee1902zhang21004wangNULLNULLNULLNULL370-注释:返回左右连接的和(见上左、右连接)二、内连接1.概念:内联接是用比较运算符比较要联接列的值的联接2.内连接:join 或 inner join3.sql 语句select * from table1 join table2 on table1.id=table2.id-结果-idnameidscore-1lee1902zhang2100-注释:只返回
9、符合条件的 table1和 table2的列4.等价(与下列执行效果相同)A:select a.*,b.* from table1 a,table2 b where a.id=b.idB:select * from table1 cross join table2 where table1.id=table2.id (注:cross join 后加条件只能用 where,不能用 on)三、交叉连接(完全)1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。 (table1和 table2交叉连接产生3*3=9条记录)2.交叉连接:cross join (不带条件 where.)3.sql 语句select * from table1 cross join table2-结果-idnameidscore-1lee1902zhang1904wang1901lee21002zhang21004wang21001lee3702zhang3704wang370-注释:返回3*3=9条记录,即笛卡尔积4.等价(与下列执行效果相同)A:select * from table1,table2