SQL的流程控制

本文详细介绍了SQL中的四种条件分支语句(IF、IFNULL、IF...ELSE、CASE)和三种循环语句(WHILE、REPEAT、LOOP),包括语法、用法及示例,帮助读者掌握SQL流程控制的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


条件分支语句

条件分支语句是通过对特定条件的判断,选择一个分支的语句执行。SQL中可以实现条件分支的语句有4种:

  1. IF
  2. IFNULL
  3. IF…ELSE
  4. CASE

1. IF语句

是三目运算符

IF(条件表达式,结果1,结果2);

解释:当“条件表达式”的值为TRUE时,返回“结果1”,否则返回“结果2”

-- IF语句
SELECT uName, IF(uEmail IS null, 'nothing', uEmail) AS uEmail
FROM users
-- 输出前5条记录
LIMIT 5;

2. IFNULL语句

是双目运算符

IFNULL(结果1,结果2);

解释:若结果1的值不为空,则返回结果1,否则返回结果2

-- IFNULL语句
SELECT gdName, ifnull(gdInfo,'no gdinfo') as gdInfo
FROM goods
LIMIT 5;

3. IF…ELSE

语法:

IF 条件表达式1 THEN 语句块1;

[ELSEIF 条件表达式2 THEN

语句块2;]

[ELSE

语句块m;]

END IF;

解释:当“条件表达式1”的值为TRUE时,“语句块1”将被执行;若没有“条件表达式”的值为TRUE,则执行“语句块m”,每个语句块都可以包含一个或多个语句

注意:IF…ELSE语句只用在存储过程的BEGIN END代码块中

-- IF...ELSE语句
CREATE PROCEDURE sp_ltf9()
BEGIN
	DECLARE c INT DEFAULT 0;
	-- 从订单表中查询所有uID=3的订单给变量c
	SELECT COUNT(*) into c 
	FROM orders WHERE uID = 3;
	
	IF C > 0 THEN SELECT "有订单";
	ELSE 
		SELECT "无订单";
	END IF;
	
END

CALL sp_ltf9();

4. CASE语句

CASE语句在SQL中用于实现分支处理,能够根据表达式的不同取值,转向不同的计算或处理,类似高级语言中的switch…case语句

(1)简单CASE结构
  • 简单CASE结构将表达式与一组简单表达式进行比较以确定结果

语法:

CASE 表达式

WHEN 数值1 THEN

语句1;

[WHEN 数值2 THEN
语句2;]

[ELSE
语句n+1;]

END CASE;

-- CASE语句
SELECT uName, uSex,
	-- 性别男对应的SexValue值为1,
	-- 性别女对应的SexValue值为0。
	CASE uSex
		WHEN '男' THEN 1
		ELSE 0
	END AS SexValue
FROM users
LIMIT 5;

(2)CASE搜索结构
  • CASE搜索结构用于搜索条件表达式以确定相应的操作

语法:

CASE

WHEN 条件表达式1 THEN

语句1;

[WHEN 条件表达式2 THEN
语句2;]

[ELSE
语句n+1;]

END CASE;

解释:该结构判断WHEN子句后的“条件表达式”的值是否为TRUE,若为TRUE,则执行对应的“语句”,若所有的“条件表达式”的值均为FALSE,则执行ELSE后的“语句”。若无ELSE子句,则返回NULL。

-- 2.CASE搜索结构
SELECT uName, uCredit,
	CASE
	WHEN uCredit >= 200 THEN "金牌会员"
	WHEN uCredit >= 100 THEN "银牌会员"
	ELSE "铜牌会员"
	END AS grade
FROM users


循环语句

    MySQL中的循环语句只有WHILE、REPEAT和LOOP三种

1.WHILE语句

语法:

[开始标签:] WHILE 条件表达式 Do

语句块;

END WHILE [结束标签];

解释:WHILE语句内的语句块被重复执行,直至“条件表达式”的值为FALSE;只有“开始标签”语句存在,“结束标签”语句才能被使用;若两者都存在,它们的名称必须相同;“语句块”表示需要循环执行的语句

-- WHILE循环
CREATE PROCEDURE sp_ltf5()
BEGIN
	SET @count := 1;  -- 定义变量count且初始值为1
	SET @sum := 0;		-- 定义变量sum且初始值为0
	WHILE @count <= 100 DO
		SET @sum = @sum + @count;
		SET @count = @count + 1;
END WHILE;
SELECT @sum;
END;

CALL sp_ltf5()

2.LOOP语句

LOOP语句可以使某些特定的语句重复执行,实现一个简单的循环。但是LOOP语句本身没有停止循环的语句,必须和LEAVE语句结合使用才能停止循环。否则,该循环就成了一个死循环

语法:

[开始标签:] LOOP

语句块;

END LOOP [结束标签];

解释:“开始标签”参数和“结束标签”参数分别表示循环开始和结束的标识,这两个标识必须相同,可以省略;“语句块”表示需要循环执行的语句

3.LEAVE语句

LEAVE语句主要用于跳出循环控制,与高级语言中的BREAK语句相似

语法:

LEAVE 标签名;

解释:“标签名”用于标识跳出的循环

4.ITERATE语句

ITERATE语句也可用于跳出循环,与高级语言中的CONTINUE语句相似;ITERATE语句只跳出本次循环,然后直接进入下一次循环

语法:

ITERATE 标签名;

解释:“标签名”表示循环的标识

5.REPEAT语句

REPEAT语句是有条件控制的循环语句,当满足特定条件时,就会跳出循环语句。

语法:

[开始标签:] REPEAT

语句块;
UNTILL 条件表达式;

END REPEAT [结束标签]

解释:UNTILL关键字表示直到满足“条件表达式”时结束循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

afei00123

您的支持是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值