一、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
點贊👍 關注❤ 不迷路
如果你覺得我的文章對你有幫助話,歡迎點贊👍 關注❤️ 分享👥!
如果本篇博客有任何錯誤,請批評指教,不勝感激!