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

經典 SQL 語句大全:50 題練習題解析、基礎/進階/技巧分類參考

     編輯:關於SqlServer

第一部分:50 題經典練習題 (學生-課程-成績-教師模型)

資料結構:
`Student(S#, Sname, Sage, Ssex)`
`Course(C#, Cname, T#)`
`SC(S#, C#, score)`
`Teacher(T#, Tname)`

精選高頻考點解析

題號核心考點關鍵技巧
1, 8同一表多次自聯結比較不同課程成績別名 + 子查詢/自聯結
2, 24, 33分組聚合 + HAVING 篩選AVG/COUNT/SUM + HAVING
3, 17, 22多表聯結 + 條件聚合 / 行轉列LEFT JOIN + CASE WHEN / PIVOT 思想
5, 7, 47NOT IN / NOT EXISTS 反向關聯子查詢排除
6, 12EXISTS 相關子查詢半連結語意
13UPDATE 含子查詢計算平均值相關子查詢更新
14關係除法 (Relational Division)GROUP BY + HAVING COUNT = 總數
19, 20, 23條件聚合 (CASE WHEN 在聚合函數中)單掃描多指標
25, 43分組 Top-N相關子查詢 TOP / ROW_NUMBER() (2005+)
48多條件篩選後聚合子查詢 + GROUP BY

第二部分:基礎 DDL/DML 快速參考

-- 建庫/刪庫
CREATE DATABASE db_name; DROP DATABASE db_name;

-- 建表/刪表/改表
CREATE TABLE t (id INT PRIMARY KEY, name NVARCHAR(50) NOT NULL);
ALTER TABLE t ADD col INT DEFAULT 0;
ALTER TABLE t ALTER COLUMN col BIGINT;
ALTER TABLE t DROP COLUMN col;
DROP TABLE t;

-- 索引/視圖
CREATE INDEX ix_t_col ON t(col);
CREATE VIEW v AS SELECT id, name FROM t WHERE ...;

-- 基礎增刪改查
INSERT INTO t (id, name) VALUES (1, 'a');
UPDATE t SET name='b' WHERE id=1;
DELETE FROM t WHERE id=1;
SELECT * FROM t WHERE name LIKE N'%關鍵字%';

第三部分:進階查詢運算子與聯結

  • 集合運算:`UNION` (去重), `UNION ALL`, `EXCEPT` (差集), `INTERSECT` (交集)。
  • 外部聯結:`LEFT/RIGHT/FULL OUTER JOIN` 保留單側所有列。
  • 分頁查詢 (SQL 2005+):
    `SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS rn, * FROM t) x WHERE rn BETWEEN @start AND @end;`
    SQL 2012+ 簡潔語法:`ORDER BY id OFFSET @skip ROWS FETCH NEXT @page ROWS ONLY;`

第四部分:實用技巧與系統查詢

需求T-SQL
隨機抽樣 10 列SELECT TOP 10 * FROM t ORDER BY NEWID();
刪除重複列 (保留最大 ID)DELETE t WHERE id NOT IN (SELECT MAX(id) FROM t GROUP BY col1, col2);
查詢所有使用者表SELECT name FROM sys.objects WHERE type='U';
查詢表欄位清單SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('t');
檢查備份檔有效性RESTORE VERIFYONLY FROM DISK='path.bak';
修復資料庫 (允許資料遺失)ALTER DATABASE db SET SINGLE_USER; DBCC CHECKDB(db, REPAIR_ALLOW_DATA_LOSS); ALTER DATABASE db SET MULTI_USER;
跨伺服器查詢 (Linked Server)SELECT * FROM [LinkedSrv].[DB].[dbo].[Table];
字串分割函數 (CSV → 資料列)見下方 Split 函數定義

常用字串分割函數 (SQL 2016 前)

CREATE FUNCTION dbo.Split(@str NVARCHAR(MAX), @sep NCHAR(1))
RETURNS @t TABLE (val NVARCHAR(4000))
AS BEGIN
    DECLARE @pos INT = CHARINDEX(@sep, @str);
    WHILE @pos > 0 BEGIN
        INSERT @t VALUES(SUBSTRING(@str, 1, @pos-1));
        SET @str = SUBSTRING(@str, @pos+1, LEN(@str));
        SET @pos = CHARINDEX(@sep, @str);
    END
    IF @str <> '' INSERT @t VALUES(@str);
    RETURN;
END;

SQL 2016+ 直接使用 `STRING_SPLIT()` (不保證順序) 或 `OPENJSON()` (保持順序)。

第五部分:常用內建函數速查

  • 日期:`GETDATE()`, `DATEADD()`, `DATEDIFF()`, `DATEPART()`, `FORMAT()` (2012+)
  • 字串:`SUBSTRING()`, `REPLACE()`, `STUFF()`, `LEFT/RIGHT()`, `LTRIM/RTRIM()`, `UPPER/LOWER()`
  • 轉換:`CAST()`, `CONVERT()`, `TRY_CAST/CONVERT()` (2012+)
  • 條件:`CASE WHEN`, `IIF()`, `CHOOSE()` (2012+), `COALESCE()`, `ISNULL()`
  • 聚合:`SUM/AVG/MIN/MAX/COUNT`, `CHECKSUM_AGG()`, `BINARY_CHECKSUM()`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved