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

SQL 查詢精華全攻略:從簡單查詢、聯合查詢到多表連接的完整語法與範例

     編輯:關於SqlServer

一、簡單查詢

基本結構

SELECT 選擇清單
FROM 表來源
WHERE 搜尋條件
ORDER BY 排序規則

選擇清單 變化

  • SELECT *:所有欄位
  • SELECT col1, col2:指定欄位與順序
  • SELECT 別名 = 欄位 或 SELECT 欄位 別名:自訂標題 (含中文需加引號)
  • SELECT DISTINCT:移除重複列
  • SELECT TOP n [PERCENT]:限制回傳筆數或百分比

FROM 子句

  • 最多 256 個表/視圖,逗號分隔。
  • 同名欄位需加前綴限定:table.column。
  • 支援表別名:FROM tableA a, tableB b。
  • 支援衍生表 (子查詢) 作為來源:FROM (SELECT ... FROM ...) AS t。

WHERE 子句運算符

類別運算符範例
比較=, <>, >, >=, <, <=, !>, !<age > 20
範圍BETWEEN ... AND ...age BETWEEN 10 AND 30
列表IN / NOT INcountry IN ('DE','CN')
模式LIKE / NOT LIKEname LIKE '張%', code LIKE '[A-C]%'
空值IS NULL / IS NOT NULLage IS NULL
邏輯AND, OR, NOT (優先序:NOT > AND > OR)age>20 AND city='Taipei'

模式比對萬用字元

  • %:任意長度字串 (中文建議 %%)
  • _:單一任意字元
  • [...]:指定字元集合/範圍
  • [^...]:排除字元集合

ORDER BY 排序

ORDER BY col1 DESC, col2 ASC  -- 多欄位混合排序
ORDER BY (col1 + col2)        -- 運算式排序

不支援 ntext/text/image 排序。

二、聯合查詢 (UNION)

SELECT ... FROM table1
UNION [ALL]
SELECT ... FROM table2
[UNION [ALL] SELECT ... FROM table3] ...
  • 所有 SELECT 欄位數、資料類型需相容 (自動提升精度)。
  • UNION 移除重複列;UNION ALL 保留所有列 (效能較佳)。
  • 結果欄位名稱取自第一個 SELECT;排序需用第一個查詢的欄位名/別名/序號。
  • 括號可改變執行順序:Q1 UNION (Q2 UNION Q3)。

三、連接查詢 (JOIN)

ANSI SQL-92 標準語法

FROM table1 join_type table2 ON (join_condition)

三大連接類型

類型關鍵字行為
內連接INNER JOIN僅回傳符合連接條件的配對列
外連接LEFT/RIGHT/FULL OUTER JOIN保留左/右/雙邊所有列,無配對處補 NULL
交叉連接CROSS JOIN笛卡兒積,無 ON 子句,列數 = 左列數 × 右列數

內連接細分

  • 等值連接:ON a.id = b.id,結果含重複欄位。
  • 自然連接:等值連接 + 選擇清單移除重複欄位。
  • 不等連接:使用 >, <, >=, <=, <> 等非等號運算子。

外連接範例

-- 左外連接:保留左表所有論壇貼文,右表無作者資料則補 NULL
SELECT a.*, b.* FROM luntan a LEFT JOIN usertable b ON a.username = b.username

-- 全外連接:城市表與使用者表雙向保留
SELECT a.*, b.* FROM city a FULL OUTER JOIN usertable b ON a.username = b.username

交叉連接範例

-- 6 類圖書 × 8 家出版社 = 48 列組合
SELECT type, pub_name FROM titles CROSS JOIN publishers ORDER BY type

特殊資料類型限制

text/ntext/image 不可直接連接,需轉換或使用 DATALENGTH() 等函數間接比對。

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