黑马程序员技术交流社区

标题: DQL语句的约束查询 [打印本页]

作者: wstgzy    时间: 2019-5-31 13:12
标题: DQL语句的约束查询
/*----【排序查询 order by】----*/
SELECT * FROM t_user;
-- 需求:按数学成绩从低到高排序,缺考的排到最后
SELECT * FROM t_user ORDER BY math;
SELECT * FROM t_user ORDER BY math ASC;-- ASC表示升序,默认排序方式就是升序
-- 需求:按英语成绩从高到低排序,缺考的排到最上面
SELECT * FROM t_user ORDER BY english DESC;-- 缺考的为NULL值,默认会排到最后
SELECT * FROM t_user ORDER BY IFNULL(english,101) DESC;
-- 需求:依次按数学成绩、英语成绩由高到低排列
SELECT * FROM t_user ORDER BY math DESC,english DESC;-- 多字段联合排序
-- 需求:依次按总分、数学成绩、英语成绩由高到低排列
SELECT
    id,
    NAME,
    age,
    gender,
    address,
    math,
    english,
    math + english AS totalScore
FROM
    t_user
ORDER BY math + english DESC,
    math DESC,
    english DESC ;


SELECT * FROM t_user;
/*----【聚合函数】----*/
-- 语法格式:select 聚合函数名(字段名) from 表名;
-- 需求:查询英语最高分是多少
SELECT MAX(english) FROM t_user;
-- 需求:查询英语最高分是谁,如果有并列最高的,都输出
SELECT NAME,english FROM t_user WHERE english=MAX(english);-- ---------------?????????
-- 需求:查看有多少人
SELECT COUNT(id) FROM t_user;-- 一般选用主键进行计算,因为主键是不允许空值的。
SELECT COUNT(english) FROM t_user;-- 英语成绩中有一个NULL值,聚合函数计算是排除NULL值,结果会少1条
SELECT COUNT(IFNULL(english,0)) FROM t_user;-- 对NULL的处理
SELECT COUNT(*) FROM t_user;-- 直接输入一个"*",也是统计有多少条记录


SELECT * FROM t_user;
/*----【分组查询 group by】----
  group by常结合 where子句、having子句一起用
  语法格式:
        select 字段1,字段2... from 表名 [where 条件表达式] group by 要分组的字段名 [having 条件表达式];
*/
-- 需求:将所有人按性别进行分组
-- select后的字段,一般都是写“要分组的字段”或者“聚合函数”
SELECT gender FROM t_user GROUP BY gender;
SELECT * FROM t_user GROUP BY gender;-- 筛选结果极具误导性,不能用这种方式去查询
-- 需求:分别查询男生、女生的数学平均分
SELECT gender,AVG(math) FROM t_user GROUP BY gender;
-- 需求:分别查询男生、女生的数学平均分。缺考及低于60分的人,不参与统计。
SELECT gender,AVG(math) FROM t_user WHERE math>=60 GROUP BY gender;
-- 需求:按男女性别分开,对各自的高分人群的数学均分进行统计。高分指90及以上。
SELECT gender,AVG(math) FROM t_user WHERE math>=90 GROUP BY gender;
-- 需求:分别查询男、女同学的数学均分,人数。
--       要求:分数低于70分的人不参与分组;
--                 分组统计的结果中,参与统计的人数要大于2个人。
SELECT
    gender,
    AVG(math),
    COUNT(id)
FROM
    t_user
WHERE math >= 70
GROUP BY gender
HAVING COUNT(id) > 2 ;


SELECT * FROM t_user;
/*----【分页查询 limit子句】----*/
-- limit子句的格式:limit offset,length;
-- 需求:查询t_user表中第3~8行数据
SELECT * FROM t_user LIMIT 3,6;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2