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. linux 基本命令整理--转

      推荐:http://www.cnblogs.com/lingiu/p/3446647.html 1. 查看目录文件:ls2. 查看目前路径:psw3. 查看文件内容:cat 文件名4. 打开编辑器 ...

  2. Robot Framework(6)——案例分层

    上一篇以gogomall的登录为例,记录了一个简单的登录流程的脚本,在实际应用中,当流程发生一些小的变动,或者前端代码改变,导致元素选择器失效,我们维护脚本的成本就比较大,需要一个一个去修改,所以,有 ...

  3. 算法-利用队列实现逐行打印杨辉三角形的前n行

    分别打印二项式(a+b)^n展开项的系数,在程序中利用了一个队列,在输出上一行系数时,将下一行的系数预先放入队列中.在各行系数间插入0. void YANGVI(int n){ Queue q(n+) ...

  4. 结对项目:四则运算(C语言)

    github地址:https://github.com/nilonger/arithmetic 结对伙伴:杨锐龙+黄海钊 一.项目要求 1.1 题目:实现一个自动生成小学四则运算题目的命令行程序(也可 ...

  5. 6套MSP430开发板资料共享 | 免费下载

    ​目录 1-MSP430 开发板I 2-MSP430mini板资料 3-MSP430F149开发板资料 4-KB-1B光盘资料 5-LT-1B型MSP430学习板光盘 6-MSP-EXP430F552 ...

  6. 区块链入门到实战(22)之以太坊(Ethereum) – 账号(地址)

    作用: 外部账号 – 用户使用的账号,账户余额. 合约账号 – 智能合约使用的账号,每个智能合约都有一个账号,内存和账户余额 以太坊(Ethereum)网络中,有2种账号: 外部账号 – 用户使用的账 ...

  7. 每日一学-python calendar

    python模块之calendar方法详细介绍 1.首先我们看下calendar的内置函数和相关的属性: import calendar dir(calendar) ['Calendar', 'EPO ...

  8. 深入了解Redis(3)-对象

    Redis主要的数据结构有简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合,等等.但Redis并没有直接使用这些数据结构来实现键值对数据库, 而是基于这些数据结构创建了一个对象系统, 这个 ...

  9. 通过Tomcat jpress连接不到数据库

    -- 实际数据库.用户名,密码,主机账号,端口号均正确 提示如下: 异常如下:------------------------------------------------------------- ...

  10. 力扣Leetcode 560. 和为K的子数组

    和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...