深入淺出SQL教程之巢狀SELECT語句

2021-09-07 22:19:28 字數 1434 閱讀 5132

深入淺出sql教程之巢狀select語句

巢狀select語句也叫子查詢,形如:

select name from bbc where region = (select region from bbc where name = 'brazil')

乙個 select 語句的查詢結果可以作為另乙個語句的輸入值。上面的sql語句作用為獲得和'brazil'(巴西)同屬乙個地區的所有國家。子查詢不但可以出現在where子句中,也可以出現在from子句中,作為乙個臨時表使用,也可以出現在select list中,作為乙個欄位值來返回。本節我們僅介紹的where子句中的子查詢。

在where子句中使用子查詢,有乙個在實際使用中容易犯的錯在這裡說明一下。通常,就像上面的例子一樣,巢狀的語句總是和乙個值進行比較。 語句 (select region from bbc where name = 'brazil') 應該僅返回乙個地區,即 'americas'. 但如果我們在表中再插入一條地區為歐洲,國家名稱為brazil的記錄,那會發生什麼情況?

這將會導致語句的執行時錯誤.因為這個sql語句的語法是正確的,所以資料庫引擎就開始執行,但當執行到外部的語句時就出錯了。因為這時的外部語句就像好像是 select name from bbc where region = ('americas', 'europe'),這個語句當然報錯了。那麼有沒有辦法解決這個問題呢,當然有。有一些sql查詢條件允許對列表值(即多個值)進行操作。

例如"in" 操作符,可以測試某個值是否在乙個列表中。

下面的語句就可以安全的執行而不出錯,不管表中有多少條包含brazils的記錄。

select name from bbc where region in

(select region from bbc where name = 'brazil')

ok,讓我們再看看一些具體的例項。

一、給出人口多於russia(**)的國家名稱

select name from bbc

where population>

(select population from bbc

where name='russia')

二、給出'india'(印度), 'iran'(伊朗)所在地區的所有國家的所有資訊

select * from bbc

where region in

(select region from bbc

where name in ('india','iran'))

三、給出人均gdp超過'united kingdom'(英國)的歐洲國家.

select name from bbc

where region='europe' and gdp/population >

(select gdp/population from bbc

where name='united kingdom')

深入淺出SQL教程之巢狀SELECT語句1

巢狀select語句也叫子查詢,形如 select name from bbc where region select region from bbc where name brazil 乙個 select 語句的查詢結果可以作為另乙個語句的輸入值。上面的sql語句作用為獲得和 brazil 巴西 ...

深入淺出SQL系列教程之SQL語言簡介

sql是結構化查詢語言 structuredquerylanguage 的縮寫。這種語言允許我們對進行複雜的操作。sql語言的使用範圍非常廣泛。許多資料庫產品都支援 sql語言,這意味著如果我們學會了 sql語言,我們可以把這種知識運用到ms或,以及非常多的其它資料庫中。sql語言運用在關係型資料庫...

深入淺出SQL教程之SELECT語句中的表連線

為了從兩個或多個表中選出資料,我們一般使用 表連線來實現這個功能。本節介紹join 連線 的概念.為此我們準備了兩個試驗用表 album 表 和track 曲目表 表 包含200首來自amazon的 cd的概要資訊。album asin,title,artist,price,release,labe...