SQL

基础

  1. DML语句:主要由insert、update和delete三个关键字组成
  2. DDL语句:主要由create、alter、drop和truncate四个关键字组成

DDL语句

  1. 增加列、修改列、删除列:add、modify、drop
  2. 删除表:drop table 表名;
  3. truncate表:删除该表里的全部数据,但保留表结构;只能一次性删除整个表的全部记录;比delete删除速度要快
  4. 建立索引:create index 索引名 on 表名
    索引的缺陷:
    • 当数据表中的记录被添加、删除、修改时,数据库系统需要维护索引,因此有一定的系统开销
    • 存储索引需要一定的磁盘空间
  5. distinct去除重复记录

DML语句

  1. mysql使用concat进行字符串连接
  2. SQL语句中的通配符:下划线代表一个任意的字符,百分号代表任意多个字符
  3. 数据库函数
    • ifnull(expr1, expr2),如果expr1为null,则返回expr2,否则返回expr1
    • nullif(expr1, expr2),如果expr1和expr2相等,则返回null,否则返回expr2
    • if(expr1, expr2, expr3),如果expr1为true,不等于0,且不等于null,则返回expr2,否则返回expr3
    • isnull(expr1),判断expr1是否为null
  4. 分组与组函数:avg、count、max、min和sum
    • having子句:不能在where子句中过滤组,where子句仅用于过滤行。过滤组必须使用having子句;不能在where子句中使用组函数,having子句才可以使用组函数
  5. 多表连接查询: 查询用的多个数据表显式使用xxx join连接,而不是直接依次排列在from之后,from之后只需要放一个数据表;连接条件不再放在where之后,而是提供了专门的连接条件子句
    • on子句连接,每个on子句只指定一个连接条件
    • 左、右、全外连接:left join、right join、full join
      SQL99与SQL92的外连接恰好相反,SQL99左外连接将会把左边表中所有不满足连接条件的记录全部列出;SQL99右外连接将会把所有右边表不满足连接条件的记录全部列出;全外连接将会把两个表中所有不满足条件的记录全部列出(Mysql并不是全外连接)
  6. 集合运算:将select返回的两个结果集做运算,intersect(交,不支持,使用多表连查来替代)、union(并)、minus(差,不支持,使用子查询来替代)
    注意:
    • 两个结果集所包含的数据列的数量必须相同
    • 两个结果集所包含的数据列的数据类型也必须一一对应

SQL select语句的完整执行顺序

  • from子句组装来自不同数据流的数据
  • where子句基于指定的条件对记录行进行筛选
  • group by子句将数据划分为多个分组
  • 使用聚集函数进行计算
  • 使用having子句筛选分组
  • 计算所有的表达式
  • select的字段
  • 使用order by对结果集进行排序

SQL语言不同于其他编程语言最明显特征就是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语言中,第一个被处理的子句是FROM,而不是SELECT,SQL查询处理的步骤编号如下:

1
2
3
4
5
6
7
8
9
(8)SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(8) ORDER BY <order_by_list>

以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。

Author: Toyan
Link: https://toyan.top/sql-summary/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