sqlserver技术内幕<二> 表运算符之join

left join,inner join,right join,cross join,full join的区别


inner join  只返回两张表连接列的匹配项
left join  第一张表的连接列在第二张表中没有匹配是 , 第二张表中的值返回 null
right join 
第二张表的连接列在第一张表中没有匹配是 第一张表中的值返回 null 
full join 表示把A表和B表的记录都显示出来,不符合条件的用NULL表示。
以上几种必须设置关联条件,sqlserver中可在on,where中设定,oracle必须在on中设定

cross join 是笛卡儿乘积就是一张表的行数乘以另一张表的行数,返回结果的行数为2个表行数乘




例:
[TEST@ORA1] sql>select * from a;

编号 姓名
---- ----------
1000 张三
2000 李四
3000 王五

[TEST@ORA1] sql>select * from b;

编号 商品
---- ----------
1000 电视机
2000 录像机
4000 自行车

[TEST@ORA1] sql>set null 空值--这里为了显示方面我把NULL定义成了[空值]

[TEST@ORA1] sql>select a.*,b.* from a inner join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机

[TEST@ORA1] sql>select a.*,b.* from a left join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机
3000 王五       空值 空值

[TEST@ORA1] sql>select a.*,b.* from a right join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机
空值 空值       4000 自行车

[TEST@ORA1] sql>select a.*,b.* from a full join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机
3000 王五       空值 空值
空值 空值       4000 自行车

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...