巢狀SELECT語句

2021-06-01 00:49:14 字數 3741 閱讀 1171

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

02

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

04

05乙個 select 語句的查詢結果可以作為另乙個語句的輸入值。

06

07上面的sql語句作用為獲得和'brazil'(巴西)同屬乙個地區的所有國家。

08

09子查詢不但可以出現在where子句中,也可以出現在from子句中,作為乙個臨時表使用,也可以出現在select list中,作為乙個欄位值來返回。本節我們僅介紹的where子句中的子查詢。

10

11在where子句中使用子查詢,有乙個在實際使用中容易犯的錯在這裡說明一下。

12

13通常,就像上面的例子一樣,巢狀的語句總是和乙個值進行比較。

14

15語句 (select region from bbc where name ='brazil') 應該僅返回乙個地區,即'americas'. 但如果我們在表中再插入一條地區為歐洲,國家名稱為brazil的記錄,那會發生什麼情況?

16

17這將會導致語句的執行時錯誤.因為這個sql語句的語法是正確的,所以資料庫引擎就開始執行,但當執行到外部的語句時就出錯了。

18

19因為這時的外部語句就像好像是 select name from bbc where region = ('americas','europe'),這個語句當然報錯了。

20

21那麼有沒有辦法解決這個問題呢,當然有。有一些sql查詢條件允許對列表值(即多個值)進行操作。

22

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

24

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

26

27以下為引用的內容:

28select name from bbc where region in

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

30

31

32讓我們再看看一些具體的例項

33

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

35

36以下為引用的內容:

37select name from bbc

38where population>

39(select population from bbc

40where name='russia')

41

42

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

44

45以下為引用的內容:

46select * from bbc

47where region in

48(select region from bbc

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

50

51

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

53

54以下為引用的內容:

55

56select name from bbc

57where region='europe'and gdp/population >

58(select gdp/population from bbc

59where name='united kingdom')

MYSQL insert巢狀select的使用

假設現有兩張表,表a,表b 表a 表b 現有這樣的需求,根據表a中的hscode值與表b中的item code值對比,將表b在表a中不存在的資料刪除掉。實現方法 1 首先建立一張表b的臨時表,假設為b temporary 2 對比兩張表,將需要被刪除的插入到臨時表中 insert into b te...

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

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

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

深入淺出sql教程之巢狀select語句 巢狀select語句也叫子查詢,形如 select name from bbc where region select region from bbc where name brazil 乙個 select 語句的查詢結果可以作為另乙個語句的輸入值。上面的s...