SqlServer中 sql語句小結

1.Convert函數 關於日期和字符串轉化操作和其它。

https://www.cnblogs.com/whl4835349/p/5889298.html

2.圖解關聯查詢之間的區別

https://www.cnblogs.com/logon/p/3748020.html

3.我自己的sql語句記錄

關聯合並查詢

SELECT * FROM A INNER JOIN B ON A.Name=B.Name		--A和B交集
GO
SELECT * FROM A FULL JOIN B ON A.Name=B.Name		--A和B並集,未有的記錄的字段值爲NULL
GO
SELECT * FROM A FULL JOIN B ON A.Name=B.Name		--A和B並集,但去掉A和B交集的內容
WHERE A.Id IS NULL OR B.Id IS NULL
GO
SELECT * FROM A LEFT JOIN B ON A.NAME=B.NAME		--A的完全集,B中沒有匹配的值則用NULL取代
GO
SELECT * FROM A LEFT JOIN B ON A.NAME=B.NAME        --A中有,B中沒有的集合
WHERE B.Id IS NULL
GO

--ON 一般是A中通過一個字段連接B的主鍵
-- A LEFT JOIN B   ==   B RIGHT JOIN A

--UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。 
--請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。
--列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
--UNION 只選取記錄,而UNION ALL會列出所有記錄

SELECT Name FROM A UNION SELECT Name FROM B			--相同的值只顯示一次
GO
SELECT Name FROM A UNION ALL SELECT Name FROM B		--列出所有的值,相同的值全要顯示
GO
SELECT * FROM A UNION SELECT * FROM B				--包含兩列(Id,Name)

笛卡爾積
USE TaskTracker
GO
SELECT * FROM A CROSS JOIN B		--笛卡爾積  如果A中有N條記錄,B中有M條記錄,則進行N*M組合
查詢及修改和刪除語句

USE TaskTracker
GO
--ÐÞ¸Ä
UPDATE StudentTable SET 
	TrueName='ÁõÑÕ',
	NickName='СÁõ',
	Evaluate='.net¿ª·¢',
	Birthday='1998-11-10' 
WHERE StudentId=6
GO
SELECT TOP 10 
	a.StudentNumber,
	a.TrueName,
	b.GradeName,
	c.ClassName 
FROM StudentTable a
LEFT JOIN GradeTable b ON a.GradeId=b.GradeId
LEFT JOIN ClassTable c ON a.ClassId=c.ClassId
GO
--ɾ³ý
DELETE FROM StudentTable WHERE StudentId=7
SELECT TOP 10 
	a.StudentNumber,
	a.TrueName,
	b.GradeName,
	c.ClassName 
FROM StudentTable a 
LEFT JOIN GradeTable b ON a.GradeId=b.GradeId 
LEFT JOIN ClassTable c ON a.ClassId=c.ClassId
GO
插入語句  可多條和單條 [最後一條之後不要加逗號]

--學生信息的添加,修改,刪除
INSERT INTO StudentTable
(StudentNumber,TrueName,Gender,Birthday,LastLoginTime,Status,ClassId,GradeId) VALUES
('20190000001','李個' ,	0 , GETDATE(),GETDATE(),1,1,1),
('20190000002','和平' ,	1 , GETDATE(),GETDATE(),1,2,1),
('20190000003','白雲' , 0 , GETDATE(),GETDATE(),1,3,2)


分頁查詢語句

USE TaskTracker
GO
SELECT TOP 10 t.* 
FROM(
	SELECT 
		ROW_NUMBER() OVER (ORDER BY a.StudentNumber DESC) RowNum,
		a.StudentId,
		a.StudentNumber,
		a.TrueName,
		a.Gender,
		a.Birthday,
		b.GradeName,
		c.ClassName
	FROM StudentTable a
	LEFT JOIN GradeTable b ON a.GradeId=b.GradeId
	LEFT JOIN ClassTable c ON a.ClassId=c.ClassId
	
) t WHERE t.RowNum > 0 ORDER BY RowNum
GO
SELECT StudentId,TrueName FROM StudentTable WHERE StudentId!=3
建表語句 及初始化

