Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >聊技术 | SQL和SQL之间细微的差异

聊技术 | SQL和SQL之间细微的差异

作者头像
做数据的二号姬
发布于 2023-09-06 05:14:31
发布于 2023-09-06 05:14:31
29600
代码可运行
举报
运行总次数:0
代码可运行

22

2023-08

聊技术 | SQL和SQL之间细微的差异

SQL和SQL之间大差不差,但是恰好就是差得这么些小玩意,看起来简单,真的搞起来就让人头秃了~简单聊一下MySQLPostgreSQLSQL Server之间差得那么一点点东西。

LEARN MORE

图片由海艺AI绘制

SQL是数分狗怎么都绕不过去的一个坎。每次应届生求职面试辅导的时候我都千叮咛万嘱咐,一定要看看SQL,不为啥,问就是面试必问。不管你用得是哪个数据库,SQL的语法都是大差不差的,不像python之类的,不容易出面试题。

虽然在面试中SQL都是大差不差的,但是在实操中,恰好是差得那一点经常让人头秃,比如我用习惯了mysql,切换到pgsql之后经常在一些细节上写错,再到使用sql server也是一样,属于大错不犯小错不断的情况。

这里总结一些差异:

1.创建表时自增主键的语法差异 MySQL:AUTO_INCREMENT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

PostgreSQL:SERIAL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

