欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL基礎(chǔ)入門(mén)之Case語(yǔ)句用法實(shí)例

 更新時(shí)間:2022年08月08日 09:36:23   作者:宇宙之一粟  
case語(yǔ)句是mysql中的一個(gè)條件語(yǔ)句,可以在字段中使用case語(yǔ)句進(jìn)行復(fù)雜的篩選以及構(gòu)造新的字段,下面這篇文章主要給大家介紹了關(guān)于MySQL基礎(chǔ)入門(mén)之Case語(yǔ)句用法的相關(guān)資料,需要的朋友可以參考下

引言

MySQL CASE 是一個(gè) MySQL 語(yǔ)句查詢(xún)關(guān)鍵字,它定義了處理循環(huán)概念以執(zhí)行條件集并使用 IF ELSE 返回匹配案例的方式。 MySQL 中的 CASE 是一種控制語(yǔ)句,它驗(yàn)證條件案例集,并在第一個(gè)案例滿足 else 值時(shí)顯示值并退出循環(huán)。

如果沒(méi)有找到 TRUE 且語(yǔ)句沒(méi)有 ELSE 部分或值,則 CASE 返回 NULL?;旧?,CASE 語(yǔ)句類(lèi)似于 IF THEN ELSE 邏輯循環(huán)語(yǔ)句。在 MySQL 服務(wù)器上運(yùn)行時(shí),它會(huì)讀取條件表達(dá)式,當(dāng)表達(dá)式大小寫(xiě)匹配時(shí),nit 會(huì)顯示結(jié)果。之后,它會(huì)進(jìn)一步停止執(zhí)行。

CASE 的語(yǔ)法

下面的語(yǔ)法定義了 CASE 語(yǔ)句 SQL 查詢(xún)結(jié)構(gòu):

CASE
WHEN cond1 THEN value1
WHEN cond2 THEN value2
WHEN condN THEN valueN
ELSE value
END;
  • Cond1,cond2,…..,condN:表示在 CASE 語(yǔ)句列表中需要評(píng)估的條件。
  • Value1, value2, .....,valueN:表示滿足條件時(shí)需要顯示的各個(gè)值。
  • Value:表示 else 部分滿足時(shí)顯示的值。

這部分允許在 MySQL 的查詢(xún)中添加邏輯 CASE 語(yǔ)句。為了生成有效的語(yǔ)句,我們?cè)谌魏蔚胤绞褂脦в?WHERE SELECT 和 ORDER BY 等子句的 CASE 語(yǔ)句。您可以通過(guò)如下所示的語(yǔ)法進(jìn)行評(píng)估:

SELECT column1,column2,
CASE
WHEN cond1 THEN value1
WHEN cond2 THEN value2
WHEN condN THEN valueN
ELSE value
END
FROM TableName;

CASE 語(yǔ)句在 MySQL 中是如何工作的?

CASE 語(yǔ)句包含兩個(gè)過(guò)程:一個(gè)是 Simple CASE,另一個(gè)是 Searched CASE。我們使用 CASE 語(yǔ)句根據(jù)匹配條件提供結(jié)果值,使用邏輯控制方法與 SQL 子句(如 SELECT、WHERE 和 ORDER BY)一起為 SQL 查詢(xún)提供結(jié)果值。

假設(shè),下面的查詢(xún)解釋了 CASE 邏輯部分,其中我們提到了一個(gè)像 Student 的表,其中包含字段 StudentName、State、City,那么查詢(xún)將被寫(xiě)為:

SELECT StudentName, State, City FROM Students ORDER BY (
CASE
WHEN State IS NULL THEN City
ELSE State
END);

從這里我們將知道,當(dāng)我們?cè)?SELECT 查詢(xún)中應(yīng)用 CASE 語(yǔ)句來(lái)獲取滿足特定 case 條件的特定值時(shí)。在上圖中,我們將 CASE 語(yǔ)句放在 State 和 City 列上,如果 State 列包含 NULL 值,則查詢(xún)顯示 City 列值,如果 case 語(yǔ)句無(wú)效或找不到值,則顯示部分值,即 State返回列值。在這里,我們使用 ORDER BY 子句獲取了應(yīng)用 CASE 的學(xué)生、州和城市的名稱(chēng),以對(duì)結(jié)果行進(jìn)行排序。

在 Simple CASE 中,CASE 的列值與 WHEN 子句中的條件語(yǔ)句值匹配以實(shí)現(xiàn)等價(jià)性,然后在語(yǔ)法中的一個(gè)之后生成結(jié)果值。但如果沒(méi)有相等的值,則返回 ELSE 部分值(如果提供)。

您不應(yīng)在 WHEN 子句值中使用 NULL,因?yàn)槿绻麍?zhí)行,邏輯部分將為 NULL = NULL,結(jié)果為 FALSE。

