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

經典 SQL 語句精選:從菜鳥到高手的進階秘籍

     編輯:關於SqlServer

靈活運用 SQL 語句是資料庫開發者進階的關鍵。本文收錄多個實戰常見場景的經典語句,涵蓋複製表結構、資料遷移、外部連接、排程提醒、關聯刪除、複雜統計等,助您快速解決棘手需求。

1. 僅複製表結構(不含資料)

SELECT * INTO 新表 FROM 舊表 WHERE 1 <> 1;

WHERE 1 <> 1 恆為假,僅複製結構。

2. 複製資料(指定欄位對應)

INSERT INTO 目標表 (欄位A, 欄位B, 欄位C)
SELECT 欄位D, 欄位E, 欄位F FROM 來源表;

3. 顯示文章標題、發文者、最後回覆時間

SELECT a.title, a.username, b.adddate
FROM table a,
     (SELECT MAX(adddate) AS adddate FROM table WHERE table.title = a.title) b;

4. 左外部連接查詢

SELECT a.欄位1, a.欄位2, a.欄位3, b.欄位C, b.欄位D, b.欄位F
FROM 表A a LEFT OUTER JOIN 表B b ON a.欄位1 = b.欄位C;

5. 排程提前 5 分鐘提醒

SELECT * FROM 排程表
WHERE DATEDIFF(minute, 開始時間, GETDATE()) > 5;

6. 刪除主表中已無對應副表記錄的資料

DELETE FROM 主表
WHERE NOT EXISTS (SELECT 1 FROM 副表 WHERE 主表.主鍵 = 副表.外鍵);

7. 當月與上月庫存變動對比(Oracle 語法)

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1 A,
     (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE AS PREV_UPD_DATE
      FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
            FROM TABLE2
            WHERE TO_CHAR(UPD_DATE, 'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
           (SELECT NUM, UPD_DATE, STOCK_ONHAND
            FROM TABLE2
            WHERE TO_CHAR(UPD_DATE, 'YYYY/MM') = TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1), 'YYYY/MM')) Y
      WHERE X.NUM = Y.NUM(+)
        AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND, 0) <> X.STOCK_ONHAND) B
WHERE A.NUM = B.NUM;

示範 Oracle 外部連接 (+)、日期截斷、NVL 空值處理等技巧。

8. 排除學生資料表中已存在的學生(含動態參數)

SELECT * FROM 學生資訊表
WHERE NOT EXISTS (SELECT 1 FROM 學生表 WHERE 學生資訊表.id = 學生表.id)
  AND 系名稱 = @部門參數
  AND 專業名稱 = @專業參數
ORDER BY 性別, 生源地, 高考總成績;

9. 全年各單位電話費統計(橫向欄位輸出)

SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
       SUM(DECODE(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
       SUM(DECODE(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FEB,
       ...
FROM 電話費定額表 a, 電話費清單表 b
WHERE ... 關聯條件 ...
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy');

使用 DECODE/CASE 實現行轉列(Pivot),適用於報表輸出。

進階技巧總結

  • CTE (Common Table Expression): 簡化複雜子查詢,提升可讀性(SQL Server 2005+、PostgreSQL、Oracle 11g+)。
  • Window Functions: ROW_NUMBER()、LAG()、LEAD() 解決排序、同比、環比需求。
  • MERGE (UPSERT): 單一語句完成「存在則更新,不存在則插入」。
  • 動態 SQL: 搭配參數化執行,防止注入並處理靈活條件。

這些經典語句涵蓋 DDL、DML、查詢、統計等核心場景。建議收藏並在實際專案中嘗試改寫,逐步建立自己的 SQL 模式庫,加速開發並減少錯誤。

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