最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

?SQL 中 CASE 表達(dá)式的使用方式

 更新時(shí)間:2022年09月19日 10:22:57   作者:Wang1???????  
這篇文章主要介紹了?SQL 中 CASE 表達(dá)式的使用方式,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

1. 前言

CASE 表達(dá)式是從 SQL-92 標(biāo)準(zhǔn)開(kāi)始被引入的。

在 CASE 表達(dá)式里,可以使用 BETWEEN 、LIKE和 < 、> 等便利的謂詞組合,以及能嵌套子查詢的 IN 和 EXISTS 謂詞。

2. 語(yǔ)法

CASE 表達(dá)式有 簡(jiǎn)單 CASE 表達(dá)式(simple case expression) 和 搜索 CASE 表達(dá)式(searched case expression) 兩種寫法:

-- 簡(jiǎn)單CASE 表達(dá)式
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'END
-- 搜索CASE 表達(dá)式
CASE WHEN sex = '1' THEN '男'
     WHEN sex = '2' THEN '女'
ELSE '其他' END

sex 列(字段)如果是 '1' ,那么結(jié)果為男;如果是 '2' ,那么結(jié)果為女。

3. 注意點(diǎn)

CASE在匹配給定條件時(shí),發(fā)現(xiàn)為真的 WHEN 子句時(shí),CASE 表達(dá)式的真假值判斷就會(huì)中止,而剩余的 WHEN 子句會(huì)被忽略。為了避免引起不必要的混亂,使用 WHEN 子句時(shí)要注意條件的排他性。

-- 例如,這樣寫的話,結(jié)果里不會(huì)出現(xiàn)“第二”
CASE WHEN col_1 IN ('a', 'b') THEN '第一'
     WHEN col_1 IN ('a') THEN '第二'
ELSE '其他' END
  • 統(tǒng)一各分支返回的數(shù)據(jù)類型: 一定要注意 CASE 表達(dá)式里各個(gè)分支返回的數(shù)據(jù)類型是否一致。某個(gè)分支返回字符型,而其他分支返回?cái)?shù)值型的寫法是不正確的。
  • 不要忘了寫 END: 不寫END是語(yǔ)法錯(cuò)誤,這是不允許的。
  • 養(yǎng)成寫 ELSE 子句的習(xí)慣: 與 END 不同,ELSE 子句是可選的,不寫也不會(huì)出錯(cuò)。不寫 ELSE 子句時(shí),CASE 表達(dá)式的執(zhí)行結(jié)果是 NULL 。

4. 分類匯總數(shù)據(jù)

SELECT 
    CASE pref_name 
        WHEN '德島' THEN '四國(guó)'
        WHEN '香川' THEN '四國(guó)'
        WHEN '愛(ài)媛' THEN '四國(guó)'
        WHEN '高知' THEN '四國(guó)'
        WHEN '福岡' THEN '九州'
        WHEN '佐賀' THEN '九州'
        WHEN '長(zhǎng)崎' THEN '九州'
    END AS district,
    SUM(population) AS total
FROM poptbl
GROUP BY 
    CASE pref_name 
        WHEN '德島' THEN '四國(guó)'
        WHEN '香川' THEN '四國(guó)'
        WHEN '愛(ài)媛' THEN '四國(guó)'
        WHEN '高知' THEN '四國(guó)'
        WHEN '福岡' THEN '九州'
        WHEN '佐賀' THEN '九州'
        WHEN '長(zhǎng)崎' THEN '九州'
    END;

5. 一條SQL實(shí)現(xiàn)不同條件的統(tǒng)計(jì)

SELECT
    pref_name AS '縣名',
    SUM( CASE WHEN sex=1 THEN population ELSE 0 END ) AS '男' 
    SUM( CASE WHEN sex=2 THEN population ELSE 0 END ) AS '女' 
FROM poptlb
GROUP By pref_name

6. 使用CHECK約束定義多個(gè)列的條件關(guān)系

假設(shè)某公司規(guī)定“女性員工的工資必須在 20 萬(wàn)日元以下”,而在這個(gè)公司的人事表中,這條無(wú)理的規(guī)定是使用 CHECK 約束來(lái)描述的,代碼如下所示:

CONSTRAINT check_salary CHECK ( 
    CASE WHEN sex = '2' THEN 
        CASE WHEN salary <= 200000
            THEN 1 ELSE 0 END
        ELSE 1 END = 1 
)

7. 在UPDATE語(yǔ)句中進(jìn)行條件分支

條件:

  • 對(duì)當(dāng)前工資為 30 萬(wàn)日元以上的員工,降薪 10%。
  • 對(duì)當(dāng)前工資為 25 萬(wàn)日元以上且不滿 28 萬(wàn)日元的員工,加薪 20%。
UPDATE Salaries
SET salary = CASE WHEN salary>300000 THEN salary*0.9
                  WHEN salary>=250000 AND salary <280000 THEN salary * 1.2
                  ELSE salary
             END;

8. 生成交叉表

--- 使用IN謂詞
SELECT
    course_name AS '課程名',
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200706')
            THEN 'o' 
            ELSE 'x' 
    END AS '6 月'
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200707')
            THEN 'o' 
            ELSE 'x' 
    END AS '7 月'
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200708')
            THEN 'o' 
            ELSE 'x' 
    END AS '8 月'
FROM course_master;

--- 或者使用EXIST謂詞
SELECT CM.course_name,
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200706 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '×' 
    END AS "6 月",
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200707 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '×' 
    END AS "7 月",
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200708 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '×' 
    END AS "8 月"
