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. maven打包添加依赖

    <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <versio ...

  2. win10下nodejs的安装及配置

    这里主要引用两篇文章,写的非常详细,也能解决你可能出现的问题 nodejs安装及配置 如何删除之前nodejs设置的 npm config set prefix .....

  3. 抓取崩溃的log日志

    1.下载adb工具包 也就是解锁软件,如果要解锁的话,需确认有fastboot 安装jdk.sdk 2.注意事项 请确保电脑上只连接了一台手机设备(最好只连接一条USB线),同时确保手机已开启USB调 ...

  4. 【Java例题】5.5 两个字符串中最长公共子串

    5. 查找两个字符串中含有的最长字符数的公共子串. package chapter5; import java.util.Scanner; public class demo5 { public st ...

  5. mac下使用zerobrane调试cocos2dx的lua

    环境:MacOSx 10.9.2, Lua 5.1.4, luaSocket 2.0.2, xcode5.0.2 所需文件 luasocket-2.0.2.zip,ZeroBraneStudioEdu ...

  6. 如何用Hexo+Github创建自己的技术博客

    注册一个github GitHub官网.按照一般的网站注册登录执行就好了,不详细说. 安装git 安装很简单,一直下一步 git安装教程 很多教程里都说要配置环境变量,我本人安装过5次左右的git,一 ...

  7. 使用Qt5+CMake实现图片的区域选择(附源码)

    近期研发涉及到了图片的区域选择,找来一些资料一直不能很满意,所以自己实现了一个. 实现步骤如下.源码可以点击ImageAOI获取. 如下资料来自源码的README. ImageAOI (XLabel) ...

  8. JavaFx应用 星之小说下载器

    星之小说下载器 说明: 需要jdk环境 目前只支持铅笔小说网,后续添加更多书源,还有安卓版,敬请期待. 喜欢的话,不妨打赏一波! 软件交流QQ群:690380139 断点下载暂未实现,小说下载途中,一 ...

  9. 100天搞定机器学习|Day35 深度学习之神经网络的结构

    100天搞定机器学习|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习 ...

  10. size命令的sysv和berkeley格式差别

    size命令使用说明 size命令用于显示二进制文件的段(节)大小,其功能类似于readelf -S,详细的说明如下: 用法:size [选项] [文件] 显示二进制文件中节的大小 没有给出输入文件, ...