現(xiàn)在對(duì)于 Search CASE,它遵循與 Simple CASE 相同的邏輯過(guò)程,但搜索案例的一部分使其執(zhí)行起來(lái)有所不同。在這里,滿足 MySQL 數(shù)據(jù)類(lèi)型的值的 CASE 是基于它用于的上下文。例如,如果語(yǔ)句中使用了字符串上下文,則結(jié)果值將采用相同的數(shù)據(jù)類(lèi)型,字符串。此外,如果 CASE 條件表達(dá)式使用數(shù)字上下文,則返回的值將是整數(shù)、小數(shù)或?qū)崝?shù)值數(shù)據(jù)類(lèi)型。

帶有 SELECT 和 ORDER BY 子句的 CASE 語(yǔ)句

創(chuàng)建數(shù)據(jù)庫(kù)表

CREATE TABLE Students(StudentID int, StudentName varchar(255), State varchar(255), City varchar(255));

往數(shù)據(jù)庫(kù)插入新值

INSERT INTO Students (StudentID, StudentName, State, City) VALUES ('01', 'Wade', 'UK', 'London');
INSERT INTO Students (StudentID, StudentName, State, City) VALUES ('02', 'Vivi', 'US', 'NewYork');
INSERT INTO Students (StudentID, StudentName, State, City) VALUES ('03', 'Kyrie', 'CN', 'SH');
INSERT INTO Students (StudentID, StudentName, State, City) VALUES ('04', 'James', '', 'Cleveland ');

查詢(xún)數(shù)據(jù)

SELECT * FROM Students;

帶有 SELECT 查詢(xún)的 CASE 語(yǔ)句

SELECT StudentName, State, City FROM Students ORDER BY (
CASE
WHEN State IS NULL THEN City
ELSE State
END);

具有聚合函數(shù)的 CASE 語(yǔ)句

我們將使用 CASE 語(yǔ)句和 SUM() MySQL 函數(shù)按訂單狀態(tài)從 Orders 表中計(jì)算總銷(xiāo)售額。

創(chuàng)建數(shù)據(jù)庫(kù)表

CREATE TABLE Orders (OrderID int,SalesID int, OrderStatus varchar(255) );

插入數(shù)據(jù)

INSERT INTO Orders (OrderID, SalesID,OrderStatus) VALUES ('10', '001', 'Shipped');
INSERT INTO Orders (OrderID, SalesID,OrderStatus) VALUES ('11', '002', 'Shipped');
INSERT INTO Orders (OrderID, SalesID,OrderStatus) VALUES ('12', '003', 'Not Developed');
INSERT INTO Orders (OrderID, SalesID,OrderStatus) VALUES ('13', '004', 'Success');
INSERT INTO Orders (OrderID, SalesID,OrderStatus) VALUES ('14', '005', 'In Process');
INSERT INTO Orders (OrderID, SalesID,OrderStatus) VALUES ('15', '006', 'Cancelled');

SELECT 語(yǔ)句顯示表數(shù)據(jù)

SELECT * FROM Orders;

得到的數(shù)據(jù)如下:

10    1    Shipped
11    2    Shipped
12    3    Not Developed
13    4    Success
14    5    In Process
15    6    Cancelled

在 SQL SELECT 查詢(xún)中使用 SUM() 和 COUNT 作為聚合函數(shù)的 CASE 語(yǔ)句

SELECT
SUM(CASE
WHEN OrderStatus = 'Success' THEN 1
ELSE 0
END) AS 'Success Count',
SUM(CASE
WHEN OrderStatus = 'On Hold' THEN 1
ELSE 0
END) AS 'Hold Count',
SUM(CASE
WHEN OrderStatus = 'In Process' THEN 1
ELSE 0
END) AS 'Processing',
SUM(CASE
WHEN OrderStatus = 'Shipped' THEN 1
ELSE 0
END) AS 'Shipping count',
SUM(CASE
WHEN OrderStatus = 'Cancelled' THEN 1
ELSE 0
END) AS 'Cancellation Count',
SUM(CASE
WHEN OrderStatus = 'Not Developed' THEN 1
ELSE 0
END) AS 'Not Developed count',
COUNT(*) AS 'Sum Total'
FROM
Orders;

運(yùn)行結(jié)果:

補(bǔ)充:case行轉(zhuǎn)列用法

現(xiàn)有表數(shù)據(jù)如下圖所示(性別列中,1表示男,2表示女):

需統(tǒng)計(jì)各年級(jí)男女人數(shù)。雖然表中數(shù)據(jù)已有各年級(jí)的男女人數(shù),但是還是不夠一目了然。接下來(lái)使用case語(yǔ)句查詢(xún)?nèi)缦拢?/p>

SELECT
    class,
    sum( CASE WHEN sex = '1' THEN population ELSE 0 END ) AS cnt_m,
    sum( CASE WHEN sex = '2' THEN population ELSE 0 END ) AS cnt_f 
FROM
    `school_test` 
GROUP BY
    class;

結(jié)果如下:

這是最經(jīng)典的case行轉(zhuǎn)列用法。

總結(jié)

