mysql排序之if(isnull(字段名),0,1),fild 或者 if(isnull(字段名),1,0),fild

本文介绍了在MySQL数据库中处理NULL值排序的方法。通过使用IF(ISNULL)函数,可以灵活地控制NULL值在排序中的位置,使其前置或后置。文章详细解析了不同排序方式的实现原理,帮助读者掌握更高级的数据检索技巧。

最近在使用mysql排序的时候,比如按照sort排序,于是 : select filds from table order by sort asc

null排在前面。

看到同事是这样处理的:IF(ISNULL(sort1),1,0), sort1

默认情况下,mysqlnull算作最小值。如果想要手动指定null的顺序,可以这样处理:

1. 将null强制放在最前(默认就是这样)

SELECT * FROM BGM_LIST ORDER BY if(isnull(SORT),0,1),SORT ASC //null, null, 1,2,3,4

2. 将null强制放在最后

SELECT * FROM BGM_LIST ORDER BY if(isnull(SORT),1,0),SORT ASC //1,2,3,4,null,null

SELECT * FROM BGM_LIST ORDER BY if(isnull(SORT),1,0),SORT DESC // 4,3,2,1,null,null

3. 解释

if(isnull(字段名),0,1),fild为例,它的意思是将该字段根据是否为null值分成两部分,值为null行相当于得到了一个隐含的排序属性0,值为非null的行相当于得到了一个隐含的排序属性1,在排序的时候,先根据这一隐含属性进行升序排列,因为if(isnull(字段名),0,1),fild相当于if(isnull(字段名),0,1),fild asc省略了asc而已,所以自然地,排序字段为null的那些行(隐含排序属性)会在最前。if(isnull(字段名),1,0)反之。

参考:https://www.jianshu.com/p/04b74770d731

### 如何在数据库表的指定列后新增字段 在关系型数据库中,`ALTER TABLE` 是一种常用的 SQL 语句,用于修改现有表结构。如果需要在一个特定的位置(即某列之后)添加新字段,则可以利用 `AFTER` 子句来完成这一操作。 对于支持此功能的数据库管理系统(DBMS),如 MySQL 和 SQLite,在指定列后新增字段可以通过以下方式实现: #### MySQL 中的实现方法 MySQL 提供了直接的支持,允许开发者通过 `AFTER` 关键字指明新字段应插入在哪一列之后。例如: ```sql -- 在表 t 的 B 列后新增名为 fild 的字段 ALTER TABLE t ADD COLUMN fild VARCHAR(20) NOT NULL AFTER B; ``` 上述代码片段展示了如何向表 `t` 新增一个名为 `fild` 的字段,并将其放置于已有字段 `B` 后面[^2]。 #### SQLite 中的情况 SQLite 对标准 SQL 支持有限,因此其原生语法不完全兼容其他 DBMS 的特性。尽管如此,仍可通过间接手段达成目标——先创建临时表以调整顺序再迁移数据回原始表的方式较为常见[^4]。不过需要注意的是,这种方法复杂度较高且可能影响性能,建议仅当必要时采用。 #### Oracle 数据库中的处理办法 虽然引用未提及具体做法,但在 Oracle 中也可以类似地执行该类变更请求。通常情况下会涉及更多额外步骤因为默认行为不允许简单声明式定义位置关系[^3]。 综上所述,不同类型的 RDBMS 可能存在差异化的解决方案路径;然而最普遍适用的形式还是基于显式的定位指示符比如 'after' 来构建相应的 DDL 命令字符串形式表达意图从而达到预期效果。 ```sql -- 示例:适用于 MySQL 或某些版本的 SQLite (假定支持扩展) ALTER TABLE example_table ADD COLUMN new_column_name DATATYPE CONSTRAINTS... AFTER existing_column_name; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值