SQL的語句小筆記(2)

SQL的語句小筆記

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

MIN(), MAX(), AVG(), SUM(), COUNT() 這些為Aggregate Functions

SELECT [COLUMN1] FROM [TABLE] GROUP BY [COLUMN1]
只顯示[COLUMN1]的資料, 並將[COLUMN1]重複的資料當作一筆資料(當有兩條[COLUMN1]為1及一條[COLUMN1]為2的資料時, 此句的結果只會有兩筆資料)
上述的MIN(), MAX(), AVG(), SUM(), COUNT()如要再顯示其他Column就須要與GROUP BY一同使用
    例(SELECT SUM([COLUMN1]), [COLUMN2] FROM [TABLE] GROUP BY [COLUMN2])
而完整的句式為 (SELECT ... FROM ... WHERE ... GROUP BY ... ORDER BY ...)
SELECT COUNT([COLUMN1]), [COLUMN2] FROM [TABLE] GROUP BY [COLUMN2] HAVING COUNT([COLUMN1]) > 3 HAVING與WHERE用處相同, 但針對上述的Aggregate Functions使用
SELECT [COLUMN1] FROM [TABLE] WHERE EXISTS (SELECT [COLUMN2] FROM [TABLE2])
顯示所有在[TABLE2]內有存在的[TABLE]資料


SELECT * INTO [NEW_TABLE] FROM [TABLE]
將[TABLE]內的資料新增到[NEW_TABLE]中, 其SELECT用法與基本相同

    *此句會新增一個新Table [NEW_TABLE]

INSERT INTO [TABLE2] SELECT * FROM [TABLE]
將[TABLE]的資料新增到[TABLE2]中
INSERT INTO [TABLE2]([COLUMN1], [COLUMN2]) SELECT [COLUMN1], [COLUMN2] FROM [TABLE]
將[TABLE]的[COLUMN1]及[COLUMN2]資料新增到[TABLE2]中的[COLUMN1]及[COLUMN2]中

    *以上兩句(INSERT INTO)只新增資料到Table中    

SELECT (CASE WHEN [COLUMN1] > 1 THEN 'Greater Than 1' WHEN [COLUMN1] = 1 THEN 'Equals To 1' ELSE 'Smaller Than 1' END) FROM [TABLE]
此句可用於任何有Column的位置, 用作於一些條件定義
    
--SELECT ...
'--'兩個橫線代表此句不會被運行(Execute)
/*......*/
被'/*'及'*/'包的句子不會被運行(Execute)

**對於一些會對資料(Data)有重大影響的句子(如Update及Delete), 通常用Comments包起避免誤行, 只在運行時Highlight該行

-Joins:
JOIN 的類型大慨的有INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN
以下以[TABLE1]為JOIN前的Table及[TABLE2]為JOIN後的Table

  • INNER JOIN只顯示根據ON的條件在兩個Table都存在的資料
  • LEFT JOIN顯示[TABLE1]所有資料並根據ON的條件顯示在[TABLE2]的資料, 如資料只存於[TABLE1], 在顯示[TABLE2]的資料時會顯示為NULL
  • RIGHT JOIN顯示[TABLE2]所有資料並根據ON的條件顯示在[TABLE1]的資料, 如資料只存於[TABLE2], 在顯示[TABLE1]的資料時會顯示為NULL
  • FULL OUTER JOIN顯示所有在[TABLE1]及[TABLE2]的資料

實作JOIN:
SELECT [TABLE].[COLUMN1], [TABLE2].[COLUMN1], [TABLE2].[COLUMN2]     FROM [TABLE]      INNER JOIN [TABLE2] ON [TABLE].[COLUMN3] = [TABLE2].[COLUMN3]
上句將[TABLE]及[TABLE2]連結一起, 而條件是[TABLE]的[COLUMN3]等同[TABLE2]的[COLUMN3], 而結果會顯示[TABLE]的[COLUMN1], [TABLE2]的[COLUMN1]及[TABLE2]的[COLUMN2]

-Stored Procedures(Sp):
Stored Procedures通常為一段已編好的Script(不只為SELECT), 同時可接受不同的數值可用於WHERE等的條件上
在運行(Execute)一條Sp時需用到EXEC
    例 EXEC sp_GetTable1Results @Value1 = 'Apple'
    上句中@Value1用於接收數值, 同時傳到Sp當中作運算
    在與程式交流時常以Sp接收數據
建立Sp的例子
CREATE PROCEDURE sp_GetTable1Results
  @Value1 nvarchar(30)     
AS         
  SELECT * FROM [TABLE] WHERE [COLUMN1] = @Value1     
GO;


CREATE TABLE [TABLE] ([COLUMN1] [datatype], [COLUMN2] [datatype])
建立新的Table
    例: CREATE TABLE [TABLE] ([USER_NAME] nvarchar(50), [USER_PASSWORD] nvarchar(100))
ALTER TABLE [TABLE] ADD [COLUMN3] [datatype]
加新的Column到[TABLE]中
    例: ALTER TABLE [TABLE] ADD [COLUMN3] int;
ALTER TABLE [TABLE] DROP [COLUMN3]
刪除[TABLE]中現有Column [COLUMN3]
    例: ALTER TABLE [TABLE] DROP [COLUMN3];
ALTER TABLE [TABLE] ALTER [COLUMN3] [datatype]
更改[TABLE]中現有Column [COLUMN3]的DataType
    例: ALTER TABLE [TABLE] ALTER [COLUMN3] nvarchar(20);
DROP TABLE [TABLE]
刪除整個[TABLE]
TRUNCATE TABLE [TABLE]
刪除[TABLE]內所有資料, 但保留[TABLE]