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. 性能测试-loadrunner参数化

    工具:loadrunner11 ie8 场景:不同用户的登录 1.参数化功能: 让脚本使用批量的变化的数据测试,实现模拟不同数据/用户的行为 函数格式:返回值类型 函数名称(参数类型 参数,参数类型 ...

  2. Spring源码分析之环境搭建

    写在最前面 最近突然心血来潮,想看看源码,看看大牛都怎么码代码,膜拜下.首选肯定是spring大法,于是说干就干,从GitHub上下载spring-framework源码编译拜读. 环境搭建 安装JD ...

  3. 02-Kubenetes资源

    目录 Kubenetes资源 常用资源对象 标签labels 创建资源的方式 Pod pods.spec.containers 必须 nodeSelector <map [string]stri ...

  4. Windows下安装python2与python3以及分别对应的virtualenv

    第三次装python2与python3 除此之外还学会了如何在命令行复制代码1.单击右键2.菜单中选择标记3.按住左键选中需要复制的内容4.松开左键5.单击右键 全局中python版本为python2 ...

  5. 【POJ - 1064】Cable master(二分)

    Cable master Descriptions 输入2个数 N  K n条绳子    要分成大于等于k段 求每段最长多长呢?并且每段不能小于1cm 必须以厘米精度写入数字,小数点后正好是两位数.如 ...

  6. Vue+Typescript中在Vue上挂载axios使用时报错

    Vue+Typescript中在Vue上挂载axios使用时报错 在vue项目开发过程中,为了方便在各个组件中调用axios,我们通常会在入口文件将axios挂载到vue原型身上,如下: main.t ...

  7. Java学习多线程第二天

    内容介绍 线程安全 线程同步 死锁 Lock锁 等待唤醒机制 1    多线程 1.1     线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果 ...

  8. 3、K-近邻算法

    K最近邻(k-Nearest Neighbor,KNN)分类算法 1.定义:如果一个样本在特征空间中的k个最近似(即特征空间中最临近)的样本中大多数属于某一类别,则该样本也属于这个类别. 2.计算公式 ...

  9. Hadoop单机、伪分布式、分布式集群搭建

    JDK安装 设置hostname [root@bigdata111 ~]# vi /etc/hostname 设置机器hosts [root@bigdata111 ~]# vi /etc/hosts ...

  10. [原创实践]RedHat Enterprise Linux 5 安装GCC和redis

    Redis的安装需要使用GCC,Red Hat Enterprise 5默认是不安装gcc的,需要自己手动安装. 1:查看系统中是否有gcc gcc -v 查看本机linux版本 lsb_releas ...