本节介绍数据库的连接查询,连接方式主要有: LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN / FULL PUTER JOIN。彼此的组合有7大类,展示图如下:
原有表:
增加一张表:asett,表数据如下
1、left join用法
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c left join asett as a on c.cus_id = a.ast_id; --left join关键字从左表(customer)返回所有的行,即使右表(asett)中没有匹配。如果右表中没有匹配,则结果为 NULL。
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c left join asett as a on c.cus_id = a.ast_id where a.ast_id = null; --left join关键字从左表(customer)返回所有的行,过滤右表(asett)中ast_id为 NULL的情况。
2、right join用法
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c right join asett as a on c.cus_id = a.ast_id; --right join关键字从右表(asett)返回所有的行,即使左表(customer)中没有匹配。如果右表中没有匹配,则结果为 NULL。
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c right join asett as a on c.cus_id = a.ast_id where c.cus_id= null; --right join关键字从右表(asett)返回所有的行,过滤左表(customer)中cus_id为 NULL的情况。
3、inner join用法
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c inner join asett as a on c.cus_id = a.ast_id; --inner join关键字在表中存在至少一个匹配时返回行。如果表customer中的行在表asett中没有匹配,则不会返回行。
4、full outer join用法
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c full outer join asett as a on c.cus_id = a.ast_id; --full outer join关键字只要左表(customer)和右表(asett)其中一个表中存在匹配,则返回行.。
eg:select c.cut_id, c._cusname, a.ast_fee, a.ast_phone from customer as c full outer join asett as a on c.cus_id = a.ast_id where c.cus_id= null or a.ast_id = null; --full outer join关键字只要左表(customer)和右表(asett)其中一个表中存在匹配,则返回行,同时过滤两个表cus_id或ast_id为空的情况.。
5、连接查询总结
表A left join 表B on 条件 --取 表A 全部,表B 没有对应的值为 null。
表A right join 表B on 条件 --取 表B 全部,表A 没有对应的值为 null。
表A full outer join表B on 条件 --取两个表并集,彼此没有对应的值为 null。
表A inner join 表B on 条件 --取两个表A/B的交集。
以上Sql语句只是简单地展示具体的使用和基本语法,大家在练习使用连接查询left join,right join,inner join,outer join 时,多关注查询出的数据情况以及彼此之间的差异,灵活和熟练掌握查询使用方法。