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

SQL 進階技巧:SELECT INTO、WHERE vs HAVING、JOIN vs UNION、COMPUTE 子句

     編輯:關於SqlServer

1. SELECT * INTO 新表

SELECT * INTO new_table FROM source_table WHERE condition;
  • 依查詢結果**自動建立**新表結構並填入資料。
  • 新表無索引、無主鍵、無約束,僅複製欄位定義與資料。
  • 欄位長度/型別完全依來源查詢結果。

2. WHERE vs HAVING

子句使用時機執行順序
WHERE分組**前**過濾列 (無 GROUP BY 時也用 WHERE)FROM → WHERE → GROUP BY
HAVING分組**後**過濾群組 (必須搭配 GROUP BY)GROUP BY → HAVING → SELECT

記憶口訣:「有 GROUP BY 用 HAVING,無 GROUP BY 用 WHERE。」

3. JOIN vs UNION

  • JOIN (橫向合併):依關聯欄位將多表**欄位**合併,結果列數 = 左表列數 (內部) 或保留方列數 (外部),欄位數 = 兩表欄位數之和。
  • UNION (縱向合併):將多查詢**列**疊加,要求**欄位數、順序、型別相容**;UNION 去重,UNION ALL 保留重複 (效能較好)。

4. COMPUTE 子句 (舊版 SQL Server 支援,新版建議用 GROUP BY/ROLLUP)

-- 全彙總附加在結果集最後一列
SELECT id, amount FROM sales ORDER BY id COMPUTE SUM(amount);

-- 分組彙總:每組產生兩個結果集 (明細 + 彙總單列)
SELECT id, amount FROM sales ORDER BY region COMPUTE SUM(amount) BY region;
  • 必須搭配 ORDER BY 使用。
  • 結果集格式特殊:一般用戶端難以處理,現代應用**不建議使用**,改用 GROUP BY、ROLLUP、GROUPING SETS 或應用層計算。

現代替代方案

-- 取代 COMPUTE BY
SELECT region, id, amount,
       SUM(amount) OVER (PARTITION BY region) AS region_total
FROM sales
ORDER BY region, id;

-- 或使用 GROUPING SETS
SELECT region, id, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region, id), (region), ())
ORDER BY region, id;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved