1.内连:
如下,user表中有userid,username,userage,userthing字段属性,colleagues表里有collid,collname,collsex,collposition字段属性,当两张表内连接,只会查询两张表里通过on条件都满足的数据,即user表和colleagues表都有的数据。
查询名字相同的那条数据,也就是说,user表里和colleagues表名字都相同的那条数据,即要求必须同时满足两张表。
SELECT * FROM USER INNER JOIN colleagues ON user.username = colleagues.collname
先看两张表里原来的数据,user表的和colleagues表的数据分别如下图:
在看通过上述的SQL内连查询语句查出来的结果:
查询出的结果是必须是条件满足两张表,即两张表共有的数据。
2.左连:
左连本身就是以左表数据为主,查符合条件的数据,还是以user表和colleagues表为例,user表中原来的数据和colleagues表中原来的数据如下:
左连的语句如下:
SELECT * FROM USER LEFT JOIN colleagues ON user.username = colleagues.collname ;
查询结果如下:
可以看出满足名字相同的只有yaoshuting一条数据,但是user表中的数据都会显示出来,即便在colleagues表中是没有数据的。
当给左连再加上where条件判断时,如下:
SELECT * FROM USER LEFT JOIN colleagues ON user.username = colleagues.collname WHERE colleagues.collname IS NOT NULL;
结果如下:只查出左连后,还满足where条件的数据。
3.右连:
右连本身就是以右表数据为主,查符合条件的数据,还是以user表和colleagues表为例,user表中原来的数据和colleagues表中原来的数据上述有,这里直接给右连的结果,如下:
SELECT * FROM USER RIGHT JOIN colleagues ON user.username = colleagues.collname;
能看出来本身colleagues表中就只有3条数据,在查出名字相同的满足user表的数据,以colleagues表为主,也可以写成colleagues left join user,这样也是以colleagues表数据为主的,即user left join colleagues 等同于 colleagues right join user。
小结:
1.内连就是抓取两张表共同满足on条件后的数据。
2.左连就是以左表数据为主,再查出满足on条件后的数据。
3.右连就是以右表数据为主,再查出满足on条件后的数据。
4.A表左连B表等同于B表右连A表,A表右连B表等同于B表左连A表。