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

SQL 語言基礎(一):SELECT 結構、別名、TOP、DISTINCT 與 INTO 實戰

     編輯:關於SqlServer

物件命名慣例

[資料庫名.] [擁有者名.] 物件名
-- 前兩者可省略:預設資料庫=目前資料庫,預設擁有者=dbo

別名

SELECT 欄位名 AS 別名 FROM 表名 AS 表別名
-- 一旦指定表別名,同一陳述式內所有對該表的引用必須使用別名

SELECT 完整結構

SELECT [ALL | DISTINCT] [TOP N [PERCENT]] 選取清單
[INTO 新資料表名]
FROM {資料表 | 檢視表} [, ...]
[WHERE 搜尋條件]
[GROUP BY 分組清單]
[HAVING 分組搜尋條件]
[ORDER BY 排序清單 [ASC | DESC]]

WHERE vs HAVING 差異:WHERE 在分組前過濾資料列;HAVING 在分組後過濾群組。

SELECT 子句詳細參數

SELECT [ALL | DISTINCT] [TOP N [PERCENT]] 選取清單
  • ALL:預設,保留重複列。
  • DISTINCT:移除完全重複的列。
  • TOP N [PERCENT]:限制輸出前 N 列或前 N%。N 範圍 0~4,294,967,295。加 PERCENT 時 N 為 0~100。
  • 選取清單:欄位名、運算式、函數、`*`、常數等。

實戰範例

USE Northwind;
GO

-- 1. 計算衍生欄位、指定別名、結果存入新表
SELECT ProductID, OrderID, UnitPrice * Quantity AS TotalAmount
INTO OrderSummary
FROM [Order Details]  -- 含保留字 Order 需用 [] 括起
WHERE UnitPrice * Quantity > 10000;
-- 注意:WHERE 不能用別名 TotalAmount,因別名屬結果集,WHERE 執行於 SELECT 之前

關鍵點解析

  1. AS 別名:提升可讀性,衍生欄位**必須**指定別名,否則系統自動產生無意義名稱 (如 `Expr1001`)。
  2. INTO 新表:建立新表並寫入結果集結構與資料。不可與 `COMPUTE` 子句共用。衍生欄位若無別名將以系統名稱建立欄位。
  3. 保留字跳脫:物件名含保留字 (如 `Order`、`Group`、`Key`) 必須用 `[]` 或 `""` (ANSI_QUOTES ON 時) 括起。
  4. 執行順序:FROM → WHERE → GROUP BY → HAVING → SELECT (含別名) → ORDER BY。故 WHERE/GROUP BY/HAVING 不能使用 SELECT 定義的別名。

進階練習建議

  • 嘗試 `TOP 10 PERCENT` 配合 `ORDER BY` 取得前 10% 高金額訂單。
  • 使用 `DISTINCT` 去除重複客戶城市清單。
  • 結合 `CASE WHEN` 在選取清單中建立分類欄位。

小結

SELECT 是 SQL 查詢的核心。熟記完整子句順序、別名作用域、TOP/DISTINCT/INTO 用法、保留字跳脫、執行順序限制,能寫出正確、高效、可維護的查詢語句。

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