SQL 是什么

用户头像
Rayjun
关注
发布于: 2020 年 10 月 04 日
SQL 是什么



SQL 的全称是结构查询语言,这是第一个实现了关系模型的语言。是一种特定领域语言,如果你想开发一个软件,仅仅依靠 SQL 是无法完成的,它只能用于数据的查询和统计。与之相反,C 语言等就被称之为通用语言。



SQL 是关系模型的实现,在被 Oracle,MySQL 等各大关系型数据库所采用,但 SQL 不仅仅在关系型数据库中使用的很广泛,在大数据领域中也有很大的使用空间,Spark、Flink 等前沿的计算框架也都提供了 SQL 接口。



1. SQL结构

SQL 语言本身可以分成 DDL、DCL、DML等类型,每一类都有不同功能。



在 SQL 中有大量的操作符可以使用,而且为了更方便的查询和统计数据,SQL 中还内置了很多函数。



无论是上面三种类型的哪一种,都是由基础的元素构成,最基础的元素有三种:



  • 子句(Clauses):每一个SQL 都可以分解成一个个子句

  • 表达式(Expressions):可以产生任何标量值

  • 谓词(Predicates):产生一个三值逻辑值(true/false/unknow)或者布尔值。



还有另外两种元素是由上面的部分组成的。

  • 查询(Queries):基于特定的条件检索数据

  • 语句(Statements):可以持久化地影响数据和数据结构



也就是说,执行中的 SQL,要么是查询,要么就是语句。



以 SQL 中的 SELECT 查询为例:



以 SQL 中的 UPDATE 语句为例:



这里介绍的是 SQL 的标准语法,在不同数据库中的实现有所不同。



DDL

DDL 全称是 data definition language,用于定义数据结构。



因为如果要能使用 SQL,就要求数据是结构化的。结构化就是指数据的数据结构,有哪些字段,字段是哪种类型,都需要提前定义好。



通俗来说,就是用来创建数据,创建表,修改表结构等等。

CREATE TABLE book(
id bigint(20) primary key auto_increment,
name varchar(50),
author VARCHAR(50),
content varchar(50)
);



DCL

每个数据库系统中都会涉及到权限和安全,DCL 就是用来维护系统访问权限,全称是 data control language。



GRANT SELECT, UPDATE
ON book
TO user1;



DML

DML 是日常使用最频繁的一类,全称是 data manipulation language。



对数据表的增删改查都是属于这一类。



SELECT *
FROM Book
WHERE price > 100.00
ORDER BY title;



INSERT INTO book
(name, author, content)
VALUES
('围城', '钱钟书', '城里的人想出来,墙外的人想进去');



操作符



SQL 中还提供了很多逻辑操作符操作符,这些逻辑操作符会和表达式组合形成一个谓词,用来过滤数据。



  • =

  • <>

  • >

  • <

  • between

  • like

  • in & not in

  • is null & is not null

  • is true & is not true

  • is false & is not false

  • is not distinct from (两个值相等或者都为空)

  • as



内置函数

在数据查询统计的需求中,通常会涉及到对数据的汇总和统计,SQL 中提供了很多内置的函数来帮助完成这个过程。



比如时间类的函数:

  • DAY

  • MONTH

  • WEEKDAY

  • YEAR

  • ...



字符串函数:

  • LOWER

  • UPPER

  • ...



聚合函数:

  • COUNT

  • AVG

  • MAX

  • MIN

  • ...



2. SQL标准



SQL 起源于 1970 年的一篇论文[5],然后由 IBM 实现了这篇关系模型的论文,这就是 SQL 的前身,然后自家产品不断推出相关的产品。



Oracle 看到了 SQL 的潜力,也加入竞争,经历了一段时间的野蛮生长之后,这两家公司共同促进了 SQL 的标准化。



在 1986 年,SQL 成为了 ANSI 的标准,一年之后也成为了 ISO 的标准。



目前最新的 SQL 标准是 SQL-2016,SQL-2019 的标准正在制定中。



SQL 的标准号是通过年份来决定的,历史上的各个 SQL 标准如下:

  • 1986 SQL-86

  • 1989 SQL-89

  • 1992 SQL-92

  • 1999 SQL:1999

  • 2003 SQL:2003

  • 2006 SQL:2006

  • 2008 SQL:2008

  • 2011 SQL:2011

  • 2016 SQL:2016

  • 2019 SQL:2019(正在制定中)



需要注意的是,SQL 标准与实际使用的 SQL 还是有很大区别的,比如在不同的数据库中,对 SQL 的实现不完全相同。



也就是说,很有可能 SQL 标准中的某个特性在具体的数据库中不能使用,比如在 MySQL 中,就抛弃了很多功能,但不妨碍它受欢迎。就像网络的七层协议一样,最后的实现也并不是完整按照这七层协议来,而是选择最实用的方式来实现。



文 / Rayjun

本文首发于我的微信公众号

REF

[1] https://en.wikipedia.org/wiki/SQL

[2] https://en.wikipedia.org/wiki/SQL_syntax

[3] https://en.wikipedia.org/wiki/Domain-specific_language

[4] https://en.wikipedia.org/wiki/General-purpose_language

[5] https://dl.acm.org/doi/10.1145/362384.362685



欢迎关注我的微信公众号



发布于: 2020 年 10 月 04 日 阅读数: 48
用户头像

Rayjun

关注

程序员,王小波死忠粉 2017.10.17 加入

非著名程序员,还在学习如何写代码,公众号同名

评论

发布
暂无评论
SQL 是什么