#数据准备
drop table if exists class;
create table class(
    class_no int(2) unsigned zerofill primary key auto_increment comment '班级编号',
    class_name varchar(30) not null comment '班级名称'
);
insert into class values(1, '培优班');
insert into class values(2, '普通班');

drop table if exists student;
create table student(
    stu_no int(2) unsigned zerofill primary key auto_increment comment '学员编号',
    stu_name varchar(30) not null comment '学员姓名',
    stu_sex varchar(3) not null comment '学员性别',
    stu_age tinyint(2) unsigned zerofill comment '学员年代',
    grade double(5,2) zerofill comment '成绩',
    class_no int(2) unsigned zerofill comment '所在班级编号',
    foreign key(class_no) references class(class_no)  
);
insert into student values(01, '李白', '男', 18, 60, 01);
insert into student values(02, '杜甫', '男', 20, 76, 01);
insert into student values(03, '张飞', '男', 32, 80, 02);
insert into student values(04, '韩信', '男', 26, 98, 02);
insert into student values(05, '了龙', '男', 27, 56, 02);
insert into student values(06, '大乔', '女', 17, 88, 01);
insert into student values(07, '小乔', '女', 16, 96, 01);
insert into student values(08, '小乔', '女', 16, 90, 01);
insert into student values(09, '关哥', '男', 32, 80, 02);
insert into student values(10, '刘备', '男', 36, 98, null);
alter table student drop foreign key `student_ibfk_1`;
*******************************************************************************************************************************

1: [ group by ] 分组   
    需求: 查询出每一个班级最高成绩是多少
    例: select class_no, max(grade) from student group by class_no;  --先按class_no分组,然后再拿到每一组的最高成绩
    例: select class_no, sum(grade) from student group by class_no;  --查询每一个班级的总成绩
    例: select class_no, min(grade) from student group by class_no;  --查询每一个班级的最低成绩
    例: select class_no, avg(grade) from student group by class_no;  --查询每一个班级的平均成绩
    例: select class_no, count(*) from student group by class_no;    --查询每一个班级的人数
    ps: group by一般要与max,min,avg等这些函数一起使用
    例: select * from student group by class_no;

    --可以进多重分组
    需求: 查询出每一个班级男学生和女学生的最高成绩分别是多少
    例: select class_no, stu_sex ,max(grade) from student group by class_no, stu_sex;

    例: select class_no, stu_name, max(grade) from student group by class_no;   --不能这样做
    ps: 在要查询的字段集中,这些字段要么是包含在group by语句的后面的字段, 要么就是被包含在聚合函数中, 否则会报错

    --还可以对满足条件的记录进行分组
    select class_no, max(grade) from student where class_no is not null group by class_no;
*******************************************************************************************************************************

2: having
    例: select * from student where class_no = 1 and stu_sex = '男';
    例: select * from student having class_no = 1 and stu_sex = '男';

    例: select class_no, max(grade) from student group by class_no having class_no is not null;   --having
    例: select class_no, max(grade) from student group by class_no where class_no is not null;    --报错
    ps: having需要跟在group by后面,而where不能跟在group by后面
*******************************************************************************************************************************

查询它可以配合5个字句来执行,查询到相应数据(where, order by ,limit, group by, having)
这个子句有一个顺序,需要按照顺序来写
    select * from student [where] [group by] [having] [order by] [limit];
    例: select class_no, stu_sex, avg(grade) from student where(class_no is not null) group by class_no,stu_sex having(stu_sex = '男') order by class_no desc limit 1;
*******************************************************************************************************************************

3: [ in ](集合运算符)
    需求: 查询出学号是2,3,5的学生
    例: select * from student where stu_no = 2 or stu_no = 3 or stu_no =5;   --使用or运算符
    例: select * from student where stu_no in (2,3,5);                       --使用in集合运算符

    例: select * from student where class_no in (2, null);                   --in集合运算符查询不到null值

    --还可以有not in
    例: select * from student where stu_no not in (2,3,5);
    例: select * from student where class_no not in (2, null);          --查询结果为空
*******************************************************************************************************************************

