SqlServer常用命令

一、SQL基礎

1.查詢
SELECT 列名稱 FROM 表名稱

2.去重
SELECT DISTINCT 列名稱 FROM 表名稱

3.WHERE 子句
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

4.AND 和 OR 運算符
SELECT * FROM User WHERE UserName='張三' AND UserID=10

5.ORDER BY 語句
SELECT OrgID, OrgName FROM Organization ORDER BY Company

6.INSERT
INSERT INTO 表名稱 VALUES (值1, 值2,....)

7.Update 
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

8.DELETE
DELETE FROM 表名稱 WHERE 列名稱 = 值

二、提升

1.IN 操作符多個值查詢
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

2.INNER JOIN 返回table_name1所有數據
SELECT column_name(s) 
FROM table_name1
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

3.INNER JOIN 返回table_name2 和table_name1 交集數據
SELECT column_name(s) 
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

4.RIGHT JOIN 返回table_name2所有數據
SELECT column_name(s) 
FROM table_name1
RIGHT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

5.FULL JOIN 
SELECT column_name(s) 
FROM table_name1
FULL  JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

6.SELECT INTO  複製表數據

SELECT * INTO table_name1  FROM table_name2

7.LIKE 模糊查詢
SELECT column_name FROM table_name WHERE column_name LIKE '張%'

8.BETWEEN 某一個字段的值在哪個區間

SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2

9.TOP 查詢數據庫前幾條數據

SELECT TOP 10 * FROM table_name

10.IS NULL/IS NOT NULL 查詢某一個字段不爲null

SELECT TOP 10 * FROM users where users_name is not null 

SELECT TOP 10 * FROM users where users_name is  null 

三、函數

1.COUNT 查詢表中總共有多少數據
SELECT COUNT( * )   FROM table_name

2.AVG 查詢平均值
SELECT AVG(column_name) FROM table_name

3.MAX 查詢某一字段最大值
SELECT MAX(column_name) FROM table_name

3.Min 查詢某一字段最小值
SELECT Min(column_name) FROM table_name

4.SUM  對某一字段求和
SELECT SUM(column_name) FROM table_name

5.HAVING 子句 一般用於去重

SELECT Customer,SUM(qty) FROM Orders GROUP BY Customer HAVING SUM(qty)<100

6.FORMAT 時間格式轉化

SELECT FORMAT(column_name,format) FROM table_name

四、實戰

1.SELECT

1.FOR XML 將多條數據合併爲一條數據

	SELECT d.DriverName+','
	FROM dbo.TaskDriver td WITH(NOLOCK)    
	INNER JOIN dbo.Driver d WITH(NOLOCK) ON td.DriverID=d.DriverID   
	WHERE td.IsValid=1 AND td.TaskID=384186 FOR  XML PATH('')

2.FOR XML 加子查詢加INNER JOIN 聯合使用

	SELECT A.RoleID,r.RoleName,LEFT(ColumnStr,LEN(ColumnStr)-1) AS ColumnStr 
	FROM(	
		SELECT pr.RoleID  
			,  (SELECT ColumnName+',' 
				FROM PageColumnSetting p3 
				WHERE p3.IsValid=1 AND p3.ParentID>0  
				AND NOT EXISTS(
					SELECT 1 FROM PageColumnSetting p4 
					WHERE p4.IsValid=1 AND p4.ParentID=p3.ID
				)
			FOR XML PATH('')) AS ColumnStr
		FROM PageColumnSetting p1 
		INNER JOIN PageRoleDim pr ON p1.ID=pr.ColumnID AND pr.IsValid=1
		WHERE p1.IsValid=1 AND p1.ParentID>0  
		AND NOT EXISTS(
			SELECT 1 FROM PageColumnSetting p2 
			WHERE p2.IsValid=1 AND p2.ParentID=p1.ID
		)
		GROUP BY pr.RoleID
	)A
	INNER JOIN dbo.[Role] r  WITH(NOLOCK) ON A.RoleID=r.RoleID AND r.IsValid =1

