MySQL 学习<六> 查询语句
数据查询不仅仅只是简单返回数据库中存储的数据,还应根据需要对数据进行筛选,以及确定什么样的格式显示。
基本查询语句
语法:SELECT
{* | <字段列表>}
[
FROM <表一>,<表二>...
[WHERE <表达式>]
[GROUP BY <group by definition>]
[HAVING <expression> [{<operator> <expression>}...]]
[ORDER BY <order by definition>]
[LINIT [<offset>,] <row count>]
]
SELECT [字段1,字段2,...,字段n]
FROM [表或视图]
WHERE [查询条件];
其中:
{* | <字段列表>} 包含星号通配符选字段列表,表示查询的字段,其中字段列至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字段后不要加逗号;
FROM <表一>,<表二>... 表1和表2等表示要查询数据的来源,可以是单个或多个;
[WHERE <表达式>] 是可选项,如果选择该项,该限定查询行必须满足的查询条件;
[GROUP BY <group by definition>] 指按照什么样的顺序显示查询出来的数据,可以进行升序(ASC)、降序(DESC);
[LINIT [<offset>,] <row count>] 表示要显示查询出来的数据条数。
下面为了方便演示,故提前已经将示例用表已经建立好:
单表查询
查询所以记录语句:SELECT * FROM 表名,上图已经有所演示了;
查询指定列段语句:SELECT 列名 FROM 表名;
查询多个列段语句:SELECT 字段1,字段2,...,字段n FROM 表名;
查询指定记录语句:SELECT 字段1,字段2,...,字段n FROM 表名 WHERE 查询条件;
带BETWEEN AND的范围查询
语法示例:SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 5.0 AND 10.2;
带LIKE的字符匹配查询
查找所有以‘a’开头的水果。
1.‘%’匹配任意长度的字符,包括零字符;
2.下划线‘_’一次只能匹配一个字符;
查询空值
语法:SELECT ...FROM ... WHERE ...IS NULL;
带AND的多条件查询
示例如下:
带OR的多条件查询
示例如下:
查询结果不重复
示例如下:

查询结果排序
降序:ORDER BY ...DESC;
升序:ORDER BY ...ASC;
示例如下:
分组查询
1.创建分组GROUP BY
示例如下:

2.使用HAVING过滤分组
示例如下:

3.GROUP BY 和 ORDER BY 一起使用
示例如下:
4.使用LIMIT限制行数
语法示例:LIMIT [位置偏移量,] 行数
集合函数查询
有时候我们并不需要返回实际表中的数据,而只是对数据进行总结,这是我们就会用到集合函数查询。
COUNT()函数
COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值;
COUNT(字段名)计算指定列下总的行数,计算时忽略空值的行;
SUM()函数
SUN()返回指定列值的和,可以和GRUOP BY 一起使用,计算每个分组的和。
AVG()函数
返回指定列数据的平均值,可以和GRUOP BY 一起使用,计算每个分组的均值。
MAX()函数
返回指定列中的最大值,可以和GRUOP BY 一起使用,计算每个分组的最大值。
MIN()函数
返回指定列中的最小值,可以和GRUOP BY 一起使用,计算每个分组的最小值。
连接查询
通过连接查询可以实现多个表的查询,主要包括内连接和外连接。
内连接查询(INNER JOIN)
语法示例:
SELECT 表1.字段名1,表1.字段名2,...,表2.字段名1,表2.字段名2,...
FROM 表1 INNER JOIN 表2
ON 表1.目标字段名 = 表2.目标字段名
这里附上一篇文章链接:MySQL 高级查询
外连接查询
包括LEFT JOIN(左连接):返回包括左边中的所有记录和右表中连接字段相等的记录;
RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
复合连接查询
复合连接查询是在连接查询过程中,通过添加过滤条件,限制条件查询的结果,是查询更加准确。
子查询
1.带ANY、SOME关键字的子查询
2.带ALL关键字的子查询
3.带EXISTS关键字的子查询
4.带IN关键字的子查询
5.带比较运算符的子查询,例如‘<’, '>' , '<=' , '>=' , '!='等
合并查询结果
利用UNION关键字合并多天SELECT语句查询的结果。
示例如下:
这里提示一点:
UNION ALL的功能是不删除重复行;而UNION是删除重复行;UNION ALL关键字执行时所需要的资源较少,所以尽可能的使用它。
使用正则表达式查询
下图是常用字符匹配列表