付费推广网站,先做网页设计还是先弄网站,做投标的网站,青岛建设集团招工信息网站简介
本文主要讲解SQL语句中常用的表间关联查询方式#xff0c;包括#xff1a;左连接#xff08;left join#xff09;、右连接#xff08;right join#xff09;、全连接#xff08;full join#xff09;、内连接#xff08;inner join#xff09;、交叉连接…简介
本文主要讲解SQL语句中常用的表间关联查询方式包括左连接left join、右连接right join、全连接full join、内连接inner join、交叉连接cross join、自然连接natural join。
样例准备
以oracle数据库为例现在有两张表TESTTABLEONE简称a表和TESTTABLETWO简称b表两张表分别有id和name两个字段两张表数据如下两图所示。 两张表各有4条数据其中a表和b表都有id01和id02这两条数据a表有id03和id04两条数据但b表没有b表有id05和id06两条数据但a表没有。
左外连接
左外连接简称左连语法为left join或left outer join左表返回全部数据右表返回满足连接条件的数据对于左表存在而右表不存在的数据右表对应的字段返回NULL。
执行以下语句 --left join前面的a表就是左表left join后面的b表就是右表on的后面是连接条件以下连接条件表示按id字段匹配。 select a.*,b.* from TESTTABLEONE a left join TESTTABLETWO b on a.idb.id; 返回结果如下图
左表a表返回全部4条数据右表b表只返回了id01和id02对于左表存在而右表不存在的id03和id04两条数据左表返回全部数据而右表则返回NULL。 右外连接
右外连接简称右连语法为right join或right outer join右表返回全部数据左表返回满足连接条件的数据对于右表存在而左表不存在的数据左表对应的字段返回NULL。
执行以下语句 --right join前面的a表就是左表right join后面的b表就是右表on的后面是连接条件以下连接条件表示按id字段匹配。 select a.*,b.* from TESTTABLEONE a right join TESTTABLETWO b on a.idb.id; 返回结果如下图
右表b表返回全部4条数据左表a表只返回了id01和id02对于右表存在而左表不存在的id05和id06两条数据右表返回全部数据而左表则返回NULL。 全外连接
全外连接简称全连接语法为full join或full outer join返回左表和右表的全部数据对于左表存在而右表不存在的数据右表对应的字段返回NULL对于右表存在而左表不存在的数据左表对应的字段返回NULL。
执行以下语句 --full join连接a表和b表on的后面是连接条件以下连接条件表示按id字段匹配。 select a.*,b.* from TESTTABLEONE a full join TESTTABLETWO b on a.idb.id; 返回结果如下图
左表和右表都返回全部4条数据对于左表存在而右表不存在的id03和id04两条数据右表则返回NULL对于右表存在而左表不存在的id05和id06两条数据左表则返回NULL。 内连接
内连接语法为inner join只返回左表和右表满足连接条件的数据对于左表存在而右表不存在的数据以及右表存在而左表不存在的数据都不返回。
执行以下语句 --inner join连接a表和b表on的后面是连接条件以下连接条件表示按id字段匹配。 select a.*,b.* from TESTTABLEONE a inner join TESTTABLETWO b on a.idb.id; 以下写法的效果也相当于内连接 --a表和b表直接用逗号隔开把内连接的条件写到where条件里面。 select a.*,b.* from TESTTABLEONE a,TESTTABLETWO b where a.idb.id; 返回结果如下图
只返回左表和右表都存在的数据id01和id02。 交叉连接
交叉连接语法为cross join不带连接条件即没有on的部分返回左表和右表的笛卡尔积即左表所有数据与右表所有数据组合。
执行以下语句 --cross join连接a表和b表不带连接条件 select a.*,b.* from TESTTABLEONE a cross join TESTTABLETWO b; 返回结果如下图
总共返回16条数据即左表4条数据乘以右表4条数据。 交叉连接可以加where条件可以起到内连接的效果。
执行以下语句 --cross join加上where条件a.idb.id相当于inner join。 select a.*,b.* from TESTTABLEONE a cross join TESTTABLETWO b where a.idb.id; 返回结果如下图
只返回左表和右表都存在的数据id01和id02。 自然连接
自然连接语法为natural join不带显示连接条件会自动对左表和右表中名称相同的字段进行连接只返回左表和右表都存在的数据并且对于两张表中名称相同的连接字段不会重复显示。
执行以下语句 --natural join不需要带上显示的连接条件即on后面的部分。 select * from TESTTABLEONE a natural join TESTTABLETWO b; 返回结果如下图
只返回左表和右表都存在的数据并且作为自然连接条件的ID和NAME字段没有重复显示。