mysql 、sql server 常见的区别

NULL   处理

MySQL

IFNULL(col , val)

SQL Server

ISNULL(col,val)

表名、列名等 一般不推荐用保留字 ,如果非要保留字

MySQL

用用着重号,即 反引号 ·· 包括

select col from GROUP

SQL Server

用用着重号,即 大括号 [] 包括

select col from [GROUP]

+ 、- 、*、/运算符

MySQL

数值型文本,会隐式转换成数值

非数值型文本, 会隐藏转换成0

除数为0 ,结果 NULL

SQL Server

数值型文本,会隐式转换成数值

非数值型文本, 会报错

除数为0 ,结果 报错

null 比较

MySQL

select 1='1' 结果1

select 1='a' 结果0

select 'a'='b' 结果0

select 'a'='a' 结果0

select 0='a' 结果 1

select null=null 结果 0 select null <=> null 1 <=> 安全等于

select null = 'a' 结果 0

字符串存在隐式转换,如果转换数值不成功,则看作 0

两边都是字符串的话,则按照 ASCII 比较

只要有null 参与判断,结果就是null


like 模糊查询

Dept 假如: z_en

MySQL 默认转义符号

select Dept from Table_1 where Dept like 'z_%'

select Dept from Table_1 where Dept like 'zKaTeX parse error: Expected group after '_' at position 1: _̲%' ESCAPE ''
SQL Server 必须指定 转移符号

select Dept from Table_1 where Dept like 'z_%' escape ''

select Dept from Table_1 where Dept like 'zKaTeX parse error: Expected group after '_' at position 1: _̲%' escape ''

select Dept from Table_1 where Dept like 'z[_]%'

REGEXP 正则支持性

Mysql 支持正则

select col from table where col REGEXP '正则';

select col from table where col RLIKE '正则';

Sql Server 不支持的 只支持like 模糊查询

TOP函数和limit函数的异同

(1)都是获取限制行数据的SQL语法语句。

(2)SQL Server数据库支持 TOP 函数,而MY SQL数据库支持limit函数。

(3)limit函数有两种语法,top函数只有一种语法且能直接获取百分比的行数数据。

(4)top函数放在select语句中from语法前,而limit放在查询语句的最后。

MySQL 5.7

LIMIT 偏移量,条数 # 如果偏移量 0 可以省略

select * from table LIMIT 10 # 等价 LIMIT 0,10

MySQL 8.0

LIMIT 偏移量,条数 # 如果偏移量 0 可以省略

LIMIT 条数 OFFSET 偏移量 # 如果偏移量 0 可以省略 8.0 才支持

SQL Server

select top n * from # 支持数值

select top n percent * from # 支持百分比

还是LIMIT 功能比较实用,如 分页查询。

SQL Server 实现分页 就比较麻烦啦。 ROW_NUMBER() over() 这个

select ROW_NUMBER() over( order by ID) as num, * from Table_1

SQL Server ROW_NUMBER 、RANK、DENSE_RANK

ROW_NUMBER()排序,排序是所有数据排序,最大序号为数据的行总数,号不会重复

采用 RANK()排序,最大序号也为数据的行总数,但是跳过了相同的,简而言之就是序号不连续; 并列 1,1 后面 3啦

采用DENSE_RANK()排序,则是序号连续,但是有并列。 并列 1,1 后面紧接 2


** ROW_NUMBER 、RANK、DENSE_RANK**

ROW_NUMBER () over( order by 列) # 不论【列】是否存在重复, 序号都不会重复的,通常用唯一个标识的列

RANK() over(order by 列) # 列 存在重复, 则 顺序号一致, 两个人并列第一,且第二名 顺序号 就是 3 顺序号 不连续

DENSE_RANK() over(order by 列) # 列 存在重复, 则 顺序号一致, 两个人并列第一,且第二名 顺序号 就是 2 顺序号 连续

SQL 92 SQL99

相关推荐
承渊政道9 小时前
从ROWNUM到LIMIT:KES、Oracle与PostgreSQL的执行顺序差异解析
数据库·数据仓库·sql·mysql·安全·postgresql·oracle
花生壳儿10 小时前
Docker容器安装MySQL数据库
数据库·mysql·docker
尚雷558010 小时前
Oracle 多租户架构下常用运维SQL
数据库·sql·oracle
无小道10 小时前
Mysql——吃透事务以及隔离级别
mysql·面试·事务·隔离级别
StarRocks_labs10 小时前
KaptureCX 大规模实时分析架构演进:基于 RisingWave 与 StarRocks 的最佳实践
starrocks·sql·clickhouse·ai赋能·kapture
Elastic 中国社区官方博客11 小时前
Elasticsearch ES|QL “读取时模式”:你的未映射字段一直都在那里
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客11 小时前
Elasticsearch 查询日志:每个查询一行协调器级别日志,适用于 ES|QL、DSL、SQL 和 EQL
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索·可用性测试
爱码小白11 小时前
MySQL易忘知识点梳理
数据库·mysql
战南诚11 小时前
mysql - 行列数据转换技巧
数据库·mysql
雷工笔记11 小时前
不同数据库SQL语句中MD5的写法
数据库·sql