Oracle教程

Oracle Semi Join

Semi Join在Oracle 8.0中引入。它提供了执行WHERE EXISTS子查询的有效方法。
Semi Join返回第一个表中每行至少有一个匹配项的一个副本。
Semi Join是使用EXISTS构造编写的。

Oracle Semi Join示例

让我们采用两个表"部门"和"客户"
部门表
CREATE TABLE  "DEPARTMENTS" 
   (    "DEPARTMENT_ID" NUMBER(10,0) NOT null ENABLE, 
    "DEPARTMENT_NAME" VARCHAR2(50) NOT null ENABLE, 
     CONSTRAint "DEPARTMENTS_PK" PRIMARY KEY ("DEPARTMENT_ID") ENABLE
   )
/
 
Oracle Semi Join
客户表
CREATE TABLE  "CUSTOMER" 
   (    "CUSTOMER_ID" NUMBER, 
    "FIRST_NAME" VARCHAR2(4000), 
    "LAST_NAME" VARCHAR2(4000), 
    "DEPARTMENT_ID" NUMBER
   )
/
Oracle Semi Join 2
执行此查询
SELECT   departments.department_id, departments.department_name
        FROM     departments
        WHERE    EXISTS
                 (
                 SELECT 1
                 FROM   customer
                 WHERE customer.department_id = departments.department_id
                 )
        ORDER BY departments.department_id;
输出
Oracle半连接3

反联接和Semi Join之间的差异

虽然Semi Join返回第一个表中至少找到一个匹配项的每行的一个副本,但反联接返回每个表的一个副本没有找到匹配项的第一个表中的行。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4