数据查询基础部分
关于MySql查询的上一篇文章:MySql增删改查
1、IN子查询
IN子查询用于进行一个给定值是否在子集查询结果集中的判断
表达式 IN (子查询)
(子查询):只能返回一列数据对于比较复杂的查询可以使用嵌套子查询
示例:
SELECT *
FROM sell
WHERE 用户号 IN
(SELECT 用户号 FROM members WHERE 姓名='张三');
- 比较子查询
这是IN子查询的扩展
语法格式:
表达式{ < | <= | = | > | >= | != | <>}{ ALL | SOME | ANY }(子查询)
ALL | SOME | ANY :对于比较运算的限制
如果只返回一行数据可以直接通过比较运算符,如果返回多行数据则需要用{ ALL | SOME | ANY }来限定
ALL:与结果集中的每个值进行比较
SOME 或 ANY:是同义词,只要结果集中有一个值满足条件就返回true
示例:
SELECT *
FROM members
WHERE 用户号=ANY
(SELECT 用户号
FROM sell
WHERE 图书编号='TP115/12683');
- EXISTS子查询
EXISTS 用于检测子查询结果是否为空表
格式:
EXISTS (子查询)
2、聚合函数
1、COUNT函数
求组中项数,返回int类型整数
示例:
SELECT COUNT(*) AS '会员数'
FROM members
2、MAX和MIN
MAX和MIN分别用于求表达式中所有值项的最大值和最小值
示例:
SELECT MAX(订购册数),MIN(订购册数)
FROM sell
WHERE 图书编号='TP7/301-135'
3 、SUM函数和AVG函数
SUM和AVG分别用于求表达式中所有值项的总和与平均值
示例:
SELECT SUM(订购册数) AS '总订购数'
FROM sell
WHERE 图书编号='TP7/301-135'
3、GROUP BY子句
GROUP BY子句主要用于根据字段来对行分组
示例:根据图书类别统计库存数
SELECT 图书类别,sum(数量) AS '库存数'
FROM book
GROUP BY 图书类别;
使用ROLLUP操作符的GROUP BY子句,可以指定在结果集内不仅包含由GROUP BY提供的正常行,还包含汇总行
SELECT 图书类别,sum(数量) AS '库存数'
FROM book
GROUP BY 图书类别
WITE ROLLUP;
4、HAVING子句
HAVING子句与WHERE子句类似,不同的是WHERE子句是用来在FROM子句之后选择行,而HAVING子句用来在GROUP BY子句后选择行
示例:
SELECT 用户号,AVG(订购册数) AS '平均订购册数'
FROM sell
GROUP BY 用户号
HAVING AVG(订购册数)>5;
5、ORDER BY子句
使用ORDER BY子句之后可以让结果集中的行按一定顺序排列
示例:
SELECT *
FROM book
ORDER BY 订购册数 DESC;
后面的关键字
DESC:表示降序排列
ASC:表示升序排列 默认是升序排列
6、LIMIT子句
LIMIT子句是SELECT语句的最后一个子句,主要用于限制被SELECT语句返回的行数。
格式:LIMIT{[偏移量,] 行数|行数OFFSET 偏移量}
说明:
偏移量和行数都必须是非负的整数常数。
偏移量: 指定返回的第一行的偏移量。
行数: 是返回的行数。
“LIMIT 5”表示返回结果集最前面的5行,“LIMIT 3,5 则表示从第4行开始返回5行”
示例:
SELECT *
FROM book
ORDER BY 学号 DESC
LIMIT 3,5;
7、UNION语句
UNION语句可以把来自许多SELECT语句的结果组合到一个结果集中。
格式
SELECT 语句
UNION [ALL | DISTINCT]
SELECT 语句
[UNION [ALL | DISTINCT]
SELECT 语句]
ALL | DISTINCT:默认为DISTINCT系统默认取出重复行,要得到所有行可以使用ALL
示例:
SELECT * FROM sell
UNION
SELECT * FROM sell2;