Oracle 相互關聯的子查詢__Oracle

來源:互聯網
上載者:User

-- Start

我們先來看兩個表的定義:

--使用者CREATE TABLE EMPLOYEE(USERID       NUMBER(9,0) NOT NULL,---使用者IDCOMPANYID    NUMBER(9,0),---公司IDTELNO        VARCHAR2(12)---使用者電話);ALTER TABLE "EMPLOYEE" ADD CONSTRAINT "PK_EMPLOYEE" PRIMARY KEY ("USERID");--公司CREATE TABLE COMPANY(COMPANYID NUMBER(9,0) NOT NULL,---公司IDTELNO     VARCHAR2(12)---公司電話);ALTER TABLE "COMPANY" ADD CONSTRAINT "PK_COMPANY" PRIMARY KEY ("COMPANYID");

大家對子查詢都非常熟悉,可是我發現,很多人都不知道子查詢有兩種格式:一種是相互關聯的子查詢(Correlated Sub-Query),另一種是非相互關聯的子查詢(Uncorrelated Sub-Query)。下面我們通過一個例子來對比一下這兩種子查詢的不同。假設現在讓你查詢一下公司電話是88888888 的使用者有哪些,我們可以使用如下語句:

--非相互關聯的子查詢(Uncorrelated Sub-Query)SELECT * FROM EMPLOYEE WHERE COMPANYID IN(SELECT COMPANYID FROM COMPANY WHERE TELNO='88888888');--相互關聯的子查詢(Correlated Sub-Query)SELECT * FROM EMPLOYEE U WHERE EXISTS(SELECT * FROM COMPANY C WHERE TELNO='88888888' AND U.COMPANYID=C.COMPANYID);

以上兩條語句的用作是相同的,對比後我們發現,相互關聯的子查詢的子句(也就是括弧中的語句:ELECT * FROM COMPANY C WHERE TELNO='88888888' AND U.COMPANYID=C.COMPANYID)依賴外部語句的條件,不能單獨執行;而非相互關聯的子查詢的子句是可以單獨執行的。就以上這個例子來說,我們使用相互關聯的子查詢無論從效能和可讀性都不如非相互關聯的子查詢,下面我們來看一個使用非相互關聯的子查詢辦不到的例子,假設現在讓你把使用者電話更新成公司電話,怎麼辦。有些人可能採用如下的方式構造update sql,然後執行,如下:

SELECT 'UPDATE EMPLOYEE SET TELNO=''' || TELNO || ''' WHERE COMPANYID=' || CHAR(COMPANYID) || ';' FROM COMPANY

這麼做是可以的,但是有點笨(當然,自己覺得挺聰明,因為他可能覺得自己使用了別人不常用或不知道的using sql to make sql),我們還有更好的方法,就是採用相互關聯的子查詢,如下所示:

UPDATE EMPLOYEE U SET TELNO=(SELECT TELNO FROM COMPANY C WHERE U.COMPANYID=C.COMPANYID);

怎麼樣。是不是感覺自己很厲害,有沒有更簡單的辦法。看看下面的語句吧。

UPDATE (SELECT U.TELNO EMPLOYEE_TELNO, C.TELNO COMPANY_TELNO FROM EMPLOYEE U, COMPANY C WHERE U.COMPANYID=C.COMPANYID)SET EMPLOYEE_TELNO = COMPANY_TELNO;

--更多參見:Oracle SQL 精萃

-- 聲明:轉載請註明出處

-- Last edited on 2015-06-19

-- Created by ShangBo on 2015-06-19

-- End

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.