开篇词丨SQL可能是你掌握的最有用的技能
-
尽管技术人员或多或少地会使用 SQL,但不同的人编写出来的 SQL 的效率是不同的,比如说一份好的 SQL 执行计划就会尽量减少 I/O 操作,因为 I/O 是 DBMS (数据库管理系统,Database Management System)最容易出现瓶颈的地方,可以说数据库操作中有大量的时间都花在了 I/O 上。还需要考虑如何降低 CPU 的计算量,在 SQL 语句中使用 GROUP BY、ORDER BY 等这些语句会消耗大量的 CPU 计算资源,因此我们需要从全局出发,不仅需要考虑数据库的 I/O 性能,还需要考虑 CPU 计算、内存使用情况等。
-
IN和EXISTS查询举例:
SELECT * FROM A WHERE cc IN (SELECT cc FROM B); SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc)
在查询过程中,我们需要判断表 A 和表 B 的大小。如果在有索引的情况下,表 A 比表 B 大,那么 IN 子查询的效率比 EXISTS 子查询效率高。
总结: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;反之,如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实,区分in和exists主要是看驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问;如果是in,先执行子查询,会以驱动表的快速返回为目标,就会考虑到索引及结果集的关系了 ,另外in查询时不对null进行处理。
-
相关名词:
-
OLTP(联机事务处理过程)
-
OLAP(联机分析处理过程)
-
RDBMS(关系型数据库管理系统)
-
基于 SQL 的关系型数据库,比如 Oracle、MySQL、SQL Server、Access、WebSQL、SQLite 等
-
基于NoSQL 非关系型数据库,比如 MongoDB、Redis 等。
-
01丨了解SQL:一门半衰期很长的语言
-
可以把 SQL 语言按照功能划分成以下的 4 个部分:
-
DDL,英文叫做 Data Definition Language,也就是数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用 DDL,我们可以创建,删除和修改数据库和表结构。
-
DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。
-
DCL,英文叫做 Data Control Language,数据控制语言,我们用它来定义访问权限和安全级别。
-
DQL,英文叫做 Data Query Language,数据查询语言,我们用它查询想要的记录,它是 SQL 语言的重中之重。在实际的业务中,我们绝大多数情况下都是在和查询打交道,因此学会编写正确且高效的查询语句,是学习的重点。
-
总结:
-
1.DDL操作:CREATE(创建表)、ALTER(表中增加字段)、DROP(删除字段)和TRUNCATE(清空表数据不删除表结构)
-
2.DML操作:INSERT、UPDATE、DELETE 对元组操作
-
3.DCL操作:
-
1).创建用户 CREATE USER 用户名@地址 IDENTIFIED BY '密码';
-
2).给用户授权 GRANT 权限1, … , 权限n ON 数据库.对象 TO 用户名;
-
3).撤销授权 REVOKE权限1, … , 权限n ON 数据库.对象 FORM 用户名;
-
4).查看权限 SHOW GRANTS FOR 用户名;
-
5).删除用户 DROP USER 用户名;
-
-
4.DQL操作:SELECT
-
-
- ER 图(Entity Relationship Diagram):实体 - 关系图。它是我们用来描述现实世界的概念模型,在这个模型中有 3 个要素:实体、属性、关系。实体就是我们要管理的对象,属性是标识每个实体的属性,关系则是对象之间的关系。
- 你能看到很多 SQL 语句的大小写不统一,虽然大小写不会影响 SQL 的执行,不过我还是推荐你采用统一的书写规范,因为好的代码规范是提高效率的关键。
- 表名、表别名、字段名、字段别名等都小写,在数据表的字段名推荐采用下划线命名,如 role_main;
- SQL 保留字、函数名、绑定变量等都大写;
- 总之,代码规范必须要有,但大小写影响不大,有语法高亮,附SQL Style Guide:https://github.com/mattm/sql-style-guide。
02丨DBMS的前世今生
待完善