手撸Mysql原生语句--单表
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
- Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
- 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查询排序的使用
查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序
select * from employee order by age asc,hire_date desc;
查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
select post,avg(salary) from employee group by post having avg(salary)>10000 order by avg(salary) asc;
查询各岗位平均薪资大于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原生语句--单表的更多相关文章
- 手撸Mysql原生语句--多表
在开始之前,我们需要建立表,做建表和数据的准备的工作. 1.建表 create table department( id int, name varchar(20) ); create table e ...
- 手撸Mysql原生语句--增删改查
mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...
- mysql——查询语句——单表查询——(概念)
一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...
- mysql——查询语句——单表查询——(示例)
一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...
- mysql 基础入门 单表查询
单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...
- mysql 数据操作 单表查询 目录
mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...
- mysql 数据操作 单表查询 where 约束 目录
mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...
- mysql 数据操作 单表查询 group by 分组 目录
mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...
- MySQL数据库之单表查询中关键字的执行顺序
目录 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 2 执行顺序 3 关键字使用语法 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from ...
随机推荐
- 【转】camera tuning
chromatix项目必须包含有效的 ADC image.png filcker: 交流电照明灯发出的光会一定频率的抖动导致sensor图像出现行方向的水波纹,称之为filcker.目前主要的交流电频 ...
- 学生成绩管理系统(SSM+MySQL+JSP)
开发工具:Eclipse前端技术:基础:html+css+JavaScript框架:JQuery+H-ui后端技术:Spring+SpringMVC+mybatis模板引擎:JSP数据库:mysql ...
- 求求大厂给个Offer:Map面试题
前言 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创文章,最近在连载面试系列! 我,三歪,最近开始写面试系列.我给这个面试系列 ...
- 远程调试在Linux车机中的应用
导读 在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差别,嵌入式系统的可视化调试能力比桌面操作系统要弱一点.对于导航这种业务场景比较复杂的程序开发,可视化调 ...
- js实现csv下载
var TableDatas = '数据源';function getCSV(){ if(this.TableDatas.length === 0){ alert("没有数据呀呀呀呀!&q ...
- VuePress初探(一)
原文参考链接 手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunch ...
- Hadoop Windows IDEA
java jdk1.8都可以了 注意jdk的路径要拷贝到一个没有空格的路径改掉JAVA_HOME系统环境变量 在etc/hadoop/hadoop_env.cmd里有设置%JAVA_HOME%了不用管 ...
- qdu-小明的贪心题(最短路+最短路的数量 )
Description 小明来到青岛上学已经一年了,他给青岛这座城市画了一张地图.在这个地图上有n个点,小明的起始点为1号点,终点为n号点,并且地图上的所有边都是单向的.小明知道从i号点到j号点的时间 ...
- 数据库系统第一章【绪论】(B站视频)
目录 数据库系统第一章[绪论](B站视频) 一.绪论 数据库的四大基本概念 数据 数据库 数据库管理系统 主要功能 数据库系统 数据管理 我的理解 数据系统的特点 数据结构化 数据系统的共享性 数据独 ...
- tomcat7升级到tomcat8注意事项
第一点:context.xml配置jndi的参数修改 maxActive 替换为 :maxTotal maxWait 替换为 :maxWaitMillis factory="org.ap ...