MSSQL
SQL 分類:
DDL - 定義 (CREATE,ALTER,DROP,DECLARE)
DML - 操作 (SELECT,DELETE,UPDATE,INSERT)
DCL - 控制 (GRANT,REVOKE,COMMIT,ROLLABACK)
基礎語法:
建立資料庫
CREATE DATABASE database_name
刪除資料庫
DROP DATABASE database_name
備份 sql server
建立 備份資料的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'C:\mssal7backup\MyNwind_1.dat'
開始 備份
BACKUP DATABASE pubs TO table_name
建立資料表
CREATE TABLE table_name ( column1 type1 [ not null ] [ primary key ] , column2 type 2 [ not null ] , ... )
根據已有的資料表建立新的資料表
A:CREATE TABLE table_name_new LIKE table_name_old (使用舊表建立新表)
B:CREATE TABLE table_name_new AS SELECT column1, column2, ... FROM table_name_old DEFINITION ONLY (使用舊表部份欄位建立新表,不加 DEFINITION ONLY 會連資料一起複製)
刪除 新的 資料表
DROP TABLE table_name
增加一列
ALTER TABLE table_name ADD COLUMN column_name type
ps.列增加後不能刪除。DB2中增加列後不能改變資料型態,唯一能改變的是增加 varchar 型態的長度。
增加主鍵
ALTER TABLE table_name ADD PRIMARY KEY ( column_name )
刪除主鍵
ALTER TABLE table_name DROP PRIMARY KEY ( column_name )
建立索引
CREATE [ UNIQUE ] INDEX index_name ON table_name (column_name1, column_name2, ... )
ps.UNIQUE 唯一,資料不重覆
刪除索引
DROP INDEX index_name
ps.索引是不可更改的,想更改必須刪除重新建立。
建立視界
CREATE VIEW view_name AS select_statement
刪除視界
DROP VIEW view_name
簡單常用語法:
選擇
SELECT * FROM table_name WHERE 範圍
新增
INSERT INTO table_name (column1, column2, ... ) VALUES (value1, value2, ... )
刪除
DELETE FROM table_name WHERE 範圍
更新
UPDATE table_name SET column1 = value1, column2 = value 2, ... WHERE 範圍
模糊選擇
SELECT * FROM table_name WHERE column LIKE '%value%'
排序
SELECT * FROM table_name ORDER BY column1, column2, ... [ DESC ]
ps.DESC 是由大到小排序,不設是由小到大排序
總筆數
SELECT COUNT * AS count_name FROM table_name
加總
SELECT SUM ( column_name ) AS sum_name FROM table_name
平均
SELECT AVG ( column_name ) AS avg_name FROM table_name
最大
SELECT MAX ( column_name ) AS max_name FROM table_name
最小
SELECT MIN ( column_name ) AS min_name FROM table_name
其他查詢函式:
UNION
UNION 通過組合其他兩個結果資料表,並消去資料表中任何重覆的資料,而產生的結果資料表。
當 ALL 和 UNION 一起使用時 ( 即 UNION ALL ),不消除重覆的資料。
兩種情況下,所產生的資料表,每一行不是來 結果資料表1 就是來自 結果資料表2。
EXCEPT
EXCEPT 將所有在 table1 中但不在 table2 中的行,並消除所有動覆的資料,而產生的結果資料表。
當 ALL 和 EXCEPT 一起使用時 ( 即 EXCEPT ALL ),不消除重覆的資料。
INTERSECT
INTERSECT 將包括 table1 和 table2 中都有的行,並消除所有重覆的資料,而產生的結果資料表。
當 ALL 和 INTERSECT 一起使用時 ( 即 INTERSECT ALL ),不消除重覆的資料。
ps. 查詢時,結果資料表的欄位必需相同。
外部連接查詢:
LEFT OUTER JOIN
左連接:結果集合包含連接表的設定欄位,也包括左連接資料表的所有欄位
SELECT table1.column1, table1.column2, table1.column3, table2.column3, table2.column5 FROM table1 LEFT OUT JOIN table2 ON table1.column1 = table2.column3
RIGHT OUTER JOIN
右連接:結果集即包含連接的設定欄位,也包括右連接資料表的所有欄位
FULL OUTER JOIN
全連接:不只是包括摙接資料表所設定欄位,也包括兩個資料表中的所有欄位
常用語法
複製資料表 ( 只複製 結構,欄位名稱 ) ( Access 可用)
方法一:SELECT * INTO table_name_new FROM table_name_old WHERE 1<>1
方法二:SELECT TOP 0 * INTO table_name_new FROM table_name_old
複製資料表 ( 包含 資料,欄位名稱,結構) ( Access 可用)
INSERT INTO table_name_new ( column1, column2, column3 ) SELECT column4, column5, column6 FROM table_name_old
跨資料庫的複製資料表 ( Access 可用)
INSERT INTO table_name_new ( column1, column2, column3 ) SELECT column4, column5, column6 FROM table_name_new IN '資料庫的絕對路徑' WHERE 條件
子查詢
SELECT column1, column2, column3 FROM table1 WHERE table1 IN ( SELECT column4 FROM table2)
SELECT column1, column2, column3 FROM table1 WHERE table2 IN (1, 2, 3)
視界查詢
SELECT * FROM ( SELECT column1, column2, column3 FROM table1 ) table_name_new WHERE table_name_new.column1 > 1
between 的用法
SELECT * FROM table_name WHERE column BETWEEN value1 AND value2
in 的用法
SELECT * FROM table_name WHERE column [ NOT ] IN ( value1, value2, value3 )
兩張關聯表,刪除主表中已經在副表中沒有的訊息
DELETE FROM table1 WHERE NOT EXISTS ( SELECT * FROM table2 WHERE table1.column1 = table2.column1 )
前10筆資料
SELECT TOP 10 * FROM table_name WHERE 範圍
選擇在每一組 column2 值相同的資料中,對應 column1 值最大記錄的所有資料
SELECT column1, column2 FROM table_name ta WHERE column1 = ( SELECT MAX ( column1 ) FROM table_name tb WHERE tb.column2 = ta.column2 )
包含所有在 table1 中,但不在 table2 和 table3 中,並消除所有重覆的資料,產生的結果資料表
( SELECT column FROM table1 ) EXCEPT ( SELECT column FROM table2 ) EXCEPT ( SELECT column FROM table3 )
隨機取出 10 筆資料
SELECT TOP 10 * FROM table_name ORDER BY NEWID()
隨機選擇資料
SELECT NEWID()
刪除重覆資料
DELETE FROM table_name WHERE column NOT IN ( SELECT MAX ( column ) FROM table_name GROUP BY column2, column3, .... )
case 的用法
SELECT
CASE column WHER value THEN data1 ELSE data2 END
FROM table_name
初始化資料表
TRUNCATE TABLE table_name
選擇 10 到 15 的資料
SELECT TOP 5 * FROM ( SELECT TOP 15 * FROM table_name ORDER BY column ASC ) table_name_new ORDER BY column DESC