小编Raf*_*tro的帖子

Oracle 的左连接和 where 子句错误

CREATE TABLE "ATABLE1"
  (
    "COLUMN1" VARCHAR2(20 BYTE),
    "COLUMN2" VARCHAR2(20 BYTE)
  );

CREATE TABLE "ATABLE2"
  (
    "COLUMN1" VARCHAR2(20 BYTE),
    "COLUMN2" VARCHAR2(20 BYTE)
  );

Insert into ATABLE1 (COLUMN1,COLUMN2) values ('A','1');
Insert into ATABLE1 (COLUMN1,COLUMN2) values ('B','2');

Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A',null);
Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A','1');
Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A','2');

select ATABLE1.column1, count(ATABLE2.column1) 
    from ATABLE1 Left OUTER JOIN ATABLE2 on ATABLE1.column1 = atable2.column1
    GROUP BY ATABLE1.column1;

Result

COLUMN1              COUNT(ATABLE2.COLUMN1) 
-------------------- ---------------------- 
A                    3                      
B                    0    
Run Code Online (Sandbox Code Playgroud)

这按预期工作。问题是我总是希望显示 ATABLE1 中的所有行并应用一些限制。 …

oracle join

10
推荐指数
1
解决办法
4770
查看次数

Oracle 查询和函数索引使用的串联

我对 Oracle 11g 中的索引有一些我无法理解的问题。

我们可以创建测试数据:

create table test2(field1 varchar2(100),field2 varchar2(100),field3 number,field4 varchar2(100)); 

create index test2_idx1 on test2(upper(field1)); 

create index test2_idx1b on test2(field1); 

create index test2_idx2 on test2(field3); 

DECLARE
  j NUMBER :=1;
BEGIN
  FOR i IN 1..500000
  LOOP
    INSERT
    INTO test2 
    (field1,field2, field3, field4)
    VALUES 
    ('field1='||i,'a', j, '??i' );

    IF (i mod 1000)=0 THEN
       j := j+1;
    END IF;
  END LOOP;
  COMMIT;
END;


EXEC DBMS_STATS.GATHER_TABLE_STATS ('system', 'test2');
Run Code Online (Sandbox Code Playgroud)

然后我制定了一些解释计划,结果我无法理解

查询 1

SELECT * FROM test2 WHERE field3=1;
Run Code Online (Sandbox Code Playgroud)

解释计划:

解释查询 01 的计划

这里一切正常。使用索引。

查询 2 …

index oracle explain

6
推荐指数
1
解决办法
2169
查看次数

标签 统计

oracle ×2

explain ×1

index ×1

join ×1