#数据准备
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. web语义化之SEO和ARIA

    在快速理解web语义化的时候,只知道web语义化有利于SEO和便于屏幕阅读器阅读,但并不知道它是如何有利于SEO和便于阅读器阅读的,带着这个疑问,进行了一番探索总结. SEO 什么是SEO? SEO( ...

  2. 实验四 Android程序设计 实验报告

    实验四 Android程序设计 实验报告 目录 代码托管地址 Android程序设计-1 Android程序设计-2 Android程序设计-3 Android程序设计-4 Android程序设计-5 ...

  3. python实现k-近邻算法

    参考:<机器学习实战>- Machine Learning in Action 一. 必备的包 实现此算法需要准备以下的包: • matplotlib,用于绘图 • numpy,数组处理库 ...

  4. Scrum 冲刺 第一日

    Scrum 冲刺 第一日 站立式会议 燃尽图 Alpha 阶段认领任务 明日任务安排 项目预期任务量 成员贡献值计算规则 今日贡献量 参考资料 站立式会议 返回目录 燃尽图 返回目录 Alpha 阶段 ...

  5. Linux 帳號管理與 ACL 權限設定

    1. Linux 的账号与群组1.1 使用者识别: UID 与 GID1.2 使用者账号:/etc/passwd, /etc/shadow1.3 关于群组: 有效与初始群组. groups, newg ...

  6. PM2使用心得

    PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 npm install -g pm2 常用命令 $ npm i ...

  7. OpenShift实战(二):OpenShift节点扩容

    1.新增节点信息 增加节点如下,请将xxx改为自己的域名 node6.xxx.net Node 192.168.8.90 8G 20G/60G 4C node7.xxx.net Node 192.16 ...

  8. Sudoku 第一步

    看到这个问题的思路是先解决生成数独生成器的编写,然后再解决数独求解的问题.最开始第一想法就是暴力求解,仔细算一下复杂度,发现这肯定耗时很久,于是看了很多博客(见转载).我们用回溯搜出来正解.

  9. 新概念英语(1-35)Our village

    新概念英语(1-35)Our village Are the children coming out of the park or going into it ? This is a photogra ...

  10. Ubuntu下安装最新sublime

    1. Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key ...