了解通用 SQL 语法

news2024/12/24 8:27:06

上世纪 90 年代中期,Sun Microsystems 公司推出了一种“一次编写,[随处]运行”的编程语言。这种语言就是 Java。尽管时至今日它仍然是最受欢迎的编程语言之一,但其口号却显得有些过于乐观。Java 语言的发展历程与 SQL 有着诸多相似之处。Java 也可以几乎不做修改或只稍作修改就能从一个数据库移植到另一个数据库,甚至跨操作系统运行。至少,这是我们的梦想。但在现实世界中,生产级代码为了在新环境中运行往往需要进行一些调整。本文将概述 SQL 语法在不同数据库供应商之间可能存在的差异的一些原因。

ANSI SQL 规范

ANSI,即美国国家标准学会(American National Standards Institute)的缩写,定义了用于与关系型数据库交互的基本语法规则和命令集。然而,与浏览器对 HTML、CSS 和 ECMAScript的实现类似,大多数数据库对 SQL 的实现都是不完美的和/或不完整的。ANSI SQL 在合规性方面允许一定程度的灵活性,因此没有严格的供应商要求来实现完整的规范。但即使在最基本的最低层次上,所有供应商之间也至少存在一些差异。

除此之外,还有非标准扩展,所有供应商都以一种或另一种形式支持这些扩展。即使是像索引这样简单的东西也是非标准的。ANSI SQL 规范对索引没有任何规定,因此每个供应商的索引实现都是对标准的补充。这为供应商提供了机会,让他们可以使用他们认为适合自己的品牌或最有利的语法。结果是:虽然各种 SQL 方言在很大程度上是相同的,但也存在一些差异。

编写通用的 SQL

如果你想让 SQL 代码在所有类型的数据库上都能工作,你应该坚持使用标准的 SQL 语句,如SELECT、WHERE、GROUP BY、ORDER BY 等。聚合函数如 SUM()、AVG()、MIN() 和 MAX()也会被所有流行的数据库类型所理解,包括 SQL Server、MySQL、PostgreSQL、SQLite 和 Oracle。以下是一个应该在任何数据库上都能工作的查询示例:

Select    
    c.customer_id,
    c.customer_name,
    SUM(p.amount) AS total_sales
FROM customers AS c
    LEFT JOIN purchases AS p
    ON c.customers_id = p.customer_id
WHERE
    c.customer_location = 'Canada'
GROUP BY
    c.customer_name ASC;

学习 SQL

如果你刚开始接触数据库管理或开发,你应该专注于编写能够适用于尽可能多数据库类型的SQL。你还应该使用一个高度符合ANSI SQL标准且流行的数据库,比如MySQL。在过去的几十年里,它一直是最受欢迎的数据库。而且它高度符合标准,因此是学习的好工具。关于它的文章有很多,而且大多数SQL示例都是在MySQL上开发和运行的。Microsoft SQL Server紧随其后。然而,它使用Microsoft的SQL方言,称为T-SQL。由于SQL Server的SQL与其他平台差异最大,因此它不是一个理想的入门数据库。你可能更适合选择PostgreSQL或SQLite,它们也很受欢迎且符合ANSI标准。SQLite因其体积小、可移植性强而特别吸引初学者。

以下是你可能会在数据库之间发现的一些差异:

区分大小写

例如这个子句 WHERE name = 'Rob' Or WHERE name = 'rob':

MySQLPostgreSQLSQLiteSQL Server
不区分大小写区分大小写区分大小写区分大小写

引号的使用

一些数据库仅支持单引号,而其他数据库则同时支持单引号和双引号:

MySQLPostgreSQLSQLiteSQL Server
都支持仅支持单引号都支持仅支持单引号

列和表别名

MySQL、PostgreSQL 和 SQLite 都使用“AS”关键字来表示别名,即 SELECT SUM(score) AS avg_score,而 SQL Server 则使用等号,即 SELECT SUM(score) AS avg_score(但这里有一个错误,SQL Server 也应该使用 AS 关键字来定义别名,正确的写法是 SELECT SUM(score) = avg_score)。

Date/Time 函数

每个数据库都实现了自己的日期和时间函数:

MySQLPostgreSQLSQLiteSQL Server
CURDATE() CURTIME() EXTRACT()CURRENT_DATE() CURRENT_TIME() EXTRACT()DATE('now') strftime()GETDATE() DATEPART()

Navicat Premium:通用工具

Navicat Premium 是处理多种数据库类型的首选工具。它不仅可以同时连接到多个数据库,而且其“代码段”功能使得针对你偏好的数据库类型编写查询比以往任何时候都更加容易。在 SQL 编辑器中工作时,“代码段”功能允许你将可重用的代码插入到 SQL 语句中。除了可以访问一组用于常见控制流语句和函数的内置代码片段集合外,你还可以定义自己的代码片段。

code_snippets (119K)

你可以下载 Navicat 17 进行 为期 14 天的全功能免费试用。它适用于 Windows、macOS 和 Linux操作系统。

 

Navicat 17 最新资讯 & 技术干货

- Navicat 17 体验官火热招募中

- Navicat- 17 新特性 | 用户界面再升级

- Navicat 17 新特性 | 模型设计创新与优化

- Navicat 17 新特性 | 查询与配置

- Navicat 17 新特性 | Navicat BI 功能革新升级

- Navicat 17 新特性 | 原生支持国产 Linux ARM 平台以及银河麒麟与统信操作系统

- 聚焦 Navicat 17 新特性 | 数据字典提升数据结构清晰度

- Navicat 17 新增 PolarDB 与 Garnet 数据库

- Navicat 17 新特性 | 聚焦 MongoDB

- Navicat 17 新特性 | 新增 Redis 哨兵部署模式

- 免费版 Navicat Premium Lite

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言常见字符串函数模拟实现一:(strlen,strcpy,strcat,strcmp,strstr )

strlen模拟实现 重点:1.字符串已经\0作为结束标志,strlen返回的是字符串\0前面出现的字符个数(不包含\0) 2.参数指向的字符串必须要以\0结束。 3.注意函数的返回值是size_t,是无符号的,加减是无法对比的。…

实用的云手机软件有哪些?高性价比云手机推荐

云手机不仅能模拟传统手机的功能,还能实现跨设备操作、数据同步等,极大地提升了用户的便利性。在众多云手机软件中,哪些软件表现出色呢?下面整理了一些功能强大、操作便捷且性能稳定的云手机APP,供大家参考选择。 1. O…

编程练习2 数据单元的变量替换

示例1: 1,2<A>00 示例2: 1,2<A>00,3<A>00 示例3: <B>12,1,2<B>1 示例4: <B<12,1 输出依次如下&#xff1a; #include<iostream> #include<vector> #include<string>using namespace std;/* 字符分割函数 将传入…

IIS中配置HTTPS证书的详细步骤

在IIS&#xff08;Internet Information Services&#xff09;中导入HTTPS证书的步骤主要包括下载证书、导入证书和为网站绑定证书几个环节。以下是详细的步骤说明&#xff1a; 一、下载SSL证书 首先&#xff0c;确保你已经从证书颁发机构&#xff08;CA&#xff09;下载了适…

三.python入门语法2

目录​​​​​​​ 1.控制结构 1.1.顺序结构 1.2.选择结构 习题 1.3.循环结构 1.3.1. while语句 1.3.2.for语句 1.3.3.循环嵌套 1.4.break语句 1.5.continue语句 1.6.pass语句 习题 1.控制结构 在学习控制结构之前我们通过一个故事来简单的描述一下控制结构&…

DAMODEL丹摩智算:LLama3.1部署与使用

文章目录 前言 一、LLaMA 3.1 的特点 二、LLaMA3.1的优势 三、LLaMA3.1部署流程 &#xff08;一&#xff09;创建实例 &#xff08;二&#xff09;通过JupyterLab登录实例 &#xff08;3&#xff09;部署LLaMA3.1 &#xff08;4&#xff09;使用教程 总结 前言 LLama3…

前端sm2国密加密时注意

如下方法&#xff1a; export function encrypt(str) {const sm2 require("sm-crypto").sm2;const cipherMode 1; // 1 - C1C3C2&#xff0c;0 - C1C2C3&#xff0c;默认为1//自定义密钥let publicKey "xxxxxxxx";//此处加密let a sm2.doEncrypt(str,…

【数字图像处理】简单粗暴介绍最近邻插值和双线性插值(附python实现)

目录 前言最近邻插值理论与公式部分代码部分优缺点 双线性插值理论与公式部分代码实现优缺点 双三次内插 前言 最近邻插值和双线性插值是两种常见的用于图像处理的方法&#xff0c;主要是用于实现图像的放大和缩小。本文中将以最为简单粗暴的方式介绍两种方法的原理&#xff0…

USB-CAN的使用说明

文章目录 前言一、USB-CAN模块二、产品特性三、引脚说明四、使用说明1.USB驱动安装2.CAN配置工具说明1. 菜单栏&#xff1a;2. 模式选择和收发数据显示&#xff1a;3. 数据发送4. 发送模式 五、AT指令设置参数六、硬件测试 前言 CAN总线协议&#xff1a;一种多主、串行通信协议…

淘客系统开发之卷轴模式系统源码功能分析

随着互联网技术的快速发展&#xff0c;电商行业不断创新&#xff0c;探索更加高效、有趣的用户参与机制。其中&#xff0c;卷轴模式作为一种新兴的商业模式&#xff0c;以其独特的积分兑换和任务系统&#xff0c;在淘客系统开发中得到了广泛应用。本文将从技术角度&#xff0c;…

汽车免拆诊断案例 | 2016 款宾利GT车仪表盘上的多个故障灯点亮

故障现象 一辆2016款宾利欧陆GT车&#xff0c;搭载CYCB发动机&#xff0c;累计行驶里程约为4.5万km。据车主反映&#xff0c;发动机偶尔无法起动&#xff0c;仪表盘上的多个故障灯点亮&#xff08;图1&#xff09;。此外&#xff0c;刮水器、电动车窗及空调等电器设备功能失效…

IDC 中国数据安全软件市场报告:顺应平台化趋势,打造综合性的数据安全平台

近期&#xff0c;IDC 发布了针对中国数据安全软件市场规模的预测报告——《中国数据安全软件市场预测&#xff0c;2024-2028》&#xff08;Doc# CHC51601524&#xff0c;2024年9月&#xff09;。该报告针对 2024-2028 年中国数据安全软件市场的规模、增长速度、驱动因素、阻碍因…

剧本杀全新体验:线上剧本杀发挥重要优势

剧本杀作为集游戏社交休闲为一体的消费方式&#xff0c;吸引了众多年轻人&#xff0c;让玩家在游戏中体验到各种角色&#xff0c;还能够满足社交需求。当下&#xff0c;剧本杀市场仍然在快速发展中&#xff01; 剧本杀市场创新 不过&#xff0c;在多年的发展中&#xff0c;剧…

智谱清影 - CogVideoX-2b-部署与使用

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 体验地址&#xff1a;[丹摩DAMODEL官网](https://www.damodel.com/console/overview) CogVideoX 简介本篇将详细介绍使用丹摩服务器部…

C++20中头文件compare的使用

<compare>是C20中新增加的头文件&#xff0c;此头文件是language support库的一部分。它包括&#xff1a;concepts、classes、customization point objects、functions。 1.concepts&#xff1a;三向比较运算符<>&#xff0c;目的是简化比对对象的过程&#xff0c;…

ant design vue中带勾选表格报Tree missing follow keys: ‘undefined‘解决方法

1、这里一定要给columns和data-source设置key即可。 <div><a-table:row-selection"rowSelection":dataSource"tableList":columns"columns":scroll"{ x: 100% }":pagination"false":loading"loading"&g…

戴尔R750 H755N raid卡数据盘改直通模式

1、重启机器进入配置模式&#xff0c;重启后按F2进入bios模式

计算机网络(九) —— Tcp协议详解

目录 一&#xff0c;关于Tcp协议 二&#xff0c;Tcp报头字段解析 2.0 协议字段图示 2.1 两个老问题 2.2 16位窗口大小 2.3 32位序号和确认序号 2.4 6个标记位 三&#xff0c;Tcp保证可靠性策略 3.1 确认应答机制&#xff08;核心&#xff09; 3.2 超时重传机制 3.3 …

最新最详细的Mastercam安装包下载安装教程(保姆级)

正如大家所熟悉的&#xff0c;Mastercam是一款基于PC平台的CAD/CAM软件&#xff0c;集二维绘图、三维实体造型、曲面设计、体素拼合、数控编程、刀具路径摸拟及真实感摸拟等多种功能于一身。 Mastercam发展至今有许多个版本&#xff0c;目前来说常用的版本有Mastercam V91、20…

Windows同时配置两个jdk环境变量

项目场景&#xff1a; Windows同时配置两个jdk环境变量 解压版那么可以更改JAVA_HOME的值&#xff0c;来决定使用哪个版本。安装版可以两个版本同时使用。 操作步骤 1、配置环境变量 在系统环境变量中添加两个环境变量&#xff0c;根据使用需求更改JAVA_HOME的值 2、修改ja…