FROM CourseMaster CM;

9. CASE表達(dá)式中使用聚合函數(shù)

對(duì)于加入了多個(gè)社團(tuán)的學(xué)生,通過(guò)將其“主社團(tuán)標(biāo)志”列設(shè)置為 Y 或者 N 來(lái)表明哪一個(gè)社團(tuán)是他的主社團(tuán);對(duì)于只加入了一個(gè)社團(tuán)的學(xué)生,將其“主社團(tuán)標(biāo)志”列設(shè)置為 N。

現(xiàn)需要查詢出所有學(xué)生加入的社團(tuán),若加入了多個(gè)則顯示主社團(tuán)

SELECT 
    std_id,
    CASE WHEN COUNT(*)==1 THEN MAX(club_id) 
         ELSE MAX(CASE WHEN main_club_flg = 'Y' THEN club_id ELSE NULL END)
    END AS 'main_club'
FROM student_club
GROUP BY std_id

10. 按照自定義規(guī)則排序列

按照mark列排序,要求修正a b c d 的權(quán)重為 c b a d

SELECT
    mark
FROM 
    sort_test
ORDER BY
    CASE mark
        WHEN 'a' THEN -1
        WHEN 'b' THEN 1
        WHEN 'c' THEN 2
        WHEN 'd' THEN -2
    END 

到此這篇關(guān)于 SQL 中 CASE 表達(dá)式的使用方式的文章就介紹到這了,更多相關(guān) SQL CASE 表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL字符串前綴索引使用

    MySQL字符串前綴索引使用

    本文主要介紹了MySQL字符串前綴索引使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • mysql中distinct和group?by的區(qū)別淺析

    mysql中distinct和group?by的區(qū)別淺析

    distinct簡(jiǎn)單來(lái)說(shuō)就是用來(lái)去重的,而group by的設(shè)計(jì)目的則是用來(lái)聚合統(tǒng)計(jì)的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應(yīng)該仔細(xì)區(qū)分,下面這篇文章主要給大家介紹了關(guān)于mysql中distinct和group?by區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • SQL查詢之字段是逗號(hào)分隔開(kāi)的數(shù)組如何查詢匹配數(shù)據(jù)問(wèn)題

    SQL查詢之字段是逗號(hào)分隔開(kāi)的數(shù)組如何查詢匹配數(shù)據(jù)問(wèn)題

    這篇文章主要介紹了SQL查詢之字段是逗號(hào)分隔開(kāi)的數(shù)組如何查詢匹配數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 解決mysql不能插入中文Incorrect string value

    解決mysql不能插入中文Incorrect string value

    首先我的配置文件的設(shè)置的默認(rèn)字符集是utf8即
    2009-05-05
  • MySQL中@i:=@i+1表達(dá)式用法詳解

    MySQL中@i:=@i+1表達(dá)式用法詳解

    這篇文章主要給大家介紹了關(guān)于MySQL中@i:=@i+1表達(dá)式用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • MySQL查詢優(yōu)化之索引的應(yīng)用詳解

    MySQL查詢優(yōu)化之索引的應(yīng)用詳解

    本篇文章是對(duì)MySQL查詢優(yōu)化中索引的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL數(shù)據(jù)庫(kù)innodb啟動(dòng)失敗無(wú)法重啟的解決方法

    MySQL數(shù)據(jù)庫(kù)innodb啟動(dòng)失敗無(wú)法重啟的解決方法

    這篇文章給大家分享了MySQL數(shù)據(jù)庫(kù)innodb啟動(dòng)失敗無(wú)法重啟的解決方法,通過(guò)總結(jié)自己遇到的問(wèn)題分享給大家,讓遇到同樣問(wèn)題的朋友們可以盡快解決,下面來(lái)一起看看吧。
    2016-09-09
  • Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn)

    Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn)

    在MySQL中,創(chuàng)建新用戶并為其授予權(quán)限是一項(xiàng)常見(jiàn)的操作,本文主要介紹了Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • MySQL存儲(chǔ)引擎MyISAM與InnoDB區(qū)別總結(jié)整理

    MySQL存儲(chǔ)引擎MyISAM與InnoDB區(qū)別總結(jié)整理

    今天小編就為大家分享一篇關(guān)于MySQL存儲(chǔ)引擎MyISAM與InnoDB區(qū)別總結(jié)整理,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • MySQL性能設(shè)置

    MySQL性能設(shè)置

    網(wǎng)站訪問(wèn)量越來(lái)越大,MySQL自然成為瓶頸,因此最近我一直在研究 MySQL 的優(yōu)化,第一步自然想到的是 MySQL 系統(tǒng)參數(shù)的優(yōu)化
    2006-12-12

最新評(píng)論

阜新市| 边坝县| 伊宁市| 常熟市| 疏勒县| 灵石县| 左贡县| 株洲市| 平凉市| 宜君县| 蒲城县| 安丘市| 哈尔滨市| 孝昌县| 巴林右旗| 英山县| 扬州市| 高碑店市| 慈溪市| 玉树县| 永胜县| 黑龙江省| 崇阳县| 兴安县| 都江堰市| 息烽县| 北川| 洪湖市| 翁源县| 焦作市| 大姚县| 合阳县| 五华县| 嵊泗县| 墨竹工卡县| 温州市| 柏乡县| 万全县| 宣汉县| 化德县| 江华|