手撸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 ...
随机推荐
- JavaGUI之Swing简单入门示例
简介 AWT(译:抽象窗口工具包),是Java的平台独立的窗口系统,图形和用户界面器件工具包. Swing 是为了解决 AWT 存在的问题而以 AWT 为基础新开发的包(在使用Swing时也常会用到j ...
- Reinforcement learning in populations of spiking neurons
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 尽管存在神经元变异性,但是群体编码被广泛认为是实现可靠行为响应的重要机制.但是,随着全局奖励信号与任何单独神经元的性能越 ...
- SQL语句组合查询 UNION
1.使用UNION UNION 可以涉及编写多条SELECT语句,首先看看单条语句 第一条SELECT语句把Illinois,Indiana,Michigan等州的缩写传递给IN子句,检索出这些州的所 ...
- 牛客网PAT练兵场-德才论
题解:用sort排序即可 题目地址:https://www.nowcoder.com/questionTerminal/97b6a49a85944650b2e3d0660b91c324 /** * C ...
- 牛客网数据库SQL实战解析(41-50题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 「Netty实战 02」手把手教你实现自己的第一个 Netty 应用!新手也能搞懂!
大家好,我是 「后端技术进阶」 作者,一个热爱技术的少年. 很多小伙伴搞不清楚为啥要学习 Netty ,今天这篇文章开始之前,简单说一下自己的看法: @ 目录 服务端 创建服务端 自定义服务端 Cha ...
- js byte字节流和数字,字符串之间的转换,包含无符和有符之间的转换
var NumberUtil={ //byte数组转换为int整数 bytesToInt2:function(bytes, off) { var b3 = bytes[off] & 0xFF; ...
- SpringBoot中关于Excel的导入和导出
前言 由于在最近的项目中使用Excel导入和导出较为频繁,以此篇博客作为记录,方便日后查阅.本文前台页面将使用layui,来演示对Excel文件导入和导出的效果.本文代码已上传至我的gitHub, ...
- IDEA创建MAVEN项目并使用tomcat启动
一.开发环境准备 1.JDK1.8,已经配置好环境变量 2.IDEA2019.2,目前稳定版里面个人认为还不错的 3.tomcat服务器,笔者使用的是apache-tomcat-8.5.57 4.使用 ...
- Q200510-03-02: LRU缓存机制
问题: LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果 ...