SELECT e.*,d.*
FROM emp e RIGHT JOIN dept d ON e.EMPNO = d.EMPNO
我们可以看到,使用RIGHT JOIN的时候,我们以右表为主,左表没有右表的数据时,也把左表相关行的数据置为空,因为ID为1,2的数据在右表中没有,因此就把这两行数据置空了,这样无论如何都找不到存在于emp表而不存在于dept表中的数据了
为此,我们应该根据业务需求去选择左连接或者右连接,选择能完成需求的SQL语句,如果能简单一点的话就更好了
补充一点吧,
COALESCE函数置0,但是报了个错,说ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER,那么可能是COALESCE只能将数据类型为NUMBER的列置为0吧,不同同时我们也知道,COALESCE可以用数据类型为NUMBER的列上,并当它为NULL时置为0
还有一点是,
IN 和 NOT IN 本质上是 OR 运算,where deptno in ( 10,50,null ),相当于,where (deptno=10 or deptno=50 or deptno=null)
概述有这样一个需求,我们需要从ORACLE中查询查询出存在表A而不存在于表B中的数据,完成这个需求的方案有很多种,我们一个一个看基于MINUS取差集的解决方案我们知道,ORACLE中表A MINUS 表B 是指指筛选出存在于 表A 而不存在于 表B的数据,那么select EMPNO from empminusselect EMPNO from dept就可以筛选出存在于表emp 而不存在于表dept 种的EMPNO了,再使用一个IN就可以查出所有的数据了完整SQL如下:SELECT
Oracle查询A表不在B表中数据的四种方法,这里以用户表和索引表为例,即查询用户字段没有建索引的表名称。
以下查询耗时为个人数据库实际情况检测,仅供参考。
select * from user_tab_columns a–耗时6秒
where concat(a.table_name,a.column_name)
not in(
select concat(b.table_name,b.colum...
select distinct(a.adcd),a.adnm from fda.ia_adc_adinfo a where not exists(select * from mde.sys_adcdyear b where a.adcd=b.code) and substr(a.adcd,5,2)!='00' and substr(a.adcd,7,15)='000000000'
oracle 查出2张表不同的记录(即A表有,B表却没有)原型: select * from t_user1 a where not exists (select * from t_user2 b where a.id=b.id );
例子,A表有,苹果,梨,西瓜,香蕉,---->>>> B表有,苹果,梨,香蕉, 查询结果应该是:西瓜。...