分类:
2009-07-13 16:00:43
LEFT JOIN 和 RIGHT JOIN 运算
用于 FROM 子句时,把源表记录组合起来。
语法
FROM表1 [ LEFT | RIGHT ] JOIN表2
ON 表1.字段1 compopr 表2. 字段2
LEFT JOIN 及 RIGHT JOIN 运算可分为以下几个部分:部分 说明
table1, table2 记录被组合的表的名称。
field1, field2 被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr 任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或 "<>."
----------------------------------------------------------------------------------------------
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX
与
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID AND B.OTHERKEY=XXXX
是不一样的
后者相当于
SELECT * FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.OTHERKEY=XXXX OR B.OTHERKEY IS NULL
----------------------------------------------------------------------------------------------
select x.班级,x.课程,round(cast(isnull(y.tot2,0) as numeric)/x.tot1*100,2) from
(
select a.班级,b.课程,count(*) as tot1 from 学生表 a
inner join 成绩表 b on a.学号=b.学号
group by a.班级,b.课程
) x
left join
(
select a.班级,b.课程,count(*) as tot2 from 学生表 a
inner join 成绩表 b on a.学号=b.学号
where b.成绩 between 80 and 100
group by a.班级,b.课程
) y
on x.班级=y.班级 and x.课程=y.课程
刚才没测试,改了一点
----------------------------------------------------------------------------------------------
左右连接问题。
在sql server的连接语句如:
select a.id,b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on a.id=b.xiangmid
在oracle中应改为:
Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where a.id=b.xiangmid(+);
在sql server的连接语句如:
select a.id,b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on trim(a.id)=trim(b.xiangmid)
在oracle中应改为:
Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where trim(a.id)=trim(b.xiangmid(+))
----------------------------------------------------------------------------------------------
如果以上的都是正确的,on里面的是x和y之间关系的,where里面的条件是x或者y单独的条件,是这么理解么?