select from where group by having order by limit

上面的所有操作是有执行的优先级的顺序的,我们将执行的过程可以总结为下面所示的七个步骤。

1.找到表:from

2.拿着where指定的约束条件,去文件/表中取出一条条记录

3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

4.执行select(去重)

5.将分组的结果进行having过滤

6.将结果按条件排序:order by

7.限制结果的显示条数

select from的使用

简单查询

SELECT id,emp_name,sex,age,hire_date,post,post_comment,salary,office,depart_id FROM employee;

SELECT * FROM employee;

SELECT emp_name,salary FROM employee;

避免重复DISTINCT

SELECT DISTINCT post FROM employee;

通过四则运算:

SELECT emp_name, salary*12 FROM employee;

SELECT emp_name, salary*12 AS Annual_salary FROM employee;

SELECT emp_name, salary*12 Annual_salary FROM employee;

1.查出所有员工的名字,薪资,格式为:<名字:egon> <薪资:3000>

select concat('<名字:',emp_name,'> ','<薪资:',salary,'>') from employee;

2.查询所有的岗位(去掉重复的岗位)

select distinct depart_id from employee;

3.查询所有员工的名字以及他们的年薪,年薪的字段名为annual_year

select emp_name, salary*12 annual_year from employee;

where约束

1.查看岗位是teacher的员工的姓名、年龄

select emp_name,age from emp_name where post = 'teacher';

2.查看岗位是teacher且年龄大于30岁的员工的姓名、年龄

select emp_name,age from employee where post ='teacher' and age >30;

3.查看岗位是teacher且薪资在9000-10000范围内的员工姓名、年龄、薪资

select emp_name,age,salary from employee where post ='teacher' and salary between 9000 and 10000;

select emp_name,age,salary from employee where post ='teacher' and salary >=9000 and salary <=10000;

4.查看岗位描述不为null的员工信息

select * from employee where post_comment is not null;

5.查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资。

select emp_name,age,salary from employee where post = 'teacher' and salary in (10000,9000,30000);

6.查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资。

select emp_name,age,salary from employee where post='teacher' and salary not in (10000,9000,30000);

7.查看岗位是teacher且名字是jin开头的员工姓名、年薪

select emp_name,salary*12 annual_year from employee where post = 'teacher' and emp_name like 'jin%';

select emp_name,salary*12 annual_year from employee where post = 'teacher' and emp_name regexp '^jin';

group by--聚合(sum,avg,min,max,count)的使用

1.查询岗位名及岗位包含的所有员工名字

select post, group_concat(emp_name) from employee group by post;

select post, group_concat(emp_name) as emp_members from employee group by post;

2.查询岗位名以及岗位内包含的员工个数

select post,count(id) from employee group by post;

3.查询公司内男员工和女员工的个数

select sex,count(id) from employee group by sex;

4.查询岗位名以及各岗位的平均薪资

select post,avg(salary) from employee group by post;

5.查询岗位名以及各个岗位的最高薪资

select post,max(salary) from employee group by post;

6.查询敢为名以及各个岗位的最低信息

select post,min(salary) from employee group by post;

7.查询男员工与男员工的平均薪资,女员工和女员工的平均薪资

select sex,avg(salary) from employee group by sex;

8.查询岗位名以及岗位包含员工的所有薪资的总和

select post,sum(salary) from employee group by post;

having过滤的使用

!!!执行优先级从高到低:where > group by > having

  1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
  2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

1.查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数

select post,group_concat(emp_name),count(id) from employee group by post having count(id)<2;

2.查询各岗位平均薪资大于10000的岗位名、平均工资

select post,avg(salary) from employee group by post having avg(salary) >10000;

3.查询各岗位平均薪资大于10000且小于20000的岗位名、平均薪资

select post,avg(salary) from employee group by post having avg(salary) between 10000 and 20000;

select post,avg(salary) from employee group by post having avg(salary) > 10000 and avg(salary) <20000;

