MySQL数据库之单表查询中关键字的执行顺序


1 语法顺序

select
distinct
from
where
group by
having
order by
limit

2 执行顺序

from            #step1 确定在哪张表做查询
where           #step2 设置过滤条件,过滤出符合条件的内容
group by        #step3 对过滤后的数据按字段分组
having          #step4 再进一步对分组后的数据过滤
select          #step5 查找数据
distinct        #step6 去重
order by        #step7 对去重后的数据按要求排序
limit           #step8 限制显示或打印数据的条数

1、正确且高效地查询数据的前提是:明确这些关键字的使用语法、语法顺序、执行顺序

2、语法顺序、执行顺序都是固定不能改变的,我们要按照MySQL的规则来使用

3、关键字的知识点较多且繁琐,需要我们灵活使用。

3 关键字使用语法

3.1 from

1、统计分析表中数据,第一步肯定是确定被统计的是那张表,使用关键字from,意为从该表中查数据

#示例
select * from student;   #从student表中查所有字段的数据

3.2 where

1、where使用在分组前,目的是过滤出需要统计待分析的那些数据

2、where在分组前,不能使用聚合函数,可以使用任意字段过滤

3、where可以使用的过滤条件包括:

  • 比较运算符,><>= <= <> !=
  • between and in 等关键字
  • 逻辑运算符,and or not
  • 模糊查询,like "pattren" , pattern 中有%表示任意读个字符,_表示一个字符
  • 正则表达式 regexp
#示例
from student where sname="jack";            #过滤出姓名为"jack"的学生
from student where sid>20;                  #过滤出学号大于20的学生们
from student where sid between 10 and 20;   #过滤出学号在10-20之间的学生们
from student where sid in (2,5,8);          #过滤出学号为2或者5或者8的学生
from student where sid >10 and sscore >90;  #过滤出学号大于10且分数大于90分的学生
from student where sname like "刘%";         #过滤出姓刘的学生们
from student where sname regexp "^刘";       #"刘"开头的,即姓刘的学生

3.3 group by

1、分组再where之后,是对过滤出来的数据再按要求的字段分组

2、group by 分组的目的是为了统计分析每个组内的数据信息,如班级人数,每个班级的平均分、男女人数等

3、分组后,只能使用分组字段、如果需要查看组内信息需要使用聚合函数

4、group by 还可以和group_concat()一块使用,查看组内成员信息

5、如果不适用group by,默认这张表示一个组

#示例
select class_name, count(sid) from student group by class_name;
select class_name,group_concat(sname) from student group by class_name;

3.4 having

1、having也是过滤的作用,但having用在分组后,是过滤组级别的

2、having与where不同,having只能使用分组字段或者是聚合函数,不能使用其他字段

3、where使用的那些过滤方式,having 也适用

#示例
select class_id,count(sid) from student group by class_id having class_id >10;
select class_id,count(sid) from student group by class_id having avg(score)>60;

3.5 select

1、select是选择数据的意思,后面直接更想要显示的数据字段,可以用聚合函数,如果是* 代表所有字段

3.6 distinct

1、distinct 去重的功能

#示例
select distinct course_name from student group by course_name;
#目的是统计有个不同的班级,因为存在不同的学生在一个班级,不使用distinct显示不美观

3.7 order by

1、order by 是对上述确定的数据做排序,分升序和降序两种

2、默认升序排列

#示例
select * from student order by sid asc;     #学号升序排列,此时可省略关键字 asc
select *from student order by score desc;   #分数降序排列

3.8 limit

1、限制查询的记录数

2、limit后面直接跟一个数字n,表示显示n条记录

3、limit后面分别跟两个数字n1,n2,表示从n1位置开始,显示n1位置后面的n2条记录

#示例
select sid from student limit 5;        #显示5条记录,sid分别为:1\2\3\4\5
select sid from student limit 0,5;      #显示5条记录,sid分别为:1\2\3\4\5,默认从0开始
select sid from student limit 1,5;      #显示5条记录,sid分别为:2\3\4\5\6

MySQL数据库之单表查询中关键字的执行顺序的更多相关文章

  1. MySQL数据库语法-单表查询练习

    MySQL数据库语法-单表查询练习 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要是对聚合函数和分组的练习. 一.数据表和测试数据准备 /* @author :yinz ...

  2. mysql数据库之单表查询多表查询

    单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex e ...

  3. mysql数据库之单表查询

    单标查询 单表查询语句 关键字执行的优先级 简单查询 where约束 group by 聚合函数 HAVING过滤 order by 查询排序 LIMIT限制查询的记录数 使用正则表达式查询 单表查询 ...

  4. SQL查询中关键字的执行顺序

    SQL语句中的每个关键字都按照顺序往下执行,而每一步操作会生成一个临时表,最后的临时表就是最终结果: FROM <left_table>:from子句返回初始结果集 <join_ty ...

  5. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

  6. MySQL数据库语法-多表查询练习一

    MySQL数据库语法-多表查询练习一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的多表查询的外键约束,以及如何使用外链接和内连接查询数据信息. 一.数据表和测试 ...

  7. mysql 数据操作 单表查询 目录

    mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...

  8. mysql 数据操作 单表查询 where 约束 目录

    mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...

  9. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

随机推荐

  1. Oracle JDK与OpenJDK到底有什么不同?

    ​不知道各位developer平时是否有过疑问,Oracle JDK是什么,OpenJDK又是什么? Oracle JDK便是平常我们在windows系统上做开发使用的JDK,又称作SUN JDK.O ...

  2. unc路径

    1.什么是UNC路径?UNC路径就是类似\\softer这样的形式的网络路径.UNC为网络(主要指局域网)上资源的完整 Windows 2000 名称.格式: \\servername\sharena ...

  3. windows上使用pip下载东西时报编码错误问题解决方法

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码.解决办法是: python目录 Python27\Lib\site-packages 建一个文件site ...

  4. eclipse Mac 下补全代码

    1. 每次输入都自动提示 点击 Eclipse,使其成为第一响应者,preferences->Java->Editor->Content Assist再右下角 Auto activa ...

  5. codeforces 213div(2) 365 A.Good Number 365 B.The Fibonacci Segment

    #include <stdio.h> #include <string.h> bool vis[11]; int n, k; bool judge(int x) { memse ...

  6. Serilog 自定义Enricher 来增加记录的信息

    Serilog 自定义Enricher 来增加记录的信息 Intro Serilog 是 .net 里面非常不错的记录日志的库,结构化日志记录,而且配置起来很方便,自定义扩展也很方便 Serilog ...

  7. Oracle创建设置查询权限用户

    用户创建的可以参考博客: https://blog.csdn.net/u014427391/article/details/84889023 Oracle授权表权限给用户: 语法:grant [权限名 ...

  8. java并发编程(十一)----(JUC原子类)基本类型介绍

    上一节我们说到了基本原子类的简单介绍,这一节我们先来看一下基本类型: AtomicInteger, AtomicLong, AtomicBoolean.AtomicInteger和AtomicLong ...

  9. Unix-IO-同步,异步,阻塞,非阻塞-笔记篇

    概念更正 https://www.zhihu.com/question/19732473 错误的四个象限分类 https://www.ibm.com/developerworks/cn/linux/l ...

  10. Kafka面试,看这篇文章就够了

    原文链接:https://mp.weixin.qq.com/s/zxPz_aFEMrshApZQ727h4g** 引言 MQ(消息队列)是跨进程通信的方式之一,可理解为异步rpc,上游系统对调用结果的 ...