<audio id="audio" title="01丨了解SQL：一门半衰期很长的语言" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/40/c3/407ef2c27870f4c4b30739688debf0c3.mp3"></audio>

在我们的日常工作中，使用的是类似MySQL、Oracle这种的数据库管理系统，实际上这些数据库管理系统都遵循SQL语言，这就意味着，我们在使用这些数据库的时候，都是通过SQL语言与它们打交道。所以对于从事编程或者互联网行业的人来说，最具有中台能力的语言便是SQL语言。自从SQL加入了TIOBE编程语言排行榜，就一直保持在Top 10。

1. SQL语言无处不在，它对于不同职位的人来说都有价值。SQL已经不仅仅是技术人员需要掌握的技能，产品经理、运营人员也同样需要掌握SQL。
1. SQL语言从诞生到现在，很少变化。这就意味着一旦你掌握了它，就可以一劳永逸，至少在你的职业生涯中，它都可以发挥作用。
1. SQL入门并不难。

## 半衰期很长的SQL

可以说在整个数字化的世界中，最重要而且最通用的元基础就是数据，而直接与数据打交道的语言就是SQL语言。很多人忽视了SQL语言的重要性，认为它不就是SELECT语句吗，掌握它应该是数据分析师的事。事实上在实际工作中，你不应该低估SQL的作用。如今互联网的很多业务处理离不开SQL，因为它们都需要与数据打交道。

SQL在各种技术和业务中无处不在，它的情况又是怎样的呢？45年前，也就是1974年，IBM研究员发布了一篇揭开数据库技术的论文《SEQUEL：一门结构化的英语查询语言》，直到今天这门结构化的查询语言并没有太大的变化，相比于其他语言，SQL的半衰期可以说是非常长了。

SQL有两个重要的标准，分别是SQL92和SQL99，它们分别代表了92年和99年颁布的SQL标准，我们今天使用的SQL语言依然遵循这些标准。要知道92年是Windows3.1发布的时间，如今还有多少人记得它，但如果你从事数据分析，或者和数据相关的工作，依然会用到SQL语言。

作为技术和互联网行业的从业人员，我们总是希望能找到一个通用性强，变化相对少，上手相对容易的语言，SQL正是为数不多的，可以满足这三个条件的语言。

## 入门SQL并不难

SQL功能这么强大，那么学起来会很难吗？一点也不。SQL不需要像其他语言那样，学习起来需要大量的程序语言基础，SQL更像是一门英语，有一些简单的英语单词，当你使用它的时候，就好像在用英语与数据库进行对话。

我们可以把SQL语言按照功能划分成以下的4个部分：

1. DDL，英文叫做Data Definition Language，也就是数据定义语言，它用来定义我们的数据库对象，包括数据库、数据表和列。通过使用DDL，我们可以创建，删除和修改数据库和表结构。
1. DML，英文叫做Data Manipulation Language，数据操作语言，我们用它操作和数据库相关的记录，比如增加、删除、修改数据表中的记录。
1. DCL，英文叫做Data Control Language，数据控制语言，我们用它来定义访问权限和安全级别。
1. DQL，英文叫做Data Query Language，数据查询语言，我们用它查询想要的记录，它是SQL语言的重中之重。在实际的业务中，我们绝大多数情况下都是在和查询打交道，因此学会编写正确且高效的查询语句，是学习的重点。

学习SQL就像学习英文语法一样。SQL 是为数不多的声明性语言，这种语言的特点就是，你只需要告诉计算机，你想从原始数据中获取什么样的数据结果即可。比如我想找主要角色定位是战士的英雄，以及他们的英雄名和最大生命值，就可以输入下面的语言：

```
SELECT name, hp_max FROM heros WHERE role_main = '战士'

```

这里我定义了heros数据表，包括了name、hp_max、role_main等字段，具体的数据表我会在后面的课程中作为示例讲解，这里只是做个简单的说明。

你能从这段代码看出，我并没有告诉计算机该如何执行才能得到结果，这也是声明性语言最大的便捷性。我们不需要指定具体的执行步骤，比如先执行哪一步，再执行哪一步，在执行前是否要检查是否满足条件A等等这些传统的编程思维。

SQL语言定义了我们的需求，而不同的DBMS（数据库管理系统）则会按照指定的SQL帮我们提取想要的结果，这样是不是很棒！

## 开启SQL之旅

SQL是我们与DBMS交流的语言，我们在创建DBMS之前，还需要对它进行设计，对于RDBMS来说采用的是ER图（Entity Relationship Diagram），即实体-关系图的方式进行设计。

ER图评审通过后，我们再用SQL语句或者可视化管理工具（如Navicat）创建数据表。

实体-关系图有什么用呢？它是我们用来描述现实世界的概念模型，在这个模型中有3个要素：实体、属性、关系。

实体就是我们要管理的对象，属性是标识每个实体的属性，关系则是对象之间的关系。比如我们创建了“英雄”这个实体，那么它下面的属性包括了姓名、职业、最大生命值、初始生命值、最大魔法值、初始魔法值和攻击范围等。同时，我们还有“用户”这个实体，它下面的属性包括用户ID、登录名、密码、性别和头像等。

“英雄”和“用户”这两个实体之间就是多对多的关系，也就是说一个英雄可以从属多个用户，而一个用户也可以拥有多个英雄。

除了多对多之外，也有一对一和一对多的关系。

创建完数据表之后，我们就可以用SQL操作了。你能看到很多SQL语句的大小写不统一，虽然大小写不会影响SQL的执行，不过我还是推荐你采用统一的书写规范，因为好的代码规范是提高效率的关键。

关于SQL大小写的问题，我总结了下面两点：

1. 表名、表别名、字段名、字段别名等都小写；
1. SQL保留字、函数名、绑定变量等都大写。

比如下面这个SQL语句：

```
SELECT name, hp_max FROM heros WHERE role_main = '战士'

```

你能看到SELECT、FROM、WHERE这些常用的SQL保留字都采用了大写，而name、hp_max、role_main这些字段名，表名都采用了小写。此外在数据表的字段名推荐采用下划线命名，比如role_main这种。

## 总结

今天我带你初步了解了SQL语言，当然，SQL再简单，也还是需要你一步一步，从点滴做起，先掌握基本的DDL、DML、DCL和DQL语法，再了解不同的DBMS中的SQL语法差异，然后再来看如何优化，提升SQL的效率。要想写出高性能的SQL，首先要了解它的原理，其次就是做大量的练习。

SQL的价值在于通用性强（市场需求普遍），半衰期长（一次学习终身受用），入门不难。实际上，很多事情的价值都可以按照这三点来进行判断，比如一个产品的市场价值。如果你是一名产品经理，你是喜欢通用性更强的产品，还是喜欢更个性的产品。今天的文章只是简单预热，你可能也会有一些感悟，不妨说说你对一个产品或者语言的市场价值的理解。

<img src="https://static001.geekbang.org/resource/image/ca/11/ca5cb085cbb961ac1569d3e22b404e11.jpg" alt=""><br>
欢迎你在评论区写下你的心得，也欢迎把这篇文章分享给你的朋友或者同事，让更多人了解SQL这门语言。
