MySQL中的特殊运算符和函数

80 阅读2分钟

“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情

MySQL运算符 != 、<>、= 、<=>

在mysql当中也有一些看上去很相似的运算符,我们可以了解一下,然后按照场景选择合适的运算符。

1、运算符:!= 和 <>

在MySQL中!= 和 <> 都表示不等于,查询网上的资料说,之前是:!=,新的规范中建议为: <>

select * from tableName where column is not null and LENGTH(trim(column))<>0 

2、运算符:= 和 <=>

<=>运算符相当于封装了= 和 is ,既可以判断 非NULL值,也可以用来判断NULL值,也可以用来判断基本数据类型,相比较之下,可能<=>的可读性稍差。 在sql语句中=is是不能混用的,=运算符只能判断基本数据类型,is只能判断null。

select * from user where phone is null;
select * from user where phone <=> null;
select * from user where phone = `123456`;
select * from user where phone <=> `123456`;

<=> 只能在MySQL数据库中使用,column1 <=> NULL 得 0 等价 column1 is NULL,NOT(column1 <=> NULL) 等价 column1 is NOT NULL;
当col1,col2两个可能存在NULL值的列需要进行相等比较时,可以使用 col1 <=> col2,可以把null=null的也关联起来。 <=>运算符的使用场景,基本适用于搜索条件,无需判断某一搜索条件是否为null。

ROW_NUMBER() OVER()函数

分组排序功能

ROW_NUMBER()函数用于返回其分区中每一行的顺序号。它是一种窗口作用,行号从1开始到分区中存在的行数。

语法格式

ROW_NUMBER() OVER(partition by 分组列 order by 排序列 desc) 在使用ROW_NUMBER() OVER()函数时,OVER()里头的分组以及排序的执行晚于where、group by、order by的执行。

select *,ROW_NUMBER() over(partition by column1 order by column2)as rank FROM tableName

partition by按就诊标识将结果集分成多个区。
order by按照诊断时间对结果集排序。

ROW_NUMBER()

DENSE_RANK()函数

dense_rank()是指排序数字是连续的、不间断。当有相同的分数时,他们的排名结果是并列的
语法格式:dense_rank() over(partition by 分组列 order by 排序列 desc)