order by查询排序的使用

  1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序

    select * from employee order by age asc,hire_date desc;

  2. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列

    select post,avg(salary) from employee group by post having avg(salary)>10000 order by avg(salary) asc;

  3. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列

    select post,avg(salary) from employee group by post having avg(salary)>10000 order by avg(salary) desc;

limit限制查询的记录数

select * from employee limit 0,5;

select * from employee limit 5,5;

select * from employee limit 10,5;

备注:limit后面的两个数字分别表示的含义为:第一个数字表示的含义是从第几条数据开始,第二个数字表示的是需要取出几条的数据。

使用正则表达式查询

select * from employee where emp_name REGEXP '^ale';

SELECT * FROM employee WHERE emp_name REGEXP 'on$';

SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';

小结:对字符串匹配的方式

WHERE emp_name = 'egon';

WHERE emp_name LIKE 'yua%';

WHERE emp_name REGEXP 'on$';

1.查看所有员工中名字是jin开头,n或者g结果的员工信息。

select * from employee where emp_name regexp '^jin.*[ng]$';

手撸Mysql原生语句--单表的更多相关文章

  1. 手撸Mysql原生语句--多表

    在开始之前,我们需要建立表,做建表和数据的准备的工作. 1.建表 create table department( id int, name varchar(20) ); create table e ...

  2. 手撸Mysql原生语句--增删改查

    mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...

  3. mysql——查询语句——单表查询——(概念)

    一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...

  4. mysql——查询语句——单表查询——(示例)

    一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...

  5. mysql 基础入门 单表查询

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

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

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

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

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

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

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

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

    目录 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 2 执行顺序 3 关键字使用语法 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from ...

随机推荐

  1. Python2.7.8 setuptools 下载及安装方法

    Python2.7.8  setuptools 下载及安装方法 电脑配置:联想笔记本电脑 windows8系统 Python版本:2.7.8 本文章撰写时间:2014.12.11 作者:陈东陈 阅读说 ...

  2. Shell编程—数据展示

    1.标准文件描述符 Linux用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一个非负整数,可以唯一标识会话中打开的文件.每个进程一次 多可以有九个文件描述符.出于特殊目 ...

  3. Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳

    Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳 JERRY_Z. ~ 2020 / 8 / 25 转载请注明出处! 目录 Windows & Lin ...

  4. js apply() call() bind() 的使用

    bind ,call,apply 这三者都是用来改变函数的this对象的指向的. call和apply其实是同一个东西,区别只有参数不同. 其实call和apply ,只要你调用调用一个函数的时候就可 ...

  5. 【WEB自动化测试之控件定位】基于HTML5控件的唯一控件属性定位

      一.WEB控件定位是什么 要想弄懂这个问题,我们还是基于实践来学习.我们先来看一条入门级别自动化测试用例的构成. DemoCase:正确用户名和密码登录博客园,登录成功 URL: https:// ...

  6. AD18 PCB中添加中文字符串显示乱码问题解决

    该问题是由于字符串的自体类型设置问题,AD默认是[stroke],我们点击[TrueType]即可正常显示.PS:AD18搞啥呢,默认显示输入内容不行吗,找半天!!!

  7. Android开发之recycleView详解代码,看完包你熟练掌握recycleView的用法。转自网络经典文章

    来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在 ...

  8. 4-6年经验左右、优秀的 Java 程序员应该具备的技能

    4-6年经验左右.优秀的 Java 程序员应该具备的技能有哪些,按“专业技能”和“项目”两块,包括但不限于以下内容. 专业节能方面 基础:JDK 常用类的原理.源码.使用场景. 设计模式:常用几种的原 ...

  9. 盒子上下滚动到js 底部触发的事件

    //html是用法举列子,js亲测有效(把这段js#scro加到你要滚动的盒子) <div id="scro">  <div>1</div> & ...

  10. 【图像增强】CLAHE 限制对比度自适应直方图均衡化

    文章目录: 目录 1 基本概述 2 竞赛中的CLAHE实现 3 openCV绘制直方图 4 对比度Contrast 5 Contrast Stretching 6 Histogram Equaliza ...