基础
- DML语句:主要由insert、update和delete三个关键字组成
- DDL语句:主要由create、alter、drop和truncate四个关键字组成
DDL语句
- 增加列、修改列、删除列:add、modify、drop
- 删除表:drop table 表名;
- truncate表:删除该表里的全部数据,但保留表结构;只能一次性删除整个表的全部记录;比delete删除速度要快
- 建立索引:create index 索引名 on 表名
索引的缺陷:- 当数据表中的记录被添加、删除、修改时,数据库系统需要维护索引,因此有一定的系统开销
- 存储索引需要一定的磁盘空间
- distinct去除重复记录
DML语句
- mysql使用concat进行字符串连接
- SQL语句中的通配符:下划线代表一个任意的字符,百分号代表任意多个字符
- 数据库函数
- 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
- 分组与组函数:avg、count、max、min和sum
- having子句:不能在where子句中过滤组,where子句仅用于过滤行。过滤组必须使用having子句;不能在where子句中使用组函数,having子句才可以使用组函数
- 多表连接查询: 查询用的多个数据表显式使用xxx join连接,而不是直接依次排列在from之后,from之后只需要放一个数据表;连接条件不再放在where之后,而是提供了专门的连接条件子句
- on子句连接,每个on子句只指定一个连接条件
- 左、右、全外连接:left join、right join、full join
SQL99与SQL92的外连接恰好相反,SQL99左外连接将会把左边表中所有不满足连接条件的记录全部列出;SQL99右外连接将会把所有右边表不满足连接条件的记录全部列出;全外连接将会把两个表中所有不满足条件的记录全部列出(Mysql并不是全外连接)
- 集合运算:将select返回的两个结果集做运算,intersect(交,不支持,使用多表连查来替代)、union(并)、minus(差,不支持,使用子查询来替代)
注意:- 两个结果集所包含的数据列的数量必须相同
- 两个结果集所包含的数据列的数据类型也必须一一对应
SQL select语句的完整执行顺序
- from子句组装来自不同数据流的数据
- where子句基于指定的条件对记录行进行筛选
- group by子句将数据划分为多个分组
- 使用聚集函数进行计算
- 使用having子句筛选分组
- 计算所有的表达式
- select的字段
- 使用order by对结果集进行排序
SQL语言不同于其他编程语言最明显特征就是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语言中,第一个被处理的子句是FROM,而不是SELECT,SQL查询处理的步骤编号如下:
1 | (8)SELECT (9) DISTINCT (11) <TOP_specification> <select_list> |
以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。