USE TaskTracker
GO
--學生表
CREATE TABLE StudentTable(
	StudentId		INT NOT NULL PRIMARY KEY IDENTITY(1,1),		--主鍵Id
	StudentNumber	VARCHAR(11) NOT NULL,						--學號
	TrueName		NVARCHAR(20) NOT NULL,						--真實姓名
	NickName		NVARCHAR(20),								--暱稱
	Gender  		TINYINT NOT NULL,							--性別(0男 1女 2未知)
	Birthday		DATE,										--生日(YYYY-MM-DD)
	Evaluate		NVARCHAR(50),								--評價
	LastLoginTime	DATETIME NOT NULL DEFAULT(GETDATE()),		--最後一次登錄時間
	Status			TINYINT NOT NULL DEFAULT(1),				--狀態(0刪除 1正常)
	AddTime			DATETIME NOT NULL DEFAULT(GETDATE()),		--添加時間
	ClassId			INT NOT NULL,								--班級Id(一定要通過Id查,因爲Id是主鍵唯一的,班級編號可能會變化)
	GradeId			INT NOT NULL								--年級Id(一定要通過Id查,因爲Id是主鍵唯一的,年級編號可能會變化)
)
--班級表
CREATE TABLE ClassTable(
	ClassId			INT NOT NULL PRIMARY KEY IDENTITY(1,1),		--主鍵Id
	ClassNumber		CHAR(3) NOT NULL,							--班級編號(例:“1-1”爲1年級1班,“1-2”爲1年級2班)
	ClassName		NVARCHAR(5) NOT NULL,						--班級名稱(例:1年級1班 ,1年級2班)
	Status			TINYINT NOT NULL DEFAULT(1),				--狀態(0刪除1正常)
	AddTime			DATETIME NOT NULL DEFAULT(GETDATE())		--添加時間
)
--年級表
--6個年級,每個年級2個班
CREATE TABLE GradeTable(
	GradeId			INT NOT NULL PRIMARY KEY IDENTITY(1,1),		--主鍵Id
	GradeNumber		INT NOT NULL,								--年級編號(1~6)
	GradeName		NVARCHAR(3) NOT NULL,						--年級名稱(例:1年級,6年級)
	Status			INT NOT NULL DEFAULT(1),					--狀態(0刪除1正常)
	AddTime			DATETIME NOT NULL DEFAULT(GETDATE())		--添加時間
)

--年級表和班級表初始化
INSERT INTO GradeTable(GradeNumber,GradeName) VALUES
(1,'1年級'),
(2,'2年級'),
(3,'3年級'),
(4,'4年級'),
(5,'5年級'),
(6,'6年級')
INSERT INTO ClassTable(ClassNumber,ClassName) VALUES
('1-1','1年級1班'),
('1-2','1年級2班'),
('2-1','2年級1班'),
('2-2','2年級2班'),
('3-1','3年級1班'),
('3-2','3年級2班'),
('4-1','4年級1班'),
('4-2','4年級2班'),
('5-1','5年級1班'),
('5-2','5年級2班'),
('6-1','6年級1班'),
('6-2','6年級2班')

如何查看sql語句的執行時間?

declare @d datetime
set @d=getdate()

Select * FROM [dbo].[EmployeeTable]   --這裏寫sql語句

select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())
if-else 和 try-catch

--查看數據庫是否存在
if exists(select * from sys.sysdatabases where name = 'TaskTracker')
begin
print 數據庫存在
end
else begin
print 數據庫不存在
end
 
 
use TaskTracker
go
begin try
--這裏寫sql語句
end try
begin catch
--記錄錯誤信息
select ERROR_MESSAGE()
end catch

4.加密函數 和用戶自定義函數語句

--SHA1加密
--INSERT INTO dbo.A(Id,passnum) VALUES(
--10,
--HASHBYTES('SHA1','123')
--)
--查詢是否存在
--Select * from A where passnum= HASHBYTES('SHA1','124')

--創建自己的加密函數 dbo.MD5
--CREATE FUNCTION [dbo].[MD5](@src varchar(255))
--RETURNS varchar(255)
--AS
--BEGIN
--	DECLARE @md5 varchar(34)
--	SET @md5 = sys.fn_VarBinToHexStr(hashbytes('MD5',@src));
--	--RETURN SUBSTRING(@md5 , 11 , 16)  --16位
--	RETURN SUBSTRING(@md5 , 3 , 32)     --32位
--END

--GO

--比較自定義函數和 內置的 區別
--select dbo.MD5('123')
--GO
--select HASHBYTES('MD5','123')

--自定義函數 https://www.cnblogs.com/csdbfans/p/3514538.html
--這裏只記錄 表值函數
--方法名字叫 dbo.InsertIntoATable,請求參數可帶兩個
--返回 Table 數據
--CREATE FUNCTION selectAById(
--	@a varchar(36)    --參數
--)
--RETURNS TABLE
--AS
--RETURN(
--	SELECT * FROM dbo.A WHERE Id = @a
--)

--調用函數
--不能直接使用如 selectAById('1')
--SELECT * FROM selectAById('1')

 

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