SQL Server:IDENTITY

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE students (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

2.字符串连接的语法差异

MySQL:使用CONCAT函数来连接字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
CONCAT(first_name, ' ', last_name) AS full_name 
FROM students;

PostgreSQL:使用||运算符来连接字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
first_name || ' ' || last_name AS full_name 
FROM students;

SQL Server:使用+来连接字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
first_name + ' ' + last_name AS full_name 
FROM students;

3.字符串截取

MySQL和SQL Server只支持这种写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
SUBSTRING(name, 1, 3) AS initials 
FROM students;

PostgreSQL除了上面这种写法,还支持这种写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT name[1:3] AS initials FROM students;

4.分页查询语法

MySQL和PostgreSQL都是使用LIMIT和OFFSET关键字实现分页查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students LIMIT 100 OFFSET 20;

SQL Server不按套路出牌,使用TOP关键字和子查询实现分页查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
TOP 100 * FROM 
(SELECT ROW_NUMBER() OVER (ORDER BY id) AS row_num, 
* FROM students) 
AS temp WHERE row_num > 20;

5.日期格式化写法

MySQL:使用DATE_FORMAT函数进行日期格式化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
DATE_FORMAT(created_at, '%Y-%m-%d') AS date 
FROM products;

PostgreSQL:使用TO_CHAR函数进行日期格式化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
TO_CHAR(created_at, 'YYYY-MM-DD') AS date 
FROM products;

SQL Server:使用CONVERT函数进行日期格式化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
CONVERT(VARCHAR(10), created_at, 120) AS date 
FROM products;

6.布尔类型

MySQL: 使用0或1来表示布尔类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE my_table (
  is_active TINYINT(1)
);

PostgreSQL: 使用TRUE或FALSE来表示布尔类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE my_table (
  is_active BOOLEAN
)
;

SQL Server: 使用bit来表示布尔类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE my_table (
  is_active BIT
);

7.数据引用方式

MySQL使用反引号``

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select `姓名` from student;

PostgreSQL和SQL Server使用双引号""

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select "姓名" from student;

8.NULL值处理

MySQL可通过IFNULL函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select ifnull(age,0) from student;

PostgreSQL通过COALESCE函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select COALESCE(age,0) from student;

SQL Server通过ISNULL函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select isnull(age,0) from student;

遇到过&被坑过的问题就这么多,真的是不做对比不知道,一做对比就发现差异点还是很多的。尤其是当用惯了某一种之后切换到另一种,一时半会儿反应不过来的时候,着实有点坑爹。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 做数据的二号姬 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【数据库设计和SQL基础语法】--SQL语言概述--数据类型和约束
小数类型是一种数据类型,用于存储包含小数部分的数值。在数据库中,常见的小数类型包括:
喵叔
2023/12/05
4300
【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(一)
在大多数情况下,SQL语句的结束符是分号(;)。分号用于告诉数据库解析器一个SQL语句的结束,可以开始解析下一个语句。在单条SQL语句的情况下,分号是可选的,因为大多数数据库会在遇到换行时自动将其视为语句结束。例如:
喵叔
2023/11/30
1.1K0
【数据库设计和SQL基础语法】--表的创建与操作--插入、更新和删除数据
INSERT INTO语句是用于向数据库表中插入新记录的SQL语句。其基本语法如下:
喵叔
2023/12/08
1.3K0
学生管理系统
python,以目前的能力编写一套实现学生信息增删改查的数据库系统。或许后续会不断提升不断完整的搞出这一套简单的系统(增删改查功能),还差得很多。加油……
cuijianzhe
2022/06/14
2.9K0
写了 5 年代码,就没见过这么全的MySQL 关联查询知识
关联查询是SQL语言中的一种基本操作,它允许你根据一个或多个共同字段将两个或多个表连接起来。这些共同字段通常被称为连接条件或连接键。通过关联查询,你可以从一个或多个表中检索出满足特定条件的数据行,并将它们组合成一个结果集。
小白的大数据之旅
2024/11/20
3700
写了 5 年代码,就没见过这么全的MySQL 关联查询知识
一些常用的SQL语句
SQL 学过一点,但是没有怎么用,因此用的时候经常又要去看一遍教程,不如直接把经常会用到的语句给记录下来,下次直接看这一篇就行了。
棒棒鸡不棒
2022/09/01
6210
【数据库设计和SQL基础语法】--表的创建与操作--表的修改和删除操作
在这些例子中,通过使用 ALTER TABLE 语句并指定 ADD COLUMN,可以成功向现有表中添加新的列。
喵叔
2023/12/10
4170
MySQL 【教程三】
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务,详细了解可以看一下这篇【常识与进阶】!
IT茂茂
2020/03/26
2.1K0
【数据库设计和SQL基础语法】--表的创建与操作--创建表的语法和实例
数据库表是数据库中的一种结构化数据存储方式,它主要用于组织和存储数据。以下是数据库表的一些主要作用:
喵叔
2023/12/07
3710
PostgreSQL 基础与实践
最近想着把工作中常用到的技术点与工具做一些整理总结,一方面梳理一下这些知识点,加深使用记忆,也可以作为之后使用的查阅。
pseudoyu
2023/04/11
1.3K0
PostgreSQL 基础与实践
sql算术运算符_SQL运算符教程–按位,比较,算术和逻辑运算符查询示例
At its core, the internet and all its applications are just data.
用户7886150
2020/11/29
9450
Oracle与Postgresql在PLSQL内事务回滚的重大差异
https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS598
mingjie
2022/09/19
6100
SQL ---- 语法学习笔记
SQL语法学习 基础篇 基础篇实例用表 1. Store_Information 表格 store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-09-1999 2. Geography 表格 region_name store_name East Boston East New York West Los Angel
Rattenking
2021/01/30
7720
猫头鹰的深夜翻译:如何优化MYSQL查询
索引除了能够确保唯一的标记一条记录,还能是MySQL服务器更快的从数据库中获取结果。索引在排序中的作用也非常大。
眯眯眼的猫头鹰
2018/10/31
6080
【数据库设计和SQL基础语法】--查询数据--排序
使用 DESC 关键字可以实现按照 column_to_sort 列的降序(从大到小)排序。
喵叔
2023/12/18
3020
重学 SQL(一)
从这篇开始,我们通过几章的内容,重新学习 SQL 从基础到进阶的方方面面,塑造良好的 SQL 编写思维和逻辑能力。
1ess
2021/10/29
1.2K0
36条MySQL实用小技巧
实际上一直都有在学习,只是公众号的算法机制让很多人刷不到,看得人比较少,这才将这些内容分享到各个群和朋友圈,希望能让更多人看到。
SQL数据库开发
2024/04/25
1180
36条MySQL实用小技巧
Django中ORM介绍和字段及其参数
ORM介绍 ORM概念   对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。   简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。   ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 ORM的由来   字母‘O’起源于“对象”(Object),'R'代表“关系”(Relational)。   几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业
新人小试
2018/04/12
2.9K0
Django中ORM介绍和字段及其参数
MySQL 【进阶查询】
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务,详细了解可以看一下这篇【常识与进阶】!
IT茂茂
2020/03/27
12.5K0
MySQL 【进阶查询】
MySQL 高效查询的实践指南:SQL语句优化篇
在 MySQL 数据库中,编写高效的 SQL 语句不仅能提升查询速度,还能优化资源使用,避免潜在的性能问题。本文将详细介绍 MySQL 查询中的一些强制性和推荐性规范,并提供具体的示例来帮助你更好地理解和应用这些最佳实践。
千羽
2024/07/31
2320
MySQL 高效查询的实践指南:SQL语句优化篇
推荐阅读
相关推荐
【数据库设计和SQL基础语法】--SQL语言概述--数据类型和约束
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档