首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 子查詢完全指南:WHERE 子句應用、多值處理與實戰範例

     編輯:關於SqlServer

子查詢(Subquery)是一個 SELECT 陳述式嵌入另一個陳述式,可用於 WHERE、FROM、SELECT 清單。本文專注 WHERE 子句應用與常見陷阱。

基本語法

SELECT name FROM bbc
WHERE region = (SELECT region FROM bbc WHERE name = 'Brazil')

作用:找出與巴西同區域的所有國家。

陷阱:子查詢回傳多值導致錯誤

若表中有兩筆 name='Brazil' 但 region 不同,子查詢回傳 ('Americas','Europe'),外層 region = (...) 將報錯。

解決方案:使用 IN 操作符支援多值

SELECT name FROM bbc
WHERE region IN (SELECT region FROM bbc WHERE name = 'Brazil')

IN 可安全處理零值、單值、多值三種情況。

實戰範例

範例一:人口數超過俄羅斯的國家

SELECT name FROM bbc
WHERE population > (SELECT population FROM bbc WHERE name = 'Russia')

範例二:印度與伊朗所在區域的所有國家資訊

SELECT * FROM bbc
WHERE region IN (SELECT region FROM bbc WHERE name IN ('India','Iran'))

範例三:人均 GDP 超過英國的歐洲國家

SELECT name FROM bbc
WHERE region = 'Europe'
  AND gdp/population > (SELECT gdp/population FROM bbc WHERE name = 'United Kingdom')

子查詢分類速查

類型回傳常用運算子範例位置
標量子查詢單一值=, >, <, <>WHERE, SELECT 清單
資料列子查詢單列多欄=, INWHERE
資料表子查詢多列多欄IN, EXISTSWHERE, FROM

效能提示

  • EXISTS 通常優於 IN(特別是外層大表、內層小表)
  • 確保子查詢欄位有索引
  • 避免在迴圈中執行關聯子查詢,改用 JOIN 或暫存表

掌握 IN/EXISTS 處理多值、標量與資料表子查詢的區別,即能寫出正確且高效的子查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved