SQL 的基本认知
前言
说到SQL,想必已经都很熟悉了吧。工作中可能基本用不到,或许也有可能经常用。对于没有系统学过SQL的来说,可能只记得"SELECT、CREATE、INSERT、UPDATE、DELETE、DROP" 以及 "CURD"、删库跑路啊等关键词和一些SQL语句。对SQL没有比较完整、大局整体的概念,而我就是其中之一 😭。接下来就看看到底啥样的吧
一、什么是 SQL?
\(\color{blue}{结构化查询语言(Structured Query Language)}\) 。专门用来与数据库通信的语言,它可以帮助用户操作关系数据库
二、SQL 的组成
SQL 有数据定义、数据查询、数据操作、数据控制四大功能,其主要包括以下几个部分
-
\(\color{#6A5ACD}{数据定义语言}\)(Data Definition Language, DDL):主要用于对数据库即数据库中的各种对象进行创建、删除、修改等操作。数据库对象主要有表、默认约束、规则、视图、触发器、存储过程等。
- CREATE:用于创建数据库或数据库对象
- ALTER:用于对数据库或数据库对象进行修改
- DROP:用于删除数据库或数据库对象
-
\(\color{#6A5ACD}{数据操纵语言}\)(Data Manipulation Language, DML):主要用于操纵数据库中的各种对象,特别是检索和修改数据
- SELECT:用于从表或视图中检索数据
- INSERT:用于数据插入表或视图
- UPDATE:用于修改表或视图中的数据
- DELETE:用于表或视图中数据的删除
-
\(\color{#6A5ACD}{数据控制语言}\)(Data Control Language, DCL):主要用于安全管理
- GRANT:用于授予权限,可把语句许可或对象许可的权限授予其他用户和角色
- REVOKE:用于回收权限
-
\(\color{#6A5ACD}{嵌入式和动态SQL规则}\):规定了SQL语句在高级程序设计语言中的使用规范
-
\(\color{#6A5ACD}{SQL调用和会话规则}\)
- SQL调用包括:SQL例程和调用规则,以便提高SQL的灵活性、有效性、共享性及使用SQL具有更多的高级语言的特征
- SQL会话规则:可使应用程序连接到多个SQL服务器中的一个,与之交互
三、SQL 的基本操作
基本操作可分为三类:数据定义、数据更新、数据查询。
以下包含的相关SQL语句使用MySQL实现。补充:说到SQL语句又分为 声明式SQL语句 和 过程式SQL语句
数据定义 >>>
SQL 的数据定义功能包括:数据库模式定义、表定义、索引定义、视图定义
-
数据库模式定义:包括含数据库的创建、选择、修改、删除、查看等操作
- 创建数据库:
CREATE DATABASE
或CREATE SCHEMA
语句。 - 选择数据库:
USER db_name
- 修改数据库:
ALTER DATABASE
或ALTER SCHEMA
语句 - 删除数据库:
DROP DATABASE db_name
- 查看数据库:
SHOW DATABASES
- 创建数据库:
-
表定义:数据表被定义为字段的集合
- 创建表:
CREATE TABLE tb_name
。主要由表创建定义、表选项和分区选项等内容构成 - 更新表:
ALTER TABLE tb_name
。可对已有表进行结构修改与调整ADD [COLUMN]
子句(ADD INDEX 新增索引),新增列、多列逗号隔开CHANGE [COLUMN]
子句 修改列名称或数据类型,必须修改列名才能改其他。ALTER [COLUMN]
子句 修改或删除表指定列的默认值。MODIFY [COLUMN]
子句 只会修改指定列的数据类型,不改表名。DROP [COLUMN]
子句 删除多余的列RENAME [TO]
子句 用于重命名表名
- 重命名表:
RENAME TABLE table_name TO new_table_name
- 删除表:可同时删除多个表(包括临时表,表删除时存储的数据和分区信息会被删除)
DROP TABLE table_name
- 查看表:显示表名称 SHOW TABLES {FROM|IN} db_name 显示表结构
SHOW COLUMN {FROM|IN} tb_name
- 创建表:
-
索引定义:实质上是一张描述索引列的列值与原表中记录行之间一一对应关系的有序表
- 索引创建:1.使用 CREATE INDEX index_name ON tb_name(cols_name) 2.使用 CREATE TABLE 3.使用 ALTER TABLE
- 索引查看:
SHOW {INDEX|INDEXS|KEYS} {FROM|IN} tb_name
- 索引删除:
DROP INDEX index_name ON tb_name
或ALTER TABLE tb_name DROP INDEX index_name
数据更新 >>>
- 插入数据:
- 使用 INSERT...VALUES 语句插入单行或多行元组数据。
- 使用 INSERT...SET 语句插入部分列值数据。
- 使用 INSERT...SELECT语句插入子查询数据。
- 修改数据:UPDATE 修改更新一个表中的数据,实现对列数据修改。
- 删除数据:DELETE 语句删除表中的一行或多行数据
数据查询 >>>
查询语句格式:
SELECT [ALL|DISTINCT|DISTINCTROW] select_expr [, select_expr ...] FROM tb_name [WHERE where_condition] [GROUP BY {col_name|expr|position} [ASC|DESC], ...[WITH ROLLUP] ] [HAVING where_condition] [ORDER BY {col_name|expr|position} [ASC|DESC], ...] [LIMIT {[offset, ] row_count| row_count: OFFSET offset}]
- SELECT 语句:SELECT 子句用于指定输出的字段;FROM子句用于指定数据的来源;WHERE 子句指定数据的选择条件;GROUP BY 用于检索到的记录进行分组;HAVING 用于指定组的选择条件;ORDER BY 用于查询结果的排序。
- 列的选择与指定
- 选择指定的列:查询列有多个,则各列名逗号隔开;所有列可用 * 通配符
- 定义并使用列的别名:添加 AS 子句到指定列名之后,格式 column_name [AS] column_alias
- 替换查询结果集中的数据:CASE 表达式替换。
- 计算列值:查询时可输出对列值计算(加减乘除)后的值。相同的数字类型计算正常;字符串与数字等计算,字符串都会先转换为0再计算
- 聚合函数:通常指系统的内置函数。常用聚合函数:COUNT/MAX/MIN/SUM/AVG
- FROM 子句与多表连接查询: 查询同时涉及两个或两个以上的表,则称为多表连接查询
- 交叉连接:又称笛卡尔积,两表行数相乘。CROSS JOIN 可省略。
- 内连接:(等值/非等值/自连接)利用条件判断表达式中的比较运算符来组合两张表中的记录,目的是为了消除交叉连接中的某些数据行。
- 外连接:(左外/右外连接)连接的两张表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。左连接(左基表, 右表没有为NULL) LEFT JOIN ; 右连接(右基表) RIGHT JOIN
- WHERE 子句与条件查询
- 比较运算:等于(=),不等于(<>、!=),大于或大于等于(>、>=),小于或小于等于(<、<=),不会返回UNKNOWN(<=>)
- 判定范围:BETWEEN...AND 限定在值的某个范围;IN(...) 指定一个枚举表,主要作用是表达子查询
- 判定空值:判定表达式是否为空值
- 子查询:(表/行/列/标量子查询)也即子查询返回的结果集。
- GROUP BY 子句与分组数据: 将结果集中的数据行根据选择列的值进行逻辑分组,以便汇总表内容的子集,即实现对每个组的聚集计算
- HAVING 子句: 使用 having 子句过滤分组。即在结果集中规定包含哪些分组和排除哪些分组
- ORDER BY 子句: 将结果集中的数据行按一定的顺序进行排列
- LIMIT 子句: 用于限制 select 语句返回的行数
四、SQL 的视图
什么是视图:视图是数据库中的一个对象,是数据库管理系统提供给用户多角度观察数据库中数据的一种重要机制。视图是虚拟表
- 创建视图:
CREATE VIEW view_name [(col_list)] AS select_statement [WITH [CASCADED |LOCAL] CHECK OPTION ]
- 删除视图: DROP VIEW view_name 可一次删除多个视图,但必须每个视图拥有 DROP 权限
- 修改视图定义: ALTER VIEW view_name 雷同创建语句对已有视图的定义(结构)进行修改
- 查看视图定义:SHOW CREATE VIEW view_name 查看已有视图的定义(结构)
- 更新视图数据: 实质是更新视图所引用的基本表的数据。视图的更新操作受一定限制的。视图的数据更新同基本表的更新
- 使用 INSERT 语句通过视图向基本表插入数据
- 使用 UPDATE 语句通过视图修改基本表的数据
- 使用 DELETE 语句通过视图删除基本表的数据
- 查询视图数据: 与基本表查询一样使用 SELECT 语句。
详见另一篇博客 >>>