create database step2_unit12; go use step2_unit12; go -- 部門表 CREATE TABLE [dbo].[Department]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Name] [v ...
create database step2_unit12; go use step2_unit12; go -- 部門表 CREATE TABLE [dbo].[Department]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Name] [varchar](20) NULL ); -- 職位表 CREATE TABLE [dbo].[Job]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Name] [varchar](20) NULL ); -- 人員表 CREATE TABLE [dbo].[person]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Name] [varchar](50) NULL, [Sex] [varchar](10) NULL, [Age] [int] NULL ); -- 工資表 CREATE TABLE [dbo].[Salary]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Sal] [money] NULL, [Comm] [money] NULL, [StaffId] [int] NULL ); -- 員工表 CREATE TABLE [dbo].[Staff]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Name] [varchar](20) NOT NULL, [Hiredate] [datetime] NOT NULL, [DepartmentId] [int] NULL, [JobId] [int] NULL ); SET IDENTITY_INSERT [dbo].[Department] ON INSERT [dbo].[Department] ([Id], [Name]) VALUES (1, N'技術部') INSERT [dbo].[Department] ([Id], [Name]) VALUES (2, N'人資部') INSERT [dbo].[Department] ([Id], [Name]) VALUES (3, N'市場部') SET IDENTITY_INSERT [dbo].[Department] OFF SET IDENTITY_INSERT [dbo].[Job] ON INSERT [dbo].[Job] ([Id], [Name]) VALUES (1, N'經理') INSERT [dbo].[Job] ([Id], [Name]) VALUES (2, N'組長') INSERT [dbo].[Job] ([Id], [Name]) VALUES (3, N'員工') SET IDENTITY_INSERT [dbo].[Job] OFF SET IDENTITY_INSERT [dbo].[person] ON INSERT [dbo].[person] ([Id], [Name], [Sex], [Age]) VALUES (1, N'高圓圓', N'女', 28) INSERT [dbo].[person] ([Id], [Name], [Sex], [Age]) VALUES (2, N'王佳佳', N'女', 32) INSERT [dbo].[person] ([Id], [Name], [Sex], [Age]) VALUES (3, N'楊碩', N'男', 25) SET IDENTITY_INSERT [dbo].[person] OFF SET IDENTITY_INSERT [dbo].[Salary] ON INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (1, 15000.0000, 10000.0000, 1) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (2, 15000.0000, 9000.0000, 2) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (3, 12000.0000, 8000.0000, 3) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (4, 8000.0000, 6000.0000, 4) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (5, 4000.0000, 3000.0000, 5) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (6, 9000.0000, 8000.0000, 6) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (7, 15000.0000, 12000.0000, 7) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (8, 12000.0000, 9000.0000, 7) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (9, 7000.0000, 2000.0000, 9) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (10, 9000.0000, 8000.0000, 10) SET IDENTITY_INSERT [dbo].[Salary] OFF SET IDENTITY_INSERT [dbo].[Staff] ON INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (1, N'王鑫', CAST(N'2014-02-01 00:00:00.000' AS DateTime), 1, 1) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (2, N'張磊', CAST(N'2015-09-03 00:00:00.000' AS DateTime), 2, 1) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (3, N'李鵬', CAST(N'2016-08-01 00:00:00.000' AS DateTime), 3, 2) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (4, N'王洋', CAST(N'2019-02-03 00:00:00.000' AS DateTime), 1, 3) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (5, N'吳潘', CAST(N'2018-10-01 00:00:00.000' AS DateTime), 2, 3) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (6, N'賈丹', CAST(N'2018-07-01 00:00:00.000' AS DateTime), 2, 2) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (7, N'李露', CAST(N'2016-09-01 00:00:00.000' AS DateTime), 3, 1) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (8, N'楊騰', CAST(N'2018-11-08 00:00:00.000' AS DateTime), 1, 2) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (9, N'孫藝', CAST(N'2018-12-26 00:00:00.000' AS DateTime), 3, 3) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (10, N'趙帥', CAST(N'2019-01-03 00:00:00.000' AS DateTime), 1, 3) SET IDENTITY_INSERT [dbo].[Staff] OFF
1. T-SQL 命名規則
1,開頭不能是數字,空格或特殊字元
2,首字元後可以包含 字母 數字 漢字 _ @ #
3,不能是系統保留字(關鍵字)
2. 變數
全局變數
整個系統都可以使用
@@ERROR 返回執行的上一個T-SQL語句的錯誤號,0 代表沒有錯誤,非0 代表有錯誤 begin tran declare @a int = 1; select @a/0 select @@ERROR commit @@IDENTITY 返回插入到表的IDENTITY列的最後一個值 @@LANGUAGE返回當前所用語言的名稱 @@MAX_CONNECTIONS返回Sql Server實例允許同時進行的最大用戶連接數 @@ROWCOUNT返回上一次語句影響的數據行的行數 @@SERVERNAME返回運行Sql Server的本地伺服器的名稱 @@SERVICENAME返回Sql Server正在其下運行的註冊表項的名稱 @@TIMETICKS返回每個時鐘周期的微秒數 @@TRANCOUNT返回當前連接的活動事務數 @@VERSION 返回當前安裝的日期、版本和處理器類型
局部變數
註意:定義局部變數必須以@開頭。只能在當前連接(會話)下使用
定義變數
--declare @變數名 變數類型= 變數值; --如 declare @name varchar(20)= '任我行';
局部變數賦值
-
select 賦值 declare @age int= 0; -- 定義變數 -- 直接賦值 select @age = 20; -- 也可通過查詢語句進行賦值 select @age=Age from person where Name='高圓圓'; set 賦值 set @age = 20; -- 不可通過查詢語句進行賦值 declare @username nvarchar(50)='任我行'; --定義局部變數,並賦初始值 set @username='張三'; --通過set賦值 select @username='aaa'; --通過select 賦值 select @username as 用戶名; --通過select 輸出並取別名 print @username; --print 列印輸出
案例
-- 查詢高圓的年齡,如果年齡是1-10歲,則輸出兒童,10-25 輸出少年,25-40輸出青年,40-60輸出中年,其他老年 declare @age int=0; select @age=Age from person where Name='高圓圓'; set @age=30; --給局部變數賦值 if @age<10 begin print '兒童'; end; else if @age<25 begin print '少年' end; else if @age<40 begin print '青年' end; else if @age<60 begin print '中年' end; else begin print '老年' end;
3. 運算符
1. 算術運算符
運算符 | 名稱 |
---|---|
+ | 加法運算符 |
- | 減法運算符 |
* | 乘法運算符 |
/ | 除法運算符 |
% | 求餘運算符 |
2. 比較運算符
運算符 | 名稱 |
---|---|
= | 等於 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
3. 邏輯運算符
運算符 | 含義 |
---|---|
ALL | 如果一組比較都為true,那麼就為true |
AND | 如果兩個布爾表達式都為true,那就為true |
Any | 兩個任意一個布爾表達式為true即為true |
Between | 如果操作數在這個範圍,則為true |
exists | 如果查詢包含一些行,則為true |
in | 如果表達式等於表達式中的某一個,則為true |
like | 如果操作數與一種模式想匹配則為true |
not | 對任何一個布爾運算符取反 |
or | 兩個布爾表達式一個為true,則為true |
some | 在一組比較中,有些為true, 那麼就為true |
4. 連接運算符
是連接運算符,可以將兩個及以上個字元串拼接到一起 select 'abc'+'bdc'; select '10'+'10'; -- sqlserver 中沒有隱式轉換 -- 輸出結果:1010 select 10+'10'; -- sqlserver 中沒有隱式轉換 -- 輸出結果:20 select 10+'10a'; -- 報錯,還是因為沒有隱式轉換
5. 運算符優先順序
級別 | 運算符 |
---|---|
1 | ~(位非) |
2 | *(乘 )、/ (除)、%(求餘) |
3 | +(正)、-(負)、+(加),-(減),+(連接)、^(位異或)、&(位與)、|(位或) |
4 | =(等於)、>、< 、>=、<= 、!=、<>(不等於)、!>(不小於)、!<(不大於) |
5 | not |
6 | and |
7 | all、any、between、in、like、or、some |
8 | =(賦值) |
-
查詢出人員表中總的記錄數給@MyCount局部變數賦值並輸出
declare @mycount int; select @mycount=count(Id) from person; select @mycount;
-
求出高圓圓與王佳佳的年齡總和
declare @age1 int,@age2 int,@sum int; --declare @age2 int; --declare @sum int; select @age1 = Age from person where Name='高圓圓'; select @age2 = Age from person where Name='王佳佳'; set @sum=@age1+@age2; --select @sum=@age1+@age2; select @sum;
-
輸出出“高圓圓 VIP”這樣一條信息
select Name,'VIP' as 等級 from person where Name='高圓圓' select Name+' VIP' as VIP from person where Name='高圓圓'
-
查詢出年齡大於25歲的人員信息
Select * from person where age>25
-
查詢出年齡大於25歲或者性別為女的人員信息
Select * from person where age>25 or Sex='女'
6. 作業
-
T-SQL編程實現123%7後得結果
-
題目2
T-sql語句進行如下編程
(1) 定義一個整形變數age
(2) 給變數age賦值為10
(3) 定義一個不超過8字元的變數name
(4) 給name變數賦值為”張三”
(5) 調用變數,輸出最終結果 張三的年齡是10歲
配套視頻鏈接:1. 索引的概述_嗶哩嗶哩_bilibili
海闊平魚躍,天高任我行,給我一片藍天,讓我自由翱翔。