1.了解SQL
- sql是一种语言,Structured Query Language(结构化查询语言),专门用来和数据库沟通的语言。
- DBMS是数据库管理系统,例如MySQL、Oracle、SQLite等。
2.检索数据
- sql语言不区分大小写
- 单行可以不用加“;”结束符
- 语句中空格被忽略
- 检索不重复的项可用DISTINCT关键字修饰,DISTINCT关键字会限制所有的列不重复。
- limit len offset index,表示从index开始,返回len条数据,index是从0开始的,注意:简化的话版本:limit index,len。
3.排序检索数据
- 按照列名排序:order by 列名
- 按照列需要排序:order by 1
- 按照多列排序:order by 列名1,列名2或者列序号
- 降序关键字DESC,order by 列名 DESC,升序:ASC,默认为升序的
- 排序字段既有升序和降序:order by 1 DESC,2 ASC。
4.过滤数据
- where关键字进行过滤。
- where与order by一起使用的时候,order by应该在where之后。
- <>和!=表示不等于,!>表示不大于。between表示范围查询。
- 确定值是否为 NULL,不能简单地检查是否等于 NULL。WHERE 子句
就是 IS NULL 子句判断是否为空。 - NULL不等于非匹配,查询过程中,NULL值可能不会被返回。
5.高级过滤数据
- in和not的使用
- where配合and一起使用,表示有多个限制条件。
- where和or一起使用,表示一个条件满足之后,第二个条件就不用比较了
- in操作符指定范围查询。
- not用在:where not id = 1;
6.通配符进行过滤
- like谓词
- 百分号(%)通配符,%表示任何字符出现任意次数。但是%不会匹配NULL。
- 下划线(_)通配符,只匹配单个字符
7.创建字段
- SELECT 语句为测试、检验函数和计算提供了很好的方法。虽然 SELECT通常用于从表中检索数据,但是省略了 FROM 子句后就是简单地访问和处理表达式,例如 SELECT 3 * 2;将返回 6,SELECT Trim(’ abc ');
将返回 abc,SELECT Curdate();使用 Curdate()函数返回当前日期 和时间。现在你明白了,可以根据需要使用 SELECT 语句进行检验。
8.使用函数处理数据
- SUBSTRING()提取字符串的组成部分
- 数据的类型转换CONVERT()
- 获取当前日期:CURDATE();
9.汇总数据
- SQL 的聚集函数,
10.分组数据
group
- group by支持可以按照多个列进行分组
group by子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY子句中指定相同的表达式。不能使用别名。 - 大多数 SQL 实现不允许 GROUP BY 列带有长度可变的数据类型
- 如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。
- GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。
HAVING
- HAVING 字句的出现:WHERE 过滤指定的是行而不是分组。而HAVING 处理的是分组。
-
WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行过滤。 - HAVING 支持所有 WHERE 操作符
- 优先级:order by > where > group by > having.
11.使用子查询
- in关键字
- 作为子查询的 SELECT 语句只能查询单个列。企图检索多个列将返回
错误。 - 子查询的效率不高
12.联结表
- select where联接、join on联接。
- where与on之间的区别:where在处理多表联接的时候,先生成临时表在进行过滤,on是在生成联接临时表的时候就在过滤
- 综合一下, 感觉还是放在on里更有效率, 因为它先于where执行.先笛卡尔积, 然后再on过滤, 如果join是inner的, 就继续往下走, 如果join 是left join, 就把on过滤掉的左主表中的数据再添加回来; 然后再执行where里的过滤;
13. 创建高级联结
- 自联结(self-join):在一个select查询语句中使用多次相同的表,可以用as进行命别名。
- 用自联结而不用子查询。
自然联结(natural join):自然联结排除多次出现,使每一列只返回一次 外联结(outer join):left join、right join。
14.组合查询
- UNION 操作符将多条 SELECT 语句组合成一个结
果集 - UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字
UNION 分隔(因此,如果组合四条 SELECT 语句,将要使用三个 UNION 关键字)。 - UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过,
各个列不需要以相同的次序列出)。 - UNION ALL保留重复。
15.插入数据
- insert into 表名(列的属性值) values()
16.更新和删除数据
- update 表名 set 修改值 where
delete from 表名 where
17.创建和操纵表
18.使用视图
- 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索
数据的查询。 - 视图的优点:重用sql语句、简化基本操作、保护数据。
- 视图不包含数据,所以每次使用视图时,都必须处理查询执行时
需要的所有检索。视图不能索引,也不能有关联的触发器或默认值。 - 视图用 CREATE VIEW 语句来创建。
19.使用存储过程
- 存储过程是指将一些固定的sql语句进行编译,下次查询直接走编译好的代码。
20.管理事务处理
- 事务(transaction)指一组 SQL 语句;
回退(rollback)指撤销指定 SQL 语句的过程; 提交(commit)指将未存储的 SQL 语句结果写入数据库表; 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个事务处理不同)
21.使用游标
- 游标(cursor)是一个存储在 DBMS 服务器上的数据库查询,它不是一条 SELECT 语句,而是被该语句检索出来的结果集。
22.高级SQL特性
约束:主键约束、外键约束、用户自定义约束。 索引:为了提高检索效率。 触发器:触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。
23.资源联接
PDF连接
|