数据库基础操作
数据分页
SELECT…FROM…LIMIT 起始位置,偏移量;(起始位置默认为0)
结果集排序
SELECT…FROM…ORDER BY 列名 [ASC|DESC];
默认ASC:升序,DESC:降序
注意:
- 如果排序字段内容相同,Mysql会按照主键大小来排序两条数据。
- ORDER BY 也可以定义多个排序字段来规定首要排序条件和次要排序条件
去除重复记录
SELECT DISTINCT 字段 FROM …;
注意:
- 使用DISTINCT的SELECT子句中只能查询一列数据
- DISTINCT关键字只能在SELECT子句中使用一次
条件查询
SELECT…FROM…WHERE 条件 [AND|OR] 条件;
聚合函数
SUM函数
用于求和,只能用于数字类型,字符类型的统计结果为0,日期类型统计结果是毫秒数相加。
MAX函数
用于获取非空值的最大值
MIN函数
用于获取非空值的最小值
AVG函数
用于获取非空值的平均值,非数字统计结果为0
COUNT函数
COUNT(*)用于获取包含空值的记录数,COUNT(列名)用于获取包含非空值的记录数
分组查询
GROUP BY子句通过一定规则将一个数据集分成若干个小的区域,然后针对每个小区域分别进行数据汇总处理
注意:
-
数据库支持多列分组条件,执行时逐级分组
-
使用GROUP BY子句时,SELCET子句中可以包含聚合函数或者GROUP BY子句的分组列,其余内容不可以出现在SELECT子句中
对分组结果再次做汇总
WITH ROLLUP
GROUP_CONCAT函数
可以把分组查询中的某个字段拼接成一个字符串
HAVING子句
需要与GROUP BY子句一起使用
上述sql语句错误,因为WHERE执行优先级大于GROUP BY,WHERE中使用了聚合函数(无法确定范围)。
引入HAVING子句,利用HAVING子句解决聚合函数作为判断条件的问题。
HAVING子句中可以拿聚合函数与具体数据做判断,但不能拿聚合函数与某个字段做条件判断。
特殊用法
按照数字1分组,MYSQL会根据SELECT子句中的列进行分组,HAVING子句也可正常使用。
表的内外连接
内连接
内连接是结果集中只保留符合连接条件的记录
SELECT…FROM 表1
[INNER] JOIN 表2 ON 条件
[INNER] JOIN 表3 ON 条件
…
注意:
外连接
外连接是不管符不符合连接条件,记录都要保留在结果集中
左外连接
左外连接:LEFT JOIN 保留左表的所有记录,与右表做连接。如果右表有符合条件的记录就与左表连接。如果右表没有符合条件的记录就用NULL与左表连接。
右外连接
右外连接:RIGHT JOIN 保留右表的所有记录,与左表做连接。如果左表有符合条件的记录就与右表连接。如果左表没有符合条件的记录就用NULL与右表连接。
子查询
WHERE子句的子查询不推荐使用,而FROM子句的子查询推荐使用
单行子查询与多行子查询
单行子查询结果集只有一条记录 ,多行子查询结果集有多条记录
多行子查询只能出现在WHERE子句和FROM子句中
ALL:与所有的结果相比较
ANY:只要与结果中的一项相比较
INSERT数据插入操作
单条语句插入:
方言语法:(只适用于mysql)
多条语句插入:
IGNORE关键字
作用:让INSERT只插入数据库不存在的记录
UPDATE数据更新操作
- 不写WHERE子句就是更新全表的记录
- ORDER BY:对记录先排序再更新
- LIMIT:只能修改分页里第一页的数据(只能写一个参数)
UPDATE表连接
注:可以修改多张表的记录