Home [SQL筆記] 運算符
Post
Cancel

[SQL筆記] 運算符

R

  • 數據轉換類型:Convertcast
    • Convert(varchar(10),@Area) => Convert(轉換類型,要轉換的變數)
    • cast(@Area as varchar(10)) => cast(變數 as 轉換的類型)
  • All所有的才成立,Any任一個就成立。
  • AllAny邏輯判斷的時候,數字要寫前面。if 3000 < Any(select...)
  • 在C#中,if else是用大括弧{}表示,在sql是用 begin end來表示
1
2
3
4
5
6
if exists(查詢運算子)
    begin
    end
else
    begin
    end
  • C# 的if()條件表達式有小括號,SQL的if是沒有的
1
2
3
4
5
6
7
8
if @Count > 3
    begin
    --成立要做的事
    end
else 
    begin
    --不成立要做的事
    end

運算符

T-SQL中使用的運算符分為7種:

  1. 算數運算符:加(+)、減(-)、乘(*)、除(/)、MOD(%)
  2. 邏輯運算符:AND, OR, LIKE, BETWEEN, IN, EXISTS, NOT, ALL, ANY
  3. 賦值運算符:=
  4. 字符串運算符:+
  5. 比較運算符:=, >, <, >=, <=, <>
  6. 位移運算符:|, &, ^
  7. 複合運算符:+=, -=, /=, %=, *=

a+=b => a=a+b

範例1:使用變量(declare)

(1)已知長方形的長和寬,求長方形的周長和面積

1
2
3
4
5
6
7
8
9
10
11
--(1)已知長方形的長和寬,求長方形的周長和面積
declare @Length int = 5 --長
declare @Width int = 10 --寬
declare @Perimeter int --周長
declare @Area int --面積
set @Perimeter = (@Length+@Width)*2
set @Area = @Length * @Width
print '方周長:'+ Convert(varchar(10),@Perimeter)
print '方面積:'+ Convert(varchar(10),@Area)
print '方周長:'+ cast(@Perimeter as varchar(10))
print '方周長:'+ cast(@Area as varchar(10))

print '方周長:'+ @Area不能這樣寫,會報錯。錯誤訊息:「將 varchar 值 ‘方周長:’ 轉換成資料類型 int 時,轉換失敗。」
這樣相加,加不了的,要將後面變數轉換。

所以要用數據類型轉換Convert(轉換類型,要轉換的變數)
或是用cast(@Area as varchar(10))

範例2:and, or, like, between, in

模擬銀行業務

1
2
3
4
5
6
7
8
9
10
11
12
--(2)查詢銀行卡狀態為凍結,並且餘額超過100000的銀行卡信息
select * from BankCard where CardState = 3 and CardMoney > 100000
--(3)查詢出銀行卡狀態為凍結或者餘額等於0的銀行卡信息
select * from BankCard where CardState = 3 or CardMoney = 0
--(4)查詢出姓名中含有'張'的帳戶資料以銀行卡信息
select * from AccountInfo
inner join BankCard on AccountInfo.AccountId = BankCard.AccountId
where RealName like '%張%'
--(5)查詢出餘額在2000-5000之間的銀行卡資料
select * from BankCard where CardMoney between 2000 and 5000
--(6)查詢出銀行卡狀態為凍結或者是注銷的銀行卡信息
select * from BankCard where CardState in(3,4)

範例3:開戶開卡 if exists else, begin end

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--(7)李四身份証:B2233445566,李四到銀行來開戶,
--查詢身份証在帳戶表是否存在,不存在則進行開戶開卡,存在則不開戶,直接開卡
declare @AccountId int --帳戶編號
if exists(select * from AccountInfo where AccountCode = 'B2233445566')--存在此人
    begin
        --取得此人的身份証AccountId
        select @AccountId = (select AccountId from AccountInfo where AccountCode = 'B2233445566')
        --直接開卡
        insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
        values('999998888804',@AccountId,'123456',0,1)
    end
else --不存在此人
    begin
        --開戶
        insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
        values('B2233445566','2233445566','李四',GETDATE())
        --取得開戶後的帳戶編號AccountId
        set @AccountId = @@IDENTITY --取得剛剛新增的自動編號
        --開卡
        insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
        values('999998888804',@AccountId,'123456',0,1)
    end

在C#中,if else是用大括弧{}表示,在sql是用 begin end來表示

1
2
3
4
5
6
7
8
if exists(查詢運算子) --成立
    begin
        --條件成立要做的事
    end
else --不成立
    begin
        --條件不成立要做的事
    end

C# 的if()條件表達式有小括號,SQL的if是沒有的

1
2
3
4
5
6
7
8
if @Count <= 2
    begin
        --條件成立要做的事
    end
else
    begin
        --條件不成立要做的事
    end

範例4:承上,開卡限制(最多三張卡)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--擴展:上面需求添加一個限制,即一個人最多只能開三張銀行卡
declare @AccountId int--帳戶編號
declare @CardCount int--卡片數量
if exists(select * from AccountInfo where AccountCode = 'B2233445566')--存在此人
    begin
        --取得此人的身份証AccountId
        select @AccountId = 
        (select AccountId from AccountInfo where AccountCode = 'B2233445566')
        --取得此人的卡片數量
        select @CardCount =
        (select count(*) from BankCard where AccountId = @AccountId)

        --判斷卡片數量是否超過3張
        if @CardCount <= 2 
            begin
                --直接開卡
                insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
                values('999998888805',@AccountId,'123456',0,1)
            end
        else
            begin
                print '您名下的銀行卡太多了,最多只能有3張銀行卡'
            end
    end
else --不存在此人
    begin
        --開戶
        insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
        values('B2233445566','2233445566','李四',GETDATE())
        --取得開戶後的帳戶編號AccountId
        set @AccountId = @@IDENTITY --取得剛剛新增的自動編號
        --開卡
        insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
        values('999998888805',@AccountId,'123456',0,1)
    end

C# 的if()條件表達式有小括號,SQL的if是沒有的

1
2
3
4
5
6
7
8
if @Count <= 2
    begin
        --條件成立要做的事
    end
else
    begin
        --條件不成立要做的事
    end

範例5:ALL 所有

ALL:是所有,表示全部都滿足才返回true

1
2
3
4
5
6
7
8
9
--(8)查詢銀行卡帳戶餘額,是不是所有的帳戶餘額都超過了3000
if 3000 < ALL(select CardMoney from BankCard)
    begin
        print '所有的銀行卡餘額都超過3000'
    end
else
    begin
        print '不是所有的銀行卡餘額都超過3000'
    end

3000為什麼要寫前面?這是語法的規則,邏輯判斷的時候,數字要寫前面。

範例6:ANY 任意一個

ANY/SOME:是任意一個 ,表示有任何一個滿足就返回true

只要有一個、至少有一個,條件就成立

1
2
3
4
5
6
7
8
9
--(9)查詢銀行卡帳戶餘額,是否含有帳戶餘額超過3000000的資料
if 3000000 < any(select CardMoney from BankCard)
    begin
        print '有銀行卡帳戶餘額超過3000000'
    end
else
    begin
        print '沒有銀行卡帳戶餘額超過3000000'
    end

https://www.bilibili.com/video/BV1XV411C7TP?p=19

This post is licensed under CC BY 4.0 by the author.