2016-11-01 71 views
0

我想了解在處理SQL時,嵌套或嵌套子查詢如何在Oracle中工作。因此,讓我們舉個例子,我有兩張桌子,一張是我拿着所有學生的信息,另一張是我拿着每個學生收到的所有成績。現在我試圖找到所有從成績表中獲得至少一個'A'成績的學生。我可以做一個簡單的連接並獲得輸出。但問題是,如果學生兩次獲得'A'級,他的身份證顯示兩次。現在我知道我可以用DISTINCT這個詞來解決我的問題。但我想使用嵌套查詢來做到這一點,所以這就是我輸入 - > 從學生身份選擇ID,其中id在(從成績選擇ID); 現在這個查詢返回一個沒有重複的輸出。我試圖讓我的頭在此以及如何嵌套查詢詳細工作。 「在哪裏」部分也有什麼作用?真的很困惑。SQL中子查詢的工作

+0

(1)我刪除了不合適的數據庫標籤。 (2)您應該編輯問題並提供樣本數據和期望的結果。 –

回答

0

雖然distinct是不好的東西,但它經常被誤用 - 而且我認爲你的例子是一個更好的方法。

在這種情況下,我認爲你最好的選擇是半連接。下面是一個粗略的例子:

select s.* 
from students s 
where exists (
    select null 
    from grades g 
    where 
    s.student_id = g.student_id and 
    g.grade = 'A' 
) 

甲骨文確實執行子查詢到一個半連接在後臺,當它是有意義的一個相當不錯的工作,但其他DBMS肯定從這個結構中受益。

+0

是的。非常感謝你的回覆!我現在明白了:) –

0

實際上,它的工作方式是連接和獨特 - 但Oracle很聰明,它可以高效地完成工作。它會做你會做的事情:它從第一個表中獲取第一個student_id,並嘗試將它與第二個表中的行進行匹配。但是,由於您不需要整個連接,因此一旦找到匹配就會停止 - 然後它將轉到第一個表中的第二行。

我假設你的意思是子查詢是select id from grades where grade = 'A',對不對?

+0

是的。非常感謝你的回覆!我現在明白了:) –