第十三單元 流程式控制制和函數

来源:https://www.cnblogs.com/xuyubing/archive/2023/12/19/17914529.html
-Advertisement-
Play Games

1. 選擇結構 If(...) Begin ​ 語句塊 ​ End ​ else if(...) Begin ​ 語句塊 ​ End ​ Else ​ Begin ​ 語句塊 ​ End; 註意事項 語法中begin..end相當於C#中的{} 執行語句只有一條時,begin..end可以省略 () ...


1. 選擇結構

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  

 

  1. 創建資料庫,名為:第十五單元練習資料庫

  2. 正確建立表結構,註意表約束

  3. 每張表插入10條測試數據

  4. 查詢學生表,將性別顯示為男,女,未知,保密

  5. 查詢訂單表,將訂單狀態顯示為未支付,未發貨,待收貨,待評價,已完成

  6. 顯示用戶表的姓名(去除空格),年齡,性別,人群類別(年齡:0-10小孩,10-20 少年,20-35青年,35-60 中年,60以上老年)

  7. 查詢用戶信息,將手機號中間4位用*號表示,如1384843

  8. 查看最近3個月的訂單數據

  9. 查看最近2017年以後的訂單數據,統計每個用戶的訂單數量

  10. 查詢手機尾號相同的用戶信息

  11. 查詢近一年的用戶數據,並將複姓為”令狐”的姓氏替換為”令”

  12. 自定義一個函數,傳入三角形三條邊的值,並輸出三角形的形狀(普通三角形,直角三角形,等腰直角三角形,等邊三角形,等腰三角形),如,傳入:3,4,5 輸出 直角三角形(輸出文字即可)

  13. 創建函數,輸出1-100的偶數和

  14. 輸出1000以內的水仙花數.

視頻配套鏈接:1. 索引的概述_嗶哩嗶哩_bilibili

 

海闊平魚躍,天高任我行,給我一片藍天,讓我自由翱翔。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ArrayList是一個使用List介面實現的Java類。顧名思義,Java ArrayList提供了動態數組的功能,其中數組的大小不是固定的。它實現了所有可選的列表操作,並允許所有元素,包括null。 ...
  • 原文: https://openaigptguide.com/ai-picture-generator/ 在人工智慧(AI)圖像生成技術的推動下,各類AI圖片生成網站如雨後春筍般涌現,為我們的日常生活提供了豐富多彩的視覺體驗。 AI圖片生成技術原理 人工智慧(AI)圖片生成技術原理是通過電腦程式使 ...
  • 背景及問題 如下程式所示: #include<iostream> class MyString { public: MyString() = default; MyString(const char* data) { printf("%s", "MyString Constructed!!\n"); ...
  • 引言 在ChatGpt火了這麼久,他的那種單字單字返回的格式可能讓很多朋友感到好奇,在之前我用c#寫了一個版本的,同時支持IAsyncEnumerable以及SSE,今天把之前寫的Java版本的也發出來,和大家一起學習,有不對的地方,歡迎各位大佬指正。 Code 我這邊用的是JDK21版本,可以看到 ...
  • 需求 有些應用每次啟動都需要用管理員許可權運行,比如Python註入dll時,編輯器或cmd就需要以管理員許可權運行,不然註入就會失敗。 這篇文章用編程怎麼修改配置實現打開某個軟體都是使用管理員運行,就不用每次都右鍵點擊以管理員身份運行此程式。主要是給小白配置,防止他忘了以管理員許可權運行,又跑過來問我為 ...
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`TableWidget`表格組件的常用方法及靈活運用。`QTableWidget` 是 Qt 中用於顯示表格數據... ...
  • QMdiArea(Multiple Document Interface Area)是Qt中用於創建多文檔界面的組件。它提供了一種在單個視窗中管理多個文檔的方式,每個文檔通常是一個子視窗(`QMdiSubWindow`)。該組件主要用於設計多文檔界面應用程式,具備有多種窗體展示風格,實現了在父窗體中... ...
  • 代理在電腦網路很常見,比如伺服器群組內部通常只會開一個口進行對外訪問,就可以通過內網代理來進行處理,從而更好的保護內網伺服器。代理讓我們網路更安全,但是警惕非正規的代理可能會竊取您的數據。請用HTTPS內容訪問更安全。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...