深入淺出SQL嵌套SELECT語句

2020-12-17 站長之家

嵌套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')
 
讓我們再看看一些具體的實例

一、給出人口多於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
    語句:select 姓名,班級 from 學生 where 性別="男"語句1:select 姓名,成績 from 學生,成績 where 學生.學號=成績.學號語句2:select 姓名,成績 from 學生 join 成績 on 學生.學號=成績.學號例9:查詢各個學生所修課程的課程名、成績語句1:select 姓名,課程名,成績 from 學生,成績,課程 where 學生.
  • NET開發-在SQL Server資料庫中使用SQL語句實現多表之間嵌套查詢...
    ,將多個SQL語句嵌套起來,實現複雜的嵌套查詢。2.嵌套查詢2.1. 簡單嵌套查詢在SQL Server中,簡單的嵌套查詢常用的就是在一個查詢中使用where對另一個子查詢的結果進行判斷。SQL語句如下:select * f rom BW_Student where Age>(select AVG(Age) f rom BW_Student)運行此SQL語句如下圖所示:
  • 學習MySQL的select語句
    select語句可 以用回車分隔$sql="select * from article where id=1"和  $sql="select * from article where id=1">都可以得到正確的結果,但有時分開寫或許能 更明了一點,特別是當sql語句比較長時。
  • mysql常用sql語句總結
    再執行外層語法:select 欄位 from 表 where 內層結果eg:select goods_name,goods_id from goods where goods_id =(select max(goods_id) from goods);from子查詢先執行from後的語句,得到內層結果。
  • 優化SQL查詢:如何寫出高性能SQL語句
    select*from dualselect*From dual其實就是大小寫不同,查詢分析器就認為是兩句不同的SQL語句,必須進行兩次解析。生成2個執行計劃。所以作為程式設計師,應該保證相同的查詢語句在任何地方都一致,多一個空格都不行!
  • php mysql SQL注入語句構造
    「漏洞」分析:   1.admin/login.php注射導致繞過身份驗證漏洞:   代碼:   $conn=sql_connect($dbhost, $dbuser, $dbpswd, $dbname);   $password = md5($password);   $q = "select id,group_id from
  • Oracle優化:sql語句的執行順序
    理解 sql 語句的執行順序對我們優化 sql 有很大的幫助,那麼 sql 語句的執行順序是怎樣的呢,以一條簡單的的語句做分析:① 先執行 from 子句,明確數據的來源,從哪個表或哪個視圖來查詢② 接著執行
  • SQL 資料庫語句
    9、說明:創建視圖:create view viewname as select statement刪除視圖:drop view viewname10、說明:幾個簡單的基本的sql語句選擇:select * from table1 where 範圍插入:insert into table1(field1,field2) values(value1
  • 一道簡單的sql語句題
    結果才發現,數據分析崗位大多注重的是資料庫的能力,比如sql語句的考察,hive的考察,以及一些運營思維的考察,所以第一次面試就很悲劇啦,不過題目還是很有代表性的。其他的不寫了,這裡只分享一個關於sql的題目。1、問題引出現在有兩個數據表,一個數據表記錄司機的信息,比如司機id,司機姓名,司機註冊時間等等,一個數據表記錄一天的訂單情況,比如訂單ID,訂單司機id,訂單時間。
  • 資料庫常用的sql語句匯總(2)
    資料庫相關sql語句表相關創建表 create table t1(id int,name varchar(10));表相關sql語句修改表修改表名 rename table t1 to t2;修改表相關sql語句數據相關插入數據 insert into t1 values(5,'xiaoming',null
  • SQL系列:當INSERT遇到SELECT...
    作為開發,在實際工作中經常會和資料庫打交道,會用高效快捷的sql語句如有神助般,提高工作效率。
  • 超全sql語句全集值得收藏
    首頁 > 語言 > 關鍵詞 > 收藏最新資訊 > 正文 超全sql語句全集值得收藏
  • SQL語句中where條件為什麼寫上1=1
    String sql="select * from blog where";if ( condition 1) { sql = sql + " blogID = 202102111501";}if (condition 2) { sql = sql + " and commentID =
  • 面試官:你知道select語句和update語句分別是怎麼執行的嗎?
    來自:黎社編程(ID:  LDCldc123095)最近有粉絲面試網際網路公司被問到:你知道select語句和update語句分別是怎麼執行的嗎?,要我寫一篇這兩者執行SQL語句的區別,這不就來了。檢索緩存當建立連接,履行查詢語句的時候,會先行檢查在緩存區域看看這個sql與否履行過,若是之前執行過,它的執行結果會以Key-Value的形式緩存於內存中,Key是執行的sql,Value是結果集。
  • 經典SQL語句大全
    下列語句部分是Mssql語句,不可以在access中使用。9、說明:創建視圖:create view viewname as select statement刪除視圖:drop view viewname10、說明:幾個簡單的基本的sql語句選擇:select * from table1 where 範圍插入:insert into table1(field1,field2
  • 面試官:你知道 select 語句和 update 語句分別是怎麼執行的嗎?
    ,要我寫一篇這兩者執行SQL語句的區別,這不就來了。總的來說,select和update執行的邏輯大體一樣,但是具體的實現還是有區別的。檢索緩存當建立連接,履行查詢語句的時候,會先行檢查在緩存區域看看這個sql與否履行過,若是之前執行過,它的執行結果會以Key-Value的形式緩存於內存中,Key是執行的sql,Value是結果集。
  • 使用explain和show profile來分析SQL語句實現優化SQL語句
    SQL語句優化是建立在慢查詢分析的基礎上,通過慢查詢定位有問題的SQL語句,關於慢查詢的介紹及其分析工具,可以參考[mysql慢查詢及慢查詢日誌分析工具]一、通過explain查詢1 用法:explain sql2 作用:用於分析sql語句
  • 為什麼要避免使用「CREATE TABLE AS SELECT」語句
    SQL語句「create table <table_name> as select ...」用於創建普通表或臨時表,並物化select的結果。某些應用程式使用這種結構來創建表的副本。一條語句完成所有工作,因此您無需創建表結構或使用其他語句來複製結構。
  • SQL語句性能調整之ORACLE的執行計劃
    如何產生執行計劃  要為一個語句生成執行計劃,可以有3種方法:  1).最簡單的辦法  Sql> set autotrace on  Sql> select * from dual;  執行完語句後,會顯示explain
  • SQL查詢語句場景應用
    /en/select.htmlSQL函數和運算符參考:https://dev.mysql.com/doc/refman/8.0/en/sql-function-reference.html 表達式評估中的類型轉換: https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html  SELECT