select m.yf,o.objxx from month m left join object_test o on m.yf=o.yf order by m.yf desc;
通过 你月份表(month) 左连接 项目表(exp). SQL例子如下: select m.month_,e.* from month m left join exp e on e.month_ = m.month_ --左连接解释:月份表month通过月份连接exp项目表,即已month为主表, --不管项目表exp有没有都会有记录。 --①当exp表连接无数据时,会只展示一条month记录而其他为空。 --②当exp表连接有数据是,根据连接到的项目记录数,生成相应的连接数据记录条数。
同意楼上的,用连接表应该是比较好的解决方法。或者你可以用not in,逻辑上比较好理解,不过执行效率比较慢 select m.* from month1 m where m.month not in (select month from month2)
Select a.月份,sum(b.值) As 值 From 月份 a,项目 b Where a.月份=b.月份(+) Group By a.月份 Order By a.月份
我觉得你这个问题你使用左连接是最简单的: select * from mymonth m left join mywork w on m.month=w.month order by m.month;
显示全部数据不得用not in
with m12 as (select rownum as monthid from dual connect by rownum <=12) select m12.monthid , xm.* from m12 left join xm on m12.monthid = xm.monthid再改改,大概就是这个语法,我没有环境,也没有测试,有问题可以直接回复我。
同楼上,使用左连接 select yuefen.month xiangmu.xiangmumc from yuefen T1 LEFT JOIN xiangmu T2 ON T1.month=T2.month
not in 在查询多条数据时,效率很慢,使用外连接比较好, select * from mymonth m left join mywork w on m.month=w.month order by m.month;
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定: 1)LEFT JOIN或LEFT OUTER JOIN 左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 2)RIGHT JOIN 或 RIGHT OUTER JOIN 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 3)FULL JOIN 或 FULL OUTER JOIN 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。而NOT IN速度很慢,因为这样会存在两个全表检索的情况,而且,not in (...) 括号中的返回值不能存在null值,是Oracle SQL开发的一条铁律 因此,请尽量不要使用not in(它会调用子查询)。
left join即可,select * from table1 left join table2 on a.id=b.id,默认会以左侧为准,右侧补空
错了,是以月份为匹配,改成这个select * from table1 left join table2 on a.month=b.month,默认会以左侧为准,右侧补空
使用表的外连接查询,左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
SQL例子如下: select m.month_,e.* from month m
left join exp e on e.month_ = m.month_
--左连接解释:月份表month通过月份连接exp项目表,即已month为主表,
--不管项目表exp有没有都会有记录。
--①当exp表连接无数据时,会只展示一条month记录而其他为空。
--②当exp表连接有数据是,根据连接到的项目记录数,生成相应的连接数据记录条数。
select m.* from month1 m where m.month not in (select month from month2)
From 月份 a,项目 b
Where a.月份=b.月份(+)
Group By a.月份 Order By a.月份
select * from mymonth m left join mywork w on m.month=w.month order by m.month;
显示全部数据不得用not in
select m12.monthid , xm.* from m12 left join xm on m12.monthid = xm.monthid再改改,大概就是这个语法,我没有环境,也没有测试,有问题可以直接回复我。
select yuefen.month xiangmu.xiangmumc from yuefen T1 LEFT JOIN xiangmu T2 ON T1.month=T2.month
select * from mymonth m left join mywork w on m.month=w.month order by m.month;
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。而NOT IN速度很慢,因为这样会存在两个全表检索的情况,而且,not in (...) 括号中的返回值不能存在null值,是Oracle SQL开发的一条铁律 因此,请尽量不要使用not in(它会调用子查询)。