1. 選擇結構 If(...) Begin 語句塊 End else if(...) Begin 語句塊 End Else Begin 語句塊 End; 註意事項 語法中begin..end相當於C#中的{} 執行語句只有一條時,begin..end可以省略 () ...
If(...) Begin 語句塊 End else if(...) Begin 語句塊 End Else Begin 語句塊 End;
註意事項
語法中begin..end相當於C#中的{}
執行語句只有一條時,begin..end可以省略
()可以省略,但是如果條件內包含select語句 ,()不能省略
資料庫中使用=表示相等判斷
2. Case 結構
-- 用於條件是判斷相等的時候才可以使用這種語法 case 欄位 when 條件1 then 結果 when 條件2 then 結果 else 結果 end 或者 case when 條件1 then 結果 when 條件2 then 結果 else 結果 end 例: select Id,NickName,Mobile Age, case Sex when 0 then '男' when 1 then '女' when 2 then '保密' when 3 then '未知' end 性別 from UserInfo
select *, case when Age<=10 then '幼年' when Age between 11 and 25 then '少年' when Age between 26 and 40 then '青年' when Age between 41 and 59 then '中年' else '老年' end 人群 from UserInfo
3. While 迴圈
while begin -- 語句塊 end -- 求1-100的和,碰到3的倍數跳過,如果和大於100則跳出迴圈 declare @i int=1; declare @sum int=0; while(@i<=100) begin if(@i%3=0) --3的倍數 begin set @i=@i+1; -- 迴圈變數遞增 continue;--結束本次迴圈,進入下一次迴圈 end; set @sum=@sum+@i; if(@sum>=100) begin break; -- 如果和大於100則跳出迴圈 end; set @i=@i+1; -- 迴圈變數遞增 end; select @sum,@i;
註意事項
while後面的()可以省略
但是如果迴圈條件內含有select語句,()不能省略
可以使用break和continue關鍵字在迴圈內部控制迴圈的執行
關鍵字 | 退出條件 |
---|---|
return | 從查詢或者過程中無條件退出 |
break | 退出while 或者 if else 中最裡面的迴圈 |
continue | 重新開始 while 迴圈。在 continue 關鍵字之後的任何語句都將被忽略 |
4. waitfor流程式控制制語句
等到特定的時間,執行語句.
-- waitfor delay 延遲時間 print 'hello'; waitfor delay '0:0:3';-- 等3秒 print 'world';
基本上用不上,一般查詢都會要求高效查詢。
5. 函數
1. 系統函數
CAST (expression AS data_type):強制轉換
--字元串轉換為int select CAST ('100.1' AS decimal(10,2)) -- 100.10
Left(字元串,字元數量):返回字元串從左開始數 指定數量的字元串
select left('hello world',7) -- hello w
Right(字元串,字元數量):返回字元串從右開始數 指定數量的字元串
select right('hello world',7); -- o world
LTrim
(要去除空格的字元串):去除字元串左邊的空格
--去除左右兩邊的空格 select ltrim(rtrim(' hello world a ')) -- hello world a
RTrim
(要去除空格的字元串):去除字元串右邊的空格
str
(數值,轉換後的字元總長度,小數位數):將數值數據轉換為字元數據
select str(3.1415926,4,2) -- 3.14 select str(3.1415926) -- 3
SubString
(字元串,截取位置,截取長度):返回從指定位置截取指定長度的字元串
select SUBSTRING('hello world',1,5); -- hello declare @mobile varchar(12)='15211112222'; select left(@mobile,3)+'****'+right(@mobile,4) -- 152****2222
註意:截取位置最小值是1
Lower(要轉換的字元):把字母全部轉換為小寫字母
select LOWER('hElLo WorLD'); -- hello world
Concat
(字元串1,字元串2.....):將所有字元串拼接成一個新的字元串
select concat('abc','cbd'); -- abccbd
Upper(要轉換的字元):把小寫字母全部轉換為大寫字母
select Upper('hElLo WorLD'); -- HELLO WORLD
Replace(字元串,要替換的字元/字元串,替換後的字元/字元串):替換字元/字元串
select replace('abc123tyuu','123','456') -- abc456tyuu
Len(要計算的字元):計算字元個數
select len('abc123tyuu')
abs(數值):求絕對值,即把負數變為正數
Sqrt(數值):求平方根。數值必須是非負數
round(數值,有效數位數):四捨五入函數
select round(5.78106,2) -- 5.78
rand():隨機返回一個0-1之間的浮點型小數
GetDate():獲取當前資料庫系統的日期和時間
Year(指定日期):返回指定日期中的年份值
Month(指定日期):返回指定日期中的月份值
Day(指定日期):返回指定日期是一個月中的第幾天
DateDiff(日期類型,開始日期,結束日期):返回兩個日期之差
DateAdd(日期類型,增量,增量表達式):增加指定的日期
日期類型:year/month/day/hour/minute等
增量:正數表示增加時間,負數表示減少時間
增量表達式:要增加日期的變數或欄位
select DateAdd(yyyy,4,'2000-02-02') -- 2004-02-02
2. 自定義函數
sql server 自定義函數分為三種類型:標量函數(Scalar Function)、內嵌表值函數(Inline Function)、多聲明表值函數(Multi-Statement Function)
標量函數:標量函數是對單一值操作,返回單一值。
內嵌表值函數:內嵌表值函數的功能相當於一個參數化的視圖。它返回的是一個表,內聯表值型函數沒有由BEGIN-END 語句括起來的函數體。
多聲明表值函數:它的返回值是一個表,但它和標量型函數一樣有一個用BEGIN-END 語句括起來的函數體,返回值的表中的數據是由函數體中的語句插入的。
它可以進行多次查詢,對數據進行多次篩選與合併,彌補了內聯表值型函數的不足。
create function f_sum(@endNum int) returns int as begin declare @i int=1; declare @sum int=0; while(@i<=@endNum) begin set @sum=@sum+@i; set @i=@i+1; end; return @sum; end; go --調用自定義函數 select dbo.f_sum(100)
結合查詢語句:
use step2; -- 查詢每個班級的總分 create function f_sumScore(@classId int) returns int begin declare @sum int; select @sum =sum(skillScore) from StudentInfo a join StudentScore b on a.stuId=b.stuId where ClassId=@classId return @sum; end -- 每個班的總分 select *,dbo.f_sumScore(ClassId) as 總分 from StudentInfo
6. 作業
用戶信息表(UserInfo)
欄位名 | 描述 | 類型 | 主鍵 | 非空 | 唯一 | 預設值 | Check |
---|---|---|---|---|---|---|---|
Id | 編號 | BigInt | √ | ||||
NickName | 姓名 | varchar | √ | 長度2-10 | |||
Mobile | 手機號 | Varchar | √ | √ | 長度11 | ||
Sex | 性別(0:男,1:女,2:保密,3:未知) | tinyint | √ | 0 | 0-3 | ||
Age | 年齡 | tinyint | √ | 10 | |||
CreateTime | 添加時間 | datetime | √ | Getdate() |
訂單表(OrderInfo)
欄位名 | 描述 | 類型 | 非空 | 預設值 | Check | 外鍵 |
---|---|---|---|---|---|---|
Id | 編號 | bigint | ||||
UserId | 下單用戶編號 | bigint | 用戶表(Id),聯級更,刪 | |||
TotalPrice | 訂單總價 | Decimal(10,2) | √ | 0 | >=1 | |
TotalCount | 商品總數量 | Int | √ | 1 | >=1 | |
CreateTime | 下單時間 | datetime | √ | Getdate() | ||
OrderState | 狀態(0:未支付,1:未發貨,2:待收貨,3:待評價,4:已完成) | tinyint | 0 | 0-4 |
-
創建資料庫,名為:第十五單元練習資料庫
-
正確建立表結構,註意表約束
-
每張表插入10條測試數據
-
查詢學生表,將性別顯示為男,女,未知,保密
-
查詢訂單表,將訂單狀態顯示為未支付,未發貨,待收貨,待評價,已完成
-
顯示用戶表的姓名(去除空格),年齡,性別,人群類別(年齡:0-10小孩,10-20 少年,20-35青年,35-60 中年,60以上老年)
-
查詢用戶信息,將手機號中間4位用*號表示,如1384843
-
查看最近3個月的訂單數據
-
查看最近2017年以後的訂單數據,統計每個用戶的訂單數量
-
查詢手機尾號相同的用戶信息
-
查詢近一年的用戶數據,並將複姓為”令狐”的姓氏替換為”令”
-
自定義一個函數,傳入三角形三條邊的值,並輸出三角形的形狀(普通三角形,直角三角形,等腰直角三角形,等邊三角形,等腰三角形),如,傳入:3,4,5 輸出 直角三角形(輸出文字即可)
-
創建函數,輸出1-100的偶數和
-
輸出1000以內的水仙花數.
視頻配套鏈接:1. 索引的概述_嗶哩嗶哩_bilibili
海闊平魚躍,天高任我行,給我一片藍天,讓我自由翱翔。