SQL的語句小筆記(1-入門)

SQL的語句小筆記

以SQL Server / MS Access Syntax為參考(即Microsoft Database Studio中會用到的句式)

以下所有句式以SQL Server / MS Access Syntax為參考(即Microsoft Database Studio中會用到的句式)
以下"資料"代表Rows
CRUD (Create, Read, Update, Delete) 
NULL 代表沒有數值, NULL不可用=, <>, >, <等的對比運算子(comparison operators)作比較, 只能使用IS / IS NOT

SELECT * FROM [TABLE]
選擇在[TABLE]內的所有資料
SELECT [COLUMN1], [COLUMN2] FROM [TABLE]
選擇在[TABLE]內的資料及只顯示[COLUMN1]及[COLUMN2]
SELECT ... FROM [TABLE] WHERE ([COLUMN1] = 1)
只顯示[TABLE]內[COLUMN1]數值是1的資料
SELECT ... FROM [TABLE] WHERE ([COLUMN1] = 1 AND [COLUMN2] = 2)
只顯示[TABLE]內[COLUMN1]數值是1及[COLUMN2]數值是2的資料
SELECT ... FROM [TABLE] WHERE ([COLUMN1] = 1 OR [COLUMN2] = 2)
只顯示[TABLE]內[COLUMN1]數值是1或[COLUMN2]數值是2的資料
SELECT ... FROM [TABLE] WHERE ([COLUMN1] = 1 OR ([COLUMN2] = 2 AND [COLUMN3] <> 3)
只顯示[TABLE]內[COLUMN1]數值是1或當[COLUMN2]數值是2及[COLUMN3]數值不是3的資料
SELECT ... FROM [TABLE] WHERE ([COLUMN1] IS NOT NULL)
只顯示[TABLE]內[COLUMN1]數值不是NULL的資料(有數值)
SELECT ... FROM [TABLE] ORDER BY [COLUMN1]
顯示[TABLE]內的資料並根據[COLUMN1]排序
SELECT ... FROM [TABLE] ORDER BY [COLUMN1] ASC
顯示[TABLE]內的資料並根據[COLUMN1]由小至大排序(Ascending)
SELECT ... FROM [TABLE] ORDER BY [COLUMN1] DESC
顯示[TABLE]內的資料並根據[COLUMN1]由大至小排序(Descending)
SELECT ... FROM [TABLE] ORDER BY [COLUMN1] ASC, [COLUMN2] DESC
顯示[TABLE]內的資料並先根據[COLUMN1]由小至大排序再根據[COLUMN2]由大至小再排序
([COLUMN2]的排序只會在[COLUMN1]的數值相同時再排序相同數值的資料)
SELECT TOP 50 * FROM [TABLE]
顯示[TABLE]內的頭50條資料
SELECT TOP 50 PERCENT * FROM [TABLE]
顯示[TABLE]內的頭50%條資料
 


*以下為基本用法, 只能顯示有使用MIN/MAX/AVG/SUM/COUNT的Column, 如要顯示其他Column須加上GROUP BY使用


SELECT MIN([COLUMN1]) FROM [TABLE]
取得[TABLE]內[COLUMN1]最小的數值(只顯示[COLUMN1])
SELECT MAX([COLUMN1]) FROM [TABLE]
取得[TABLE]內[COLUMN1]最大的數值(只顯示[COLUMN1])
SELECT AVG([COLUMN1]) FROM [TABLE]
取得[TABLE]內[COLUMN1]的平均數(只顯示[COLUMN1])
SELECT SUM([COLUMN1]) FROM [TABLE]
取得[TABLE]內[COLUMN1]的總和數(只顯示[COLUMN1])
SELECT COUNT([COLUMN1]) FROM [TABLE]
取得[TABLE]內的資料數(即有多少行資料), 通常與WHERE一同使用



SELECT [COLUMN1] AS MAX_COL1 FROM [TABLE]
顯示[TABLE]內[COLUMN1]的數值及在結果的Header顯示MAX_COL1(而非COLUMN1)
SELECT ... FROM [TABLE] WHERE ([COLUMN1] LIKE '%AA%')
只顯示[TABLE]內[COLUMN1]數值中包括AA的資料(%代表在該位置可有數值, _代表一個單位的數值)
    以'%AA%'為例, 'BAAC', 'AAC', 'BAA', 'AA', 'aa'都會被選取顯示
    以'_A'為例, '1A', '2A', 'CA'都會被選取顯示
    以'_A%'為例, '1ACBA', '2AC', 'AAD'都會被選取顯示

    LIKE中可使用的字元(Wildcard Characters)(以SQL Server為參考): %, _, [], ^, -
        %  任何字元或無字元
        _  任何單一字元(一位字元)
        [] 在[]內任何單一字元(例[oa], 結果可為o或a)
        ^  與[]一同使用, 不在[]內任何字元
        -  與[]一同使用, 在一段範圍中的任何字元(例[a-c],  結果可為a, b或c)


SELECT ... FROM [TABLE] WHERE ([COLUMN1] IN (1, 2, 3))
只顯示[TABLE]內[COLUMN1]數值是1/2/3的資料
SELECT ... FROM [TABLE] WHERE ([COLUMN1] NOT IN (1, 2, 3))
只顯示[TABLE]內[COLUMN1]數值不是1/2/3的資料
SELECT ... FROM [TABLE] WHERE ([COLUMN1] IN (SELECT [COLUMN1] FROM [TABLE2]))
只顯示[TABLE]內[COLUMN1]數值是等於(SELECT [COLUMN1] FROM [TABLE2])結果內的數值(IN後的SELECT只選取了[TABLE2]內的[COLUMN1])
SELECT ... FROM [TABLE] WHERE ([COLUMN1] BETWEEN 1 AND 3)
只顯示[TABLE]內[COLUMN1]數值落於1及3的範圍內(即1-3)

BETWEEN也可用於字元上, 例 (BETWEEN 'A' AND 'Z')
也可用於日期上, 例 (BETWEEN #01/07/1996# AND #31/07/1996#) 或 (BETWEEN '1996-07-01' AND '1996-07-31')


SELECT [COLUMN1] + ',' + [COLUMN2] FROM [TABLE2]
將[COLUMN1]與[COLUMN2]放於同一個Column中顯示, 並在兩個Column中加入','
SELECT CONCAT([COLUMN1],',',[COLUMN2]) FROM [TABLE]
與上句同一效果
SELECT ISNULL([COLUMN1], 0) FROM [TABLE]
檢查[COLUMN1]是否為NULL, 是的話返回0
*在組合/Concat多個Column時, 如有NULL的話, 結果會為NULL


INSERT INTO [TABLE]([COLUMN1], [COLUMN2], [COLUMN3])      
VALUES ([VALUE1], [VALUE2], [VALUE3])

插入一條[COLUMN1]=[VALUE1], [COLUMN2]=[VALUE2], [COLUMN3]=[VALUE3]的資料到[TABLE]中([TABLE]後COLUMN的排序與VALUES後的VALUE排序是對應的)


UPDATE [TABLE] SET [COLUMN1]=[VALUE1], [COLUMN2]=[VALUE2] WHERE [COLUMN3]=3
更新[TABLE]內[COLUMN3]等於3的資料的[COLUMN1]為[VALUE1]及[COLUMN2]為[VALUE2]
    (WHERE並非必入, 但大多情況下都會使用)

*進行UPDATE請先用SELECT及WHERE去驗查將會改動的資料是你想要更新的, 避免更新到不應更新的資料
**沒有WHERE時, 所有資料都會被更新

DELETE FROM [TABLE] WHERE [COLUMN1]=1
刪除在[TABLE]內所有[COLUMN1]的數值是1的資料

*在進行DELETE前建議使用SELECT驗查會被改動的資料
**沒有WHERE時, 所有資料都會被改動