第10章 查询数据
10.2 单表查询:
- where子句的 查询条件P173
- IN /NOT IN
- BETWEEN AND
- LIKE 字符匹配查询 LIKE‘字符串’ 通配符%(代表任意长度的字符串) _(只能是单个字符)
- LIKE完全匹配字符串时,与=是一样的(即Like中不含通配符% 和_的情况下是一样的)
- IS [NOT] NULL(IS不能换成=)
- AND OR and要比or先运算
- select distinct 属性名 消除重复的记录
- order by 还可以多属性排序
- 分组查询: GROUP BY 属性名 [HAVING 条件表达式] WITH ROLLUP
- GROUP BY 常与GROUP_CONCAT或集合函数COUNT SUM AVG MAX MIN一起使用;若单独使用,只会查询出每个分组的一条记录,意义不大。
- GROUP_CONCAT 将同一组内的指定字段显示出来 P185
- HAVING 条件表达式
- (注意与WHERE子句的区别,HAVING用于分组后记录,where用于对表或者视图,是表和视图的查询条件)
- where 只能对行记录做过滤
- having可以对查询出来的记录情况做过滤
- WITH ROLLUP 一起使用,计算上面所有记录的总和
- 用LIMIT 限制查询结果的数量:LIMIT 初始位置,记录数
- MAX函数 可以计算数值、字符、字符串的最大值
集合函数一般还是与Group by 关键字一起使用
10.4连接查询 P195
将两个或者是两个以上的表按某个条件连接起来查询
- 内连接查询(使用频率高)
INNER JOIN 与 JOIN 是相同的
- 外连接查询
左连接
右连接
不同的 SQL JOIN
在我们继续讲解实例之前,我们先列出您可以使用的不同的 SQL JOIN 类型:
- INNER JOIN:如果表中有至少一个匹配,则返回行 这个是最简单的Join,也是常见的Join类型
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN:只要其中一个表中存在匹配,则返回行
10.5 子查询P199,将一个查询语句嵌套在另一个查询语句中
- 带IN关键字的子查询
- 带比较运算符的子查询 <>和!=是等价的
- 带EXITS的子查询 P203 EXITS NOT EXITS (子查询返回true或者是false)
- 带ANY关键字的子查询
- 带ALL关键字的子查询
10.6 合并查询结果P207
- UNION 会去除重复部分
- UNION ALL 简单的合并在一起
10.7为表和字段取别名
为表取别名:为了方便 FROM后定义
为字段取表名:显示查询结果时,替代字段原有的名字,更直观 FROM前定义
10.8 用正则表达式查询
正则表达式:用某种模式去匹配一类字符串的方式
属性名 REGEXP ‘匹配方式’
REGEXP s1|s2|s3 匹配这三者中的任意一个字符
REGEXP ‘ucla|ucb|uiuc’
- 代表多个该符号以前的字符 包括1个和1个以上
- 代表多个该符号以前的字符 包括0个和0个以上
- 代表多个该符号以前的字符 包括0个和0个以上
- . 代替字符串中任意一个字符
Mysql中通配符和正则表达式的区别?
1都是用来进行字符串匹配的,都可以进行模糊查询
2通配符:配合LIKE 使用
3配合REGEXP使用
第11章 插入、更新与删除数据
第12章 MYSQL运算符
第13章 MYSQL函数
13.5条件判断函数P294
IF(expr,v1,v2)
IFNULL(v1,v2)
CASE函数
第14章 存储过程和函数
在服务器端存储和执行,可以减少客户端与服务端的数据传输
14.1 创建存储过程和函数
1创建存储过程 P311
2创建存储函数
存储过程不好调试,不好维护,没有特殊需求尽量不要也没必要使用存储过程,如果你非要装逼,那我也拦不住你
阿里是禁用存储过程的。原因是难以扩展,调试,没有移植性以及可读性差