Oracle-Exists-And-In-1

EXISTS 与 IN 对比案例

说明:

1、Oracle 为了提高效率,尽量都用 exists ,不使用 in
2、select 1 和 select * 是一样的,你可以简单的理解为 exists 不去判断单个列是否相同而是一行数据是否相同,所以他不像 in 一样需要指定对应的 列名称。
3、exists 与 in 的替换
exists 替换 in
not exists 替换 not in
4、注意 exists 与 in 查询的结果可能会因为数据的问题而不一致,in 更加的准确 ,但是它的运行效率低。

数据库环境

-- 表环境
DROP TABLE MENU_INFORMATION;
CREATE TABLE MENU_INFORMATION (
  "MENU_NAME" VARCHAR2(100 BYTE) VISIBLE ,
  "MENU_URL" VARCHAR2(200 BYTE) VISIBLE ,
  "MENU_KEY" VARCHAR2(200 BYTE) VISIBLE 
);

-- 数据环境
INSERT INTO MENU_INFORMATION VALUES ('T3-1', 'T3-2', 'T3-3');
INSERT INTO MENU_INFORMATION VALUES ('T4-1', 'T4-2', 'T4-3');
INSERT INTO MENU_INFORMATION VALUES ('T1-1', 'T1-2', 'T1-3');
INSERT INTO MENU_INFORMATION VALUES ('T2-1', 'T2-2', 'T2-3');

以下两个案例实现同一个功能

IN 案例

SELECT * FROM MENU_INFORMATION 
WHERE MENU_NAME IN (SELECT MENU_NAME FROM MENU_INFORMATION WHERE MENU_NAME = 'T3-1') ;

EXISTS 案例

SELECT * FROM MENU_INFORMATION A
WHERE EXISTS (SELECT 1 FROM  MENU_INFORMATION B WHERE  A.MENU_URL = B.MENU_URL AND B.MENU_NAME = 'T3-1')
Contents
  1. 1. EXISTS 与 IN 对比案例
    1. 1.1. 说明:
    2. 1.2. 数据库环境
    3. 1.3. 以下两个案例实现同一个功能
|