sql if用法?

sql if用法?

举报|  2009-04-16 10:50 yuzhan_hai  |  浏览 7050 次
有一张表rbb 里面有scsj,ty,yy
把整张表输出 select * from rbb,我现在想输出时进行筛选 scsj<>24时TY等于空SCSJ=24时TY等于原有数值不变,其它都不变输出整张表!
下面的几个我都试了 说是少关键字 运行不了 这是为什么呢
2009-04-16 11:04 提问者采纳
sql的select里没有if else,有类似的case when then else end 
------------------- 
select 
scsj, 
case scsj when 24 then ty 
else null end as ty, 
yy from rbb
提问者评价
select scsj, case scsj when 24 then ty else null end as ty, yy from rbb
评论(3)  |  5  4
2015-9-16 20:38 得時勿失
sql里面谁说没有if,孤陋寡闻还点赞 回复
2011-7-19 14:35 lemonzone2010
case when x=y then x when x>y then y else x end 回复
2010-9-11 17:51 x60024577
select scsj,(case when scsj<>24 then null when scsj=24 then ty) ty,yy from rbb 回复

lxm19872006 | 六级 采纳率40%

擅长: 百度空间

为您推荐:

按默认排序 | 按时间排序

其他3条回答

2009-04-16 10:53 俄尔普斯  | 八级
if 是在存储过程中用的
在sql 中你可以用case 效果一样
例子:
select * from rbb
where case when scsj <> 24 then ty = null
else scsj = 24 then ty
end
评论  |  0  0
2009-04-16 10:52 qq82557566  | 六级
if sc>24
begin
select * from rbb
end
此上是查询sc大于24的数据。。 
后面的一样。。。
评论  |  0  2
2009-04-16 10:58 javagarden  | 九级
select * from rbb 
where case when scsj <> 24 then ty = null 
else scsj = 24 then ty 
end
<think> 我们正在讨论SQLIF语句的使用方法。根据引用内容,IF语句在SQL中用于条件判断,允许根据不同的条件执行不同的操作。不同数据库系统(如MySQL、Oracle等)可能有不同的语法,但基本逻辑相似。 我将整理一个清晰的指南,包括: 1. IF语句在不同上下文中的使用(如在SELECT查询、存储过程等) 2. MySQL和Oracle的示例(因为引用中提到了这两个数据库) 3. 常见应用场景 注意:由于用户要求"尽可能多的参考用户上一次的问题和你的回答",但这是用户第一次询问此问题,因此我将基于引用内容进行全面回答。 </think> ### SQL语句中IF条件判断的使用方法详解 在SQL中,`IF`语句是实现条件逻辑的核心工具,根据数据库系统的不同,其语法和使用场景有所差异。以下是主要用法总结: #### 一、SELECT查询中的条件判断(MySQL示例) ```sql SELECT IF((SELECT COUNT(*) FROM users) > 100, '大型用户库', '小型用户库') AS user_size FROM dual; ``` - **功能**:根据用户表数量返回不同文本 - **语法**:`IF(condition, value_if_true, value_if_false)` - **应用场景**:动态计算列值,简化CASE语句[^2] #### 二、存储过程中的流程控制(标准SQL) ```sql CREATE PROCEDURE CheckInventory(IN product_id INT) BEGIN DECLARE stock INT; SELECT quantity INTO stock FROM inventory WHERE id = product_id; IF stock > 0 THEN UPDATE orders SET status = '可发货'; ELSEIF stock = 0 THEN UPDATE orders SET status = '缺货'; ELSE SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存异常'; END IF; END ``` - **结构特点**: - 使用 `IF...THEN`、`ELSEIF...THEN`、`ELSE` 多分支判断 - 必须以 `END IF` 结束 - 支持嵌套逻辑[^3] - **适用场景**:复杂业务逻辑验证、数据操作流程控制 #### 三、Oracle中的PL/SQL特殊语法 ```sql DECLARE v_salary employees.salary%TYPE; BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id = 100; IF v_salary > 10000 THEN DBMS_OUTPUT.PUT_LINE('高薪员工'); END IF; -- 注意分号位置 END; ``` - **关键区别**: - 使用 `%TYPE` 声明变量类型 - 条件后无 `THEN` 关键字 - 语句块结束需显式指定 `END IF`[^4] #### 四、跨数据库通用方案 ```sql -- 使用CASE表达式替代IF SELECT product_name, CASE WHEN stock > 50 THEN '库存充足' WHEN stock BETWEEN 10 AND 50 THEN '库存正常' ELSE '需补货' END AS stock_status FROM products; ``` - **优势**:兼容所有SQL标准数据库 - **限制**:仅适用于查询语句,不可用于流程控制 > **最佳实践建议**: > 1. 简单值判断用 `SELECT IF()`(MySQL)或 `CASE`(通用) > 2. 存储过程控制流用 `IF...END IF` 块 > 3. Oracle中注意变量声明方式和分号位置 > 4. 嵌套层级不超过3层以保证可读性[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值