MySQL CASE 語(yǔ)句允許對(duì) SQL 查詢(xún)執(zhí)行 IF ELSE 邏輯,以檢查條件語(yǔ)句并從數(shù)據(jù)庫(kù)表中獲取所需的結(jié)果集或值。

我們只能將 CASE 語(yǔ)句與存儲(chǔ)過(guò)程、存儲(chǔ)事件、函數(shù)和觸發(fā)器一起使用。它用于將條件表達(dá)式與一系列不同的值進(jìn)行比較,這些值提供了相應(yīng)的結(jié)果,該結(jié)果包含取決于查詢(xún)中使用的上下文的數(shù)據(jù)類(lèi)型。

因此,我們可以說(shuō) MySQL 中的 CASE 語(yǔ)句使查詢(xún)代碼更加高效和可讀。

到此這篇關(guān)于MySQL基礎(chǔ)入門(mén)之Case語(yǔ)句用法的文章就介紹到這了,更多相關(guān)MySQL Case語(yǔ)句用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

參看文章:

MySQL CASE Statement

相關(guān)文章

  • mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作實(shí)例分析

    mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作實(shí)例分析

    這篇文章主要介紹了mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作,結(jié)合實(shí)例形式分析了mysql創(chuàng)建及使用多個(gè)觸發(fā)器的相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • Mysql基礎(chǔ)教程之增刪改查語(yǔ)句

    Mysql基礎(chǔ)教程之增刪改查語(yǔ)句

    這篇文章主要給大家介紹了關(guān)于Mysql基礎(chǔ)教程之增刪改查語(yǔ)句的相關(guān)資料,以下是MySQL最基本的增刪改查語(yǔ)句,很多IT工作者都必須要會(huì)的命令,也是IT行業(yè)面試最??嫉闹R(shí)點(diǎn),需要的朋友可以參考下
    2023-10-10
  • MySQL創(chuàng)建用戶(hù)和權(quán)限管理的方法

    MySQL創(chuàng)建用戶(hù)和權(quán)限管理的方法

    這篇文章主要介紹了MySQL創(chuàng)建用戶(hù)和權(quán)限管理的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • MySQL中的運(yùn)算符使用實(shí)例展示

    MySQL中的運(yùn)算符使用實(shí)例展示

    請(qǐng)問(wèn),什么是最好的參考文檔,我的答案是:真實(shí)可行的樣例語(yǔ)句。
    2010-12-12
  • 一文搞懂MySQL索引所有知識(shí)點(diǎn)

    一文搞懂MySQL索引所有知識(shí)點(diǎn)

    這篇文章主要帶你搞懂MySQL索引的所有知識(shí)點(diǎn),我們通常所說(shuō)的索引,包括聚焦索引、覆蓋索引、組合索引、前綴索引、唯一索引等,沒(méi)有特別說(shuō)明,默認(rèn)都是使用B+樹(shù)結(jié)構(gòu)組織,感興趣的小伙伴可以參考閱讀
    2023-03-03
  • MySQL連接拋出Authentication Failed錯(cuò)誤的分析與解決思路

    MySQL連接拋出Authentication Failed錯(cuò)誤的分析與解決思路

    這篇文章主要給大家介紹了關(guān)于MySQL連接拋出Authentication Failed錯(cuò)誤的分析與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • MySQL連接器提升應(yīng)用功能與數(shù)據(jù)存儲(chǔ)能力

    MySQL連接器提升應(yīng)用功能與數(shù)據(jù)存儲(chǔ)能力

    這篇文章主要為大家介紹了MySQL連接器提升應(yīng)用功能與數(shù)據(jù)存儲(chǔ)能力,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • MySQL索引是啥?不懂就問(wèn)

    MySQL索引是啥?不懂就問(wèn)

    索引是幫助數(shù)據(jù)庫(kù)高效獲取數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu),是基于數(shù)據(jù)表創(chuàng)建的,它包含了一個(gè)表中某些列的值以及記錄對(duì)應(yīng)的地址,并且把這些值存在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,常見(jiàn)的有使用哈希表、B+樹(shù)作為索引
    2021-07-07
  • Mysql中的sql優(yōu)化實(shí)踐詳解

    Mysql中的sql優(yōu)化實(shí)踐詳解

    這篇文章主要介紹了Mysql中的sql優(yōu)化實(shí)踐詳解,SQL優(yōu)化是指通過(guò)改進(jìn)SQL語(yǔ)句的編寫(xiě)和查詢(xún)計(jì)劃的設(shè)計(jì)來(lái)提高數(shù)據(jù)庫(kù)查詢(xún)性能的過(guò)程,在優(yōu)化SQL時(shí),可以采取一些措施來(lái)提升查詢(xún)性能,需要的朋友可以參考下
    2023-09-09
  • Mysql查詢(xún)語(yǔ)句優(yōu)化技巧

    Mysql查詢(xún)語(yǔ)句優(yōu)化技巧

    這篇文章主要介紹了Mysql查詢(xún)語(yǔ)句優(yōu)化技巧的相關(guān)資料,需要的朋友可以參考下
    2016-04-04

最新評(píng)論