3.FULL JOIN 將倆條數據合併爲同一條數據

	SELECT ISNULL(b1.TaskID,b2.TaskID) AS TaskID,ISNULL(b1.BookingID,b2.BookingID) AS BookingID, ISNULL(b1.BookingType,b2.BookingType) AS BookingType,
		   b1.OperationType AS PickOperationType,b1.FirstUpdateConfirmTime AS PickRollbackUpdateConfirmTime ,b1.FirstUpdateReasonType AS PickRollbackUpdateReason, --回退  
		   b2.OperationType AS UnloadOperationType,b2.FirstUpdateConfirmTime AS PickUpdateConfirmTime ,b2.FirstUpdateReasonType AS PickUpdateReason --修改提貨/卸貨
	FROM BookingRecordOperation b1
	FULL JOIN BookingRecordOperation b2 ON  b1.BookingID=b2.BookingID AND b1.TaskID=b2.TaskID AND b2.OperationType=2
	AND   b1.OperationType=1

2.Update

1.更新#PageData表中不存在的數據

	UPDATE pd
	SET pd.IsDump = 1
	FROM #PageData pd 
	WHERE EXISTS(
		SELECT 1 
		FROM dbo.DeliveryDetail dd WITH(NOLOCK)
		WHERE dd.DeliveryNo = pd.DeliveryNo 
		AND dd.TotalNum <> dd.ResidueNum 
		AND dd.IsValid = 1
	) 
	AND pd.CurrentOrgID = pd.SendOrgID

2.Update和INNER JOIN配合使用

	UPDATE pd 
	SET pd.TotalVolume = a.TotalVolume,
		pd.TotalWeight = a.TotalWeight,
		pd.NumberOfUnits = a.NumberOfUnits,    
		pd.RevenueTon = dbo.GetRevenueTon(a.TotalVolume,a.TotalWeight)
	FROM #PageData pd
	INNER JOIN (    
		SELECT dt.DeliveryNo,
				SUM(dt.ResidueNum) AS NumberOfUnits,    
				SUM((dt.Weight/dt.TotalNum)*dt.ResidueNum) AS TotalWeight,    
				SUM((dt.Volume/dt.TotalNum)*dt.ResidueNum) AS TotalVolume   
		FROM dbo.DeliveryDetail dt WITH(NOLOCK)    
		INNER JOIN #PageTemp pt ON pt.DeliveryNo = dt.DeliveryNo     
		WHERE dt.IsValid = 1 
		AND dt.TotalNum > 0
		GROUP BY dt.DeliveryNo    
	) a ON a.DeliveryNo = pd.DeliveryNo
	WHERE pd.DeliveryNo NOT IN(SELECT * FROM #XqDeliveryNo)
	AND pd.SendOrgID = pd.CurrentOrgID	

3.表/字段

新增表
create table tablename(col1 type1 [not null] [primary key],col2 type2 [not null],..)

刪除表
drop table tablename

修改表
sp_rename tablename,newtablename  //修改表名稱

新增字段:
ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL

ALTER TABLE [表名] ADD [字段名] INT NOT NULL DEFAULT (0) //添加有默認值的

刪除字段:
ALTER TABLE [表名] DROP COLUMN [字段名]

修改字段:
ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL

ALTER TABLE [表名] ADD DEFAULT [默認值] FOR [字段名] //修改默認值

4.索引(增刪改查)

新增:
1、一般的創建語法:
CREATE (unique/cluster) INDEX<索引名> ON <表名>
【拓展】索引的類型有UNIQUE(唯一索引)、CLUSTERED(建立聚集索引)、NONCLUSTERED(建立非聚集索引)、Index_property(索引屬性)。

UNIQUE索引既可以採用聚集索引結構,也可以採用非聚集索引的結構,如果不指明採用的索引結構,則SQL SERVER系統默認爲採用非聚集索引結構。

刪除:
1、一般的刪除語法
drop index<索引名>

2、簡要的刪除語法
drop index [索引名]

3、刪除某張表中的索引
drop index [索引名] ON [表名]

修改:
1、使用系統存儲過程修改索引名稱:
EXEC sp_rename [原名稱],[新名稱],[index]
【備註】sp_rename不止可以修改索引名稱,同時可以修改表名、列名和類型名稱。

查:
1、使用系統存儲過程查詢:
EXEC sp_helpindex [表名稱]

2、使用系統的視圖查詢:
SELECT * FROM sysindexes WHERE name = ‘索引名稱’

【常用的操作】
1、判斷是否存在該索引,存在則刪除
if exists(select * from sysindexes where name ‘soyn’)
drop index [soyn] on test1

點贊👍 關注❤ 不迷路

如果你覺得我的文章對你有幫助話,歡迎點贊👍 關注❤️ 分享👥!
如果本篇博客有任何錯誤,請批評指教,不勝感激!

極客大本營

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章