4: 子查询
    需求: 获取student表里成绩成绩最高的学员
    例: select * from student order by grade desc limit 1;   --这里不满足需求
    例: select * from student where grade = max(grade);      --报错

    例: select * from student where grade = (select max(grade) from student);
    ps: 在查询里边还有其它的查询,那么我们就把里边的查询叫做子查询,子查询需要括号包起来, 子查询可以有多个

    ps: 子查询其实也就是一个查询,所以它返回的结果有以下几种情况(单一值),(一列),(一行或者一行多列),(多行多列)
    根据返回值的情况不同,可以把子查询分为四种情况
    1: 单一值(标量子查询)
        需求: 获取student表里成绩成绩最高的学员
        例: select * from student where grade = (select max(grade) from student);

    2: 一列(列子查询)
        例: select stu_age from student where grade < 95;

        需求: 查询出成绩小于95的学员年龄
        [ in ](集合运算符)
            例: select * from student where stu_age in (select stu_age from student where grade < 95);     --in在集合中存在的
            例: select * from student where stu_age not in (select stu_age from student where grade < 95); --not in在集合中不存在的
        [ any ]
            例: select * from student where stu_age = any(select stu_age from student where grade < 95);   -- =any等于集合中任意一个就行
            例: select * from student where stu_age != any(select stu_age from student where grade < 95);  -- !=any不满足集合中任意一个就行
        [ all ]
            例: select * from student where stu_age = all(select stu_age from student where grade < 95);   -- =all等于集合中所有元素
            例: select * from student where stu_age != all(select stu_age from student where grade < 95);  -- !=不等于集合中的所有元素(意思就是集合中不存在的)

    3: 一行(行子查询)
        需求: 查询出同一班中相同成绩的    学生的姓名,班级,成绩;
        select stu_name, class_no, grade from student where (class_no, grade) = (select class_no,grade from student group by class_no, grade having count(*) > 1);
        ps: (class_no, grade)意思是临时构造成一个行,根据子查询到一行去比较;

    4: 多行多列(表子查询)
        需求: 查询出表中的stu_name,stu_sex的字段,要使用子查询
        例: select * from (select stu_name, stu_sex from student) as stu;
        ps:from后面需要跟一个表,如果是跟着是一个子查询得的一个临时表,那么你需要给这个字查询起一个加名;

mysql之查询的更多相关文章

  1. Linux下MySQL慢查询分析mysqlsla安装使用

    说明: 操作系统:CentOS 5.X 64位 MySQL版本:mysql-5.5.35 MySQL配置文件:/etc/my.cnf MySQL 数据库存放目录:/data/mysql 实现目的:开启 ...

  2. MySQL的查询计划中ken_len的值计算

    本文首先介绍了MySQL的查询计划中ken_len的含义:然后介绍了key_len的计算方法:最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用. key_len的含义 ...

  3. mysql的查询、子查询及连接查询

    >>>>>>>>>> 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组). ...

  4. MySQL慢查询日志总结

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

  5. 【转】Mysql联合查询union和union all的使用介绍

    Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合... ...

  6. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  7. Mysql慢查询和慢查询日志分析

     Mysql慢查询和慢查询日志分析   众所周知,大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的.下面总结一些使用过或者研究过的经验,从配置以 ...

  8. [django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法

    前言:不废话.,直接进入正文 正文: 如何使用distinct在mysql中查询多条不重复记录值? 首先,我们必须知道在django中模型执行查询有两种方法: 第一种,使用django给出的api,例 ...

  9. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  10. mysql datetime查询异常

    mysql datetime查询异常 异常:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp (2011 ...

随机推荐

  1. bash下常用快捷键

    Ctrl-A 相当于HOME键,用于将光标定位到本行最前面Ctrl-E 相当于End键,即将光标移动到本行末尾Ctrl-B 相当于左箭头键,用于将光标向左移动一格Ctrl-F 相当于右箭头键,用于将光 ...

  2. alpha-咸鱼冲刺day6

    一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 !!!QAQ可以做到跟数据库交互了!!!!先来撒花花!(然后继续甲板) (然后就没有进展了.翻车+1s) 四,问题困难 数据库交 ...

  3. 解决python中flask_sqlalchemy包安装失败的问题

    在进行flask_sqlalchemy包的下载安装时出现以下问题: 由图片可看出是编码转换出了问题,找到pip\compat_init_.py文件,打开它并查看第73行,将代码做如下更改并保存: 问题 ...

  4. 201621123040《Java程序设计》第5周学习总结

    1.本周学习总结 1.1写出你认为本周学习中比较重要的知识点关键词 关键词:接口 Comparable Comparator 比较排序 1.2尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需 ...

  5. 201621123068 Week04-面向对象设计与继承

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:继承.多态.重载.关键字.父类与子类 1.2 尝试使用思维导图将这些关键词组织起来. 2. 书面作业 1. 面向对象设计(大 ...

  6. Hibernate与mysql的对应类型

    Hibernate映射类型 Java类型 标准SQL类型  integer  java.lang.Integer  integer  long  java.lang.Long  bigint  sho ...

  7. Android Notification setLatestEventInfo方法已废弃

    代替setLatestEventInfo的方法是用Notification.Builder创建Builder对象,通过该对象设置Notification相关属性. otification.Builde ...

  8. html{font-size:62.5%}

    为什么要使用html,body{font-size:62.5%}? 使用以下代码查看浏览器的初始font-size: <!DOCTYPE html><html><head ...

  9. raid5两块硬盘离线怎么办? 强制上线失败如何恢复数据

    服务器故障描述: 客户使用Dell 2850服务器组建了raid5磁盘阵列,阵列中包含有6块硬盘(SCSI硬盘,单盘容量300G),服务器操作系统为linux Redhat4:文件系统为ext3文件系 ...

  10. 前端面试题:JS中的let和var的区别

    最近很多前端的朋友去面试被问到let和var的区别,其实阮一峰老师的ES6中已经很详细介绍了let的用法和var的区别.我简单总结一下,以便各位以后面试中使用. ES6 新增了let命令,用来声明局部 ...