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

創意 SQL 實用技巧集 (一):複製表、拷貝資料、外聯接、定時提醒、刪除孤立資料、複雜同步查詢

     編輯:關於SqlServer

技巧 1:僅複製表結構 (不含資料)


SELECT * INTO NewTable FROM OldTable WHERE 1 <> 1;
-- 或
SELECT TOP 0 * INTO NewTable FROM OldTable;

WHERE 1<>1 條件永假,僅複製結構;TOP 0 同理。適用 SQL Server / Access。

技巧 2:拷貝資料 (指定欄位對應)


INSERT INTO TargetTable (ColA, ColB, ColC) 
SELECT ColD, ColE, ColF FROM SourceTable;

明確列出欄位清單,避免結構變更導致錯誤。

技巧 3:顯示文章、發文者與最後回覆時間


SELECT a.Title, a.UserName, b.LastReply
FROM ForumTable a
JOIN (
    SELECT Title, MAX(AddDate) AS LastReply
    FROM ForumTable
    GROUP BY Title
) b ON a.Title = b.Title;

衍生表先聚合每主題最新回覆,再聯接主表取得發文者。

技巧 4:左外聯接標準寫法


SELECT a.ColA, a.ColB, a.ColC, b.ColC, b.ColD, b.ColF
FROM TableA a
LEFT OUTER JOIN TableB b ON a.ColA = b.ColC;

保留左表所有列,右表無對應為 NULL。

技巧 5:行程提前 5 分鐘提醒


SELECT * FROM Schedule 
WHERE DATEDIFF(minute, StartTime, GETDATE()) > 5;

DATEDIFF 計算分鐘差,大於 5 表示已進入提醒窗口。注意:DATEDIFF 僅比較邊界,精確提醒需加上秒級判斷。

技巧 6:刪除主表中已無對應明細的孤立資料


DELETE FROM MainTable 
WHERE NOT EXISTS (SELECT 1 FROM DetailTable WHERE MainTable.ID = DetailTable.MainID);

NOT EXISTS 配合 SELECT 1 效能優於 NOT IN (尤其含 NULL 時)。

技巧 7:複雜跨月庫存同步查詢 (動態 SQL + 外聯接)


SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM Table1 A
JOIN (
    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
    LEFT JOIN (
        SELECT NUM, UPD_DATE, STOCK_ONHAND
        FROM Table2
        WHERE TO_CHAR(UPD_DATE, 'YYYY/MM') = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01', 'YYYY/MM/DD') - 1, 'YYYY/MM')
    ) Y ON X.NUM = Y.NUM
    WHERE X.INBOUND_QTY + NVL(Y.STOCK_ONHAND, 0) <> X.STOCK_ONHAND
) B ON A.NUM = B.NUM;

Oracle 語法範例:比對本月與上月庫存快照,找出進貨量 + 上月結存 ≠ 本月結存的異常單據。展示:動態月份計算、左外聯接保留無上月資料項目、NVL 處理 NULL、條件過濾異常。

結語

七個技巧涵蓋 DDL/DML 基礎操作、外聯接應用、日期運算、資料清理、複雜業務同步邏輯。建議收藏並根據實際資料庫平台 (SQL Server/Oracle/PostgreSQL) 語法微調後套用。

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