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. 第六篇Scrum冲刺博客--Interesting-Corps

    第六篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 搜索页面以及音乐详情页面数据导入及测试 各界面数据请求云函数设计及实现 叶学涛 进行页面的优 ...

  2. Linux服务器上创建新用户

    一.在/home目录下新建userName目录 sudo useradd -m -s /bin/bash userName 二.设置密码 sudo passwd userName

  3. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  4. double与Double

    1. double是基本数据类型,Double是原始数据类型(Java 类) 2. double创建引用,Double创建对象 3. double不可以为NULL,Double是类所以其对象是可以为N ...

  5. jQuery源码分析系列(二)Sizzle选择器引擎-上

    前言 我们继续从init()方法中的find()方法往下看, jQuery.find = Sizzle; ... find: function (selector) { /** ... */ ret ...

  6. [NOI2020]美食家 题解

    题意分析 给出一个带权有向图,要求从节点 $1$ 出发,经过恰好 $T$ 的边权和,回到节点 $1$ ,求可经过的最大点权和.特别地,经过的边权和达到部分特殊数时,会有某个点的点权发生改变. 思路分析 ...

  7. 接口测试中postman环境和用例集

    postman的环境使用 postman里有环境的设置,就是我们常说的用变量代替一个固定的值,这样做的好处是可以切换不同的域名.不同的环境变量,不同的线上线下账户等等场景.下面就看下怎么用吧. 创建一 ...

  8. Unity NGUI C#性能优化

    建议读者先看这篇博文:http://blog.csdn.net/zzxiang1985/article/details/43339273,有些技术已经变了,比如第1招,unity5的打包机制已经变许多 ...

  9. html中实现倒计时功能(setInterval,clearInterval)

    倒计时主要用到的知识点:1.设置时间间隔的setInterval可以被clearInterval取消 2.毫秒转换为时分格式 这个是效果图 下面是js中的函数 var shijian=3600; va ...

  10. 当年偶然发现的 Java Bug(JDK 9及之前仍未修复)

    背景 15年在中信银行做持续集成时,由于当时的项目是基于三方采购的 Java 配置开发平台做的,平台自己基于 Ant 插件实现了增量和热部署. 其中有几个项目在持续集成部署时,经常发现 Linux 平 ...