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

SQL 經典語句大全:從基礎到進階查詢技巧

     編輯:關於SqlServer

SQL 語言分類概覽

SQL 指令主要分為三大類:

  • DDL(資料定義語言):CREATE、ALTER、DROP、DECLARE,用於定義資料庫結構。
  • DML(資料操縱語言):SELECT、DELETE、UPDATE、INSERT,用於操作資料內容。
  • DCL(資料控制語言):GRANT、REVOKE、COMMIT、ROLLBACK,用於權限與交易控制。

基礎操作語句速查

1. 建立與刪除資料庫

CREATE DATABASE database_name;
DROP DATABASE dbname;

2. SQL Server 備份範例

USE master;
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat';
BACKUP DATABASE pubs TO testBack;

3. 資料表建立、修改與刪除

-- 建立新表
CREATE TABLE tabname (
  col1 type1 [NOT NULL] [PRIMARY KEY],
  col2 type2 [NOT NULL], ...
);

-- 依現有表建立新表(結構)
CREATE TABLE tab_new LIKE tab_old;          -- MySQL
CREATE TABLE tab_new AS SELECT col1,col2 FROM tab_old WHERE 1=0;  -- 通用

-- 刪除資料表
DROP TABLE tabname;

4. 欄位與索引管理

  • 新增欄位:ALTER TABLE tabname ADD COLUMN col type;(註:部份資料庫不支援刪除欄位或變更型別)
  • 主鍵操作:ALTER TABLE tabname ADD PRIMARY KEY(col); / DROP PRIMARY KEY(col);
  • 索引操作:CREATE [UNIQUE] INDEX idxname ON tabname(col...); / DROP INDEX idxname;(索引不可更改,需重建)

5. 視圖操作

CREATE VIEW viewname AS SELECT statement;
DROP VIEW viewname;

6. 基礎 CRUD 與彙總函數

SELECT * FROM table1 WHERE condition;
INSERT INTO table1(field1,field2) VALUES(value1,value2);
DELETE FROM table1 WHERE condition;
UPDATE table1 SET field1=value1 WHERE condition;
SELECT * FROM table1 WHERE field1 LIKE '%value1%';
SELECT * FROM table1 ORDER BY field1, field2 [DESC];
SELECT COUNT(*) AS totalcount FROM table1;
SELECT SUM(field1) AS sumvalue FROM table1;
SELECT AVG(field1) AS avgvalue FROM table1;
SELECT MAX(field1) AS maxvalue FROM table1;
SELECT MIN(field1) AS minvalue FROM table1;

進階查詢運算子

  • UNION:合併結果並去除重複;UNION ALL 保留重複。
  • EXCEPT:回傳僅存在於第一個查詢的行;EXCEPT ALL 保留重複。
  • INTERSECT:回傳兩查詢共同的行;INTERSECT ALL 保留重複。

註:參與運算的查詢欄位數、順序、型別必須一致。

外部連結(Outer Join)

  • LEFT OUTER JOIN:包含左表所有行與右表匹配行。
  • RIGHT OUTER JOIN:包含右表所有行與左表匹配行。
  • FULL OUTER JOIN:包含雙方所有行。
SELECT a.a, a.b, a.c, b.c, b.d, b.f
FROM a LEFT OUTER JOIN b ON a.a = b.c;

實用技巧集錦

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

SELECT * INTO b FROM a WHERE 1<>1;
-- 或
SELECT TOP 0 * INTO b FROM a;

2. 複製資料

INSERT INTO b(a, b, c) SELECT d, e, f FROM a;

3. 跨資料庫複製(Access 語法)

INSERT INTO b(a, b, c) SELECT d, e, f FROM b IN '完整路徑\data.mdb' WHERE 條件;

4. 子查詢與 IN 條件

SELECT a,b,c FROM a WHERE a IN (SELECT d FROM b);
SELECT a,b,c FROM a WHERE a IN (1,2,3);

5. 刪除主表中無對應副表資料

DELETE FROM table1
WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.field1 = table2.field1);

6. 分頁查詢(SQL Server 經典寫法)

SELECT TOP 10 b.*
FROM (
  SELECT TOP 20 主鍵, 排序欄位 FROM 表名 ORDER BY 排序欄位 DESC
) a, 表名 b
WHERE b.主鍵 = a.主鍵
ORDER BY a.排序欄位;

7. 取前 N 筆

SELECT TOP 10 * FROM table1 WHERE 條件;

8. 每組最大值對應的完整記錄(如月排行)

SELECT a,b,c FROM tablename ta
WHERE a = (SELECT MAX(a) FROM tablename tb WHERE tb.b = ta.b);

9. 多重 EXCEPT 運算

(SELECT a FROM tableA)
EXCEPT (SELECT a FROM tableB)
EXCEPT (SELECT a FROM tableC);

10. 隨機取樣

SELECT TOP 10 * FROM tablename ORDER BY NEWID();

11. BETWEEN 與 NOT BETWEEN

SELECT * FROM table1 WHERE time BETWEEN time1 AND time2;
SELECT a,b,c FROM table1 WHERE a NOT BETWEEN 值1 AND 值2;

12. 日期提醒範例(提前 5 分鐘)

SELECT * FROM 日程安排
WHERE DATEDIFF('minute', 開始時間, GETDATE()) > 5;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved