SQL 由 IBM 于上世纪 70 年代创建,如今已经成为了使用最广泛的数据库查询语言 。不过,相信很多人对于 SQL 的理解就是关系数据库,就是增删改查;实际上,SQL 在经历了四十而不惑之后就像“姐姐们”一样成熟而有魅力,同时它又敢于在不断变化的产业需求和各种非关系模型的冲击之下实现自我突破 。因此,本文就给大家介绍一下最近几年 SQL 如何在各个领域乘风破浪!
文章插图
如果你认为 SQL 就是简单的增删改查(INSERT、SELECT、UPDATE、DELETE),那么你了解的仅仅是 1992 年的SQL 。
如果你了解通用表表达式(CTE)和递归查询、用户定义类型或者 OLAP 功能,那么你使用的是 1999 年的 SQL 。
如果你接触过窗口函数(分析函数)、MERGE(UPSERT)语句或者 XML 数据类型,应该知道这些不过是 2003 年的 SQL 。
2006 年的 SQL 已经定义了 SQL 操作 XML 的规范,支持使用 XQuery 同时访问 SQL 数据和 XML 文档 。2008 年又增加了 TRUNCATE TABLE 语句、INSTEAD OF 触发器以及 FETCH 子句等功能 。
2011 年 SQL 最主要的新功能之一就是增强了对时态数据库(Temporal database)的支持,可以用于记录那些随着时间而变化的历史数据值,应用领域包括金融、保险、预订系统、医疗信息管理系统等 。目前,MariaDB、Oracle、PostgreSQL、Microsoft SQL Server 在一定程度上实现了某些时态表功能,国内的腾讯 TDSQL 是一个全时态数据库系统 。
时间来到了 2016 年,SQL 标准又增加了几个重要的功能,首先就是对 JSON 文档的支持 。
一.SQL 与文档数据库
文档数据库属于 NoSQL 的一种,具有模式自由的存储特性,通常采用 JSON 格式进程数据的存储 。常用的文档数据库包括 MongoDB、CouchDB 等 。
实际上,2016 年 SQL 标准就已经增加了 JSON 功能的支持,包括:
- JSON 对象的存储与检索;
- 将 JSON 对象表示成 SQL 数据;
- 将 SQL 数据表示成 JSON 对象 。
文章插图
如今,主流的关系数据库也都增加了原生 JSON 数据类型和相关函数的支持,包括 Oracle、MySQL、SQL Server、PostgreSQL 等 。
文章插图
我们以 MySQL 为例,演示一下如何使用 SQL 查询 JSON 数据 。
select emp_id, emp_info, emp_info->'$.emp_name' emp_name, emp_info->'$.sex' sex, emp_info->>'$.income[0].salary' salaryfrom employee_jsonlimit 3;emp_id|emp_info|emp_name|sex|salary |------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|---|-------| 1|{"sex": "男", "email": "liubei@shuguo.com", "income": [{"salary": 33000.0}, {"bonus": 10000}], "job_id": 1, "dept_id": 1, "manager": null, "emp_name": "刘备", "hire_date": "2000-01-01"}|"刘备" |"男"|33000.0| 2|{"sex": "男", "email": "guanyu@shuguo.com", "income": [{"salary": 26000}, {"bonus": 10000}], "job_id": 2, "dept_id": 1, "manager": 1, "emp_name": "关羽", "hire_date": "2000-01-01"} |"关羽" |"男"|26000 | 3|{"sex": "男", "email": "zhangfei@shuguo.com", "income": [{"salary": 24000}, {"bonus": 10000}], "job_id": 2, "dept_id": 1, "manager": 1, "emp_name": "张飞", "hire_date": "2000-01-01"} |"张飞" |"男"|24000 |
其中,emp_info 字段类型为 JSON;-> 操作符返回的类型是 JSON,->> 返回的类型是字符串,使用 SQL/JSON 路径表达式获取数据中的元素值;$ 代表整个文档;$.emp_name 表示获取 JSON 对象的 emp_name 元素;$.income[0].salary 表示获取 income 数组中的第一个对象的 salary 元素,数组的下标从 0 开始 。
推荐阅读
- iOS|iOS 16前的最后一个版本!iOS 15.5登场:一文了解详情
- 打通前后端,这款效能提升开源“神器”你一定要了解
- 一文读懂Redis的dict字典数据结构
- 新疆维吾尔自治区|一文带你了解和田玉“前世今生”
- ARM|AMD|X86/i386|AARCH64 #了解一下#操作系统:CPU架构
- 深入了解定制 Bash
- 使用Java带你打造一款简单的外卖系统
- 满族姓氏文化你了解多少
- 痛风饮食治疗注意事项
- 上海市|现在不要去上海这边打工,为什么呢?相信大家都了解