深入淺出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...