2010-09-22 17 views
2

下面的select語句中的select構造的術語是以粗體顯示的?這個SQL select構造調用了什麼?

SELECT a.t1爲a,(SELECT BN作爲B,從B,其中BX = a.t1), c.t2爲c FROM A,C 其中Ax = CX

我被解釋這可以在oracle中完成,但當被問及它被稱爲什麼時,我想不出任何術語。有這個詞嗎?還是隻是選擇一個選擇結果?

編輯:擴展的查詢,使子查詢使用明確

+2

四個答案一分鐘內,所有調用它的東西略有不同。我喜歡SQL ... – 2010-09-22 13:33:57

+0

這顯然是一個子查詢,但我認爲它是否是標量[guigui42建議](http://stackoverflow.com/questions/3769732/what-is-this-sql-select-construct-called/ 3769750#3769750)或者[RedFilter建議](參見http://stackoverflow.com/questions/3769732/what-is-this-sql-select-construct-called/3769743#3769743)將會依賴於你已經離開的部分出。至少,這是MySQL人使用的術語:http://dev.mysql.com/doc/refman/5.0/en/subqueries.html – 2010-09-22 13:44:42

+0

@TJ:它可能實際上既可以既不是,也可以不是,雖然如果它不是標量,查詢會炸彈... – RedFilter 2010-09-22 13:54:15

回答

14

這是一個子查詢。如果b.n引用外部查詢中的別名爲b的表,則可以將其稱爲correlated subquery

正如guigui42所示,它也是一個scalar查詢,因爲它最多隻返回一列和一行。事實上,您必須注意確保最多隻返回一行,否則查詢可能會在稍後的日期崩潰。這經常通過使用TOP 1或同等產品來防範。

+0

*「...因爲它指的是外部查詢中的表。」*它是?我錯過了它。它*可能是*,那麼在「WHERE」留下一個大問號之後的「...」... – 2010-09-22 13:38:12

+0

@TJ:你說得對,我錯誤地認爲'bn'指的是查詢外部的一個表,我們無法從發佈的細分中看出。我會更新我的迴應。 – RedFilter 2010-09-22 13:50:55

+0

@RedFilter:好的,你是否弄錯了還不清楚。你可能是對的。無論如何,這是個很好的答案。 – 2010-09-22 13:51:47

4

嵌套的子查詢。

......臭名昭着的表現不佳的表演者,如果誤用(這是相當常見的)。

+0

就像我們一樣,這是用來代替甲骨文案件陳述,用描述性術語代替ID代碼。它的可讀性和性能更可以接受。 – sal 2010-09-22 15:06:28

1

這被稱爲sub-select

+0

很多東西都是子選擇。我需要更具體的東西。 – sal 2010-09-22 15:01:11

5

我會說:「標量子查詢

編輯:作爲RedFilter說,它也是一個相關子查詢。

所以它是一個標相關子查詢

+1

好吧,它*可能會被腐蝕。它可能不是,OP沒有給我們足夠的工作。 – 2010-09-22 13:59:45

+1

它怎麼可能不是一個相關的子查詢?問題(未修正)說「(SELECT b.n as b FROM n WHERE ...)」;列b.n必須來自表'n'以外的地方,不是嗎? (除非在表中嵌套結構化類型,在這種情況下,表N可能包含具有組件N的複合列B ...... Oracle是否沉迷於這些東西?一些ORDBMS可以) – 2010-09-22 14:19:38

+0

@Jonathan Leffler:在這種情況下,沒有證據表明主查詢的'FROM'子句中的表將出現在標量子查詢的WHERE子句中。 – onedaywhen 2010-09-22 15:07:08