【一周入门MySQL—2】单表查询
单表查询
数据查询语言DQL
单表查询的基本语法:
- 全表查询:select * from 表名;
- 查询指定列:select 字段1[,字段2] from 表名;
- 别名的设置:select 字段 [as] 列别名from 表名 [as] 表别名;
- 查询不重复的记录:select distinct 字段名 from 表名;
- 条件查询:select 字段1[,字段2] from 表名 where 查询条件;
- 空值查询:select 字段1[,字段2] from 表名 where 空值字段 is [not] null;
- 模糊查询:select 字段1[,字段2] from 表名 where 字符串字段 [not] like 通配符;
模糊查询通配符:
百分号(%) 通配符:匹配多个字符;
下划线(_) 通配符:匹配一个字符;
查询结果为临时存在的虚拟结果集。
--设置别名select *,sal+1000 as 调薪 from emp;select *,sal+1000 挑衅 from emp;
其中as可以省略,如下面的查询语句。
select empno,ename,sal*12 年薪 from emp;
distinct 可以对一个字段或者多个字段去重。
distinct 多字段去重的时候位于第一个字段的前面。
运算符:
运算顺序:算数运算符 > 比较运算符 > 逻辑运算符
需要改变运算顺序,可以添加括号。
比较运算符:between and 表示闭区间,类似于 大于等于 XXX 小于等于 XXX
-- 条件查询 查询工资大于等于8000小于等于9000的记录select * from emp where sal >= 8000 and sal <= 9000; select * from emp where sal between 8000 and 9000;-- 条件查询 查询部门是11和51且工资小于9000的记录select * from emp where (deptno = 11 or deptno = 51) and sal < 9000;-- 条件查询 查询岗位是业务员的姓名、雇佣日期、工资select ename 姓名,hiredate 雇佣日期,sal 工资 from emp where job = '业务员';-- 空值查询(null不能进行等值判断)-- select * from emp where mgr = null;select * from emp where mgr is null;-- 模糊查询 查询姓张的员工信息(仅字符串类型字段)select * from emp where ename like '张%';-- 模糊查询 查询姓张且名字是三个字的员工信息select * from emp where ename like '张__';-- 模糊查询 查询姓名中包含龙字的员工信息select * from emp where ename like '%龙%';-- 模糊查询 查询姓名中不包含龙字的员工信息select * from emp where ename not like '%龙%';
查询结果控制:
查询结果排序:select 字段1[,字段2] from 表名 order by 字段1 [排序方向,字段2 排序方向......];
多个字段排序时,先按照第一个字段排序,第一个字段值相同时,再按照第二个字段排序;
排序方向:asc升序,desc降序,没有指定排序方向时,默认是升序;
限制查询结果数量:select 字段1[,字段2] from 表名 limit [偏移量,] 行数;
limit接受一个或者两个数字参数,参数必须是一个整数常量;
第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目;
如果只给定一个参数,表示返回最大的记录行数目;
初始记录行的偏移量是0(切记不是1);
-- 所有的员工信息按照工资的降序排列select * from emp order by sal desc;-- 查询所有员工信息,先按照部门编号升序,再按照基本工资降序排列select * from emp order by deptno asc,sal desc;-- 限制查询,查询基本工资最高的前五位员工信息(相当于省略了偏移量0)select * from emp order by sal desc limit 5;-- 限制查询,查询基本工资排在6-8名的员工信息(limit需要两个参数,即偏移量和条目数)-- 偏移量从0开始计算select * from emp order by sal desc limit 5,2;-- 查询最后入职的5名员工select * from emp order by hiredate desc limit 5;
聚合函数
- avg():列的平均值
- count():列的行数
- max():列中最大值
- min():列中最小值
- sum():列中值的和
所有聚合函数都忽略空值null,仅对非空数值进行计算。
其中count()可以对所有字段进行计数。
维度和度量
维度:用来分组的分类字段,包括无序分类字段(姓名、性别、血型等字段)和有序分类字段(学历、职称、舱位等字段);
度量:用来聚合运算的数值字段(年龄、数量、金额等字段);
分组查询
分组查询:select 字段1[,字段2] from 表名 [where 查询条件] group by 分组字段1[,分组字段2......];
将查询结果按照一个或者多个字段进行分组,字段值相同的为一组,对每个组进行聚合计算;
分组后筛选:select 字段1[,字段2] from 表名 [where 查询条件] group by 分组字段1[,分组字段2......] having 筛选条件;
where 子句与having子句的区别:
where子句作用于表,having子句作用于组;
where条件查询的作用域是针对数据表进行筛选,而having条件查询则是对分组结果进行过滤;
where在分组和聚合计算之前筛选行,而having在分组和聚合之后筛选分组的行,因此where子句不能包含聚合函数;
select语句书写的顺序
子句顺序 |
说明 |
是否必须使用 |
SELECT |
要返回的列或者表达式 |
是 |
FROM |
从中检索数据的表或视图 |
仅从中检索数据时使用 |
WHERE |
行级过滤 |
仅对记录进行筛选时使用 |
GROUP BY |
分组字段 |
仅在分组聚合运算时使用 |
HAVING |
组级过滤 |
仅对分组进行筛选时使用 |
ORDER BY |
输出排序 |
仅对查询结果进行排序时使用 |
LIMIT |
限制输出 |
仅对查询结果限制输出时使用 |
分组后只能显示分组字段和聚合字段。
where子句必须跟在from子句后面,而且不能使用聚合函数作为条件。
-- 查询emp表中员工总数、最高工资、最低工资、平均工资及工资总和select count(*) 员工总数,max(sal) 最高工资,min(sal) 最低工资,avg(sal) 平均工资,sum(sal) 工资总和 from emp;-- 按照部门号查询emp表中员工总数、最高工资、最低工资、平均工资及工资总和select deptno 部门号,count(*) 员工总数,max(sal) 最高工资,min(sal) 最低工资,avg(sal) 平均工资,sum(sal) 工资总和from empgroup by deptno;-- 查询各部门不同岗位的平均工资select deptno 部门号,job 职位,avg(sal) 平均工资 from empgroup by deptno,joborder by deptno,avg(sal);-- 分组后筛选: 查询各部门业务员的平均工资select deptno 部门号,job 职位,avg(sal) 平均工资 from empgroup by deptno,jobhaving job = '业务员'order by deptno,avg(sal); select deptno 部门号,job 职位,avg(sal) 平均工资 from empwhere job = '业务员'group by deptno,joborder by deptno,avg(sal); -- 查询平均工资大于8000的部门select deptno 部门号,avg(sal) 平均工资from empgroup by deptnohaving avg(sal) > 8000;# MySQL5.7以后版本可以在having子句后使用select定义的别名作为条件select deptno 部门号,avg(sal) 平均工资from empgroup by deptnohaving 平均工资 > 8000;
【一周入门MySQL—2】单表查询相关推荐
- MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名
目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...
- Oracle入门--水表项目(单表查询,链接查询,左右外连接,子查询,分页查询)(3)
水表项目建表 1.1.1 分析 1.1.2 SQL实现 表结构 -- <自来水公司收费系统> -- 1 业主类型表 create table t_ownertype(id number p ...
- MySQL之单表查询、多表查询(一)
阅读目录 一.单表查询: ①.基本语法执行顺序 ②.where约束条件的使用 ③.group by 分组 ④.having (类似于where,但是必须在group by语句后使用) ⑤.distin ...
- python mysql查表_python进阶(十、mysql:单表查询)
3.mysql数据库 3.10 单表查询 3.10.1. 简单查询 查询在数据库中使用的频率是最高的:十次查询,一次增删改. 1)建表 2)插入数据 3.10.1.1. 选择字段:select sel ...
- 04 Mysql之单表查询
1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法select * from,这个sele ...
- mysql:单表查询,多表查询.
文章目录 mysql mysql基本查询语句及方法 连表 子连接 单表查询 多表查询 一 单表查询 1.前期表与数据准备 插入记录 插入表数据 2.语法书写与执行顺序 在写SQL命令是注意两点: 执行 ...
- mysql练习-单表查询和多表查询
单表查询 CREATE TABLE `worker` (`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` ...
- MySQL之单表查询、多表查询(二)
⑥.order by (排序) --------------------------------------------------------------------注:如果你对python感兴趣, ...
- MySQL之单表查询
一.关键字的执行优先级 1,from:找到表 2,where:拿着where指定的约束条件,去文件/表中取出一条条数据 3,group by:将取出的一条条数据进行分组,如果没有group by,则整 ...
- Mysql ==》 单表查询
主要内容: 1.查询语法 2.关键字的执行优先级 3.简单查询 4.单条件查询 5.where 约束 6.分组查询: group by 7.使用聚合函数查询 8.having 过滤 9.查询排序:or ...
最新文章
- dnn神经网络_OpenCV3.3深度神经网络(DNN)模块
- Spring进阶的几大要点,你有做到吗?
- 20个优秀的JavaScript 键盘事件处理库
- 作研究需要的绣花功夫
- swagger文档转换为WebApiClient声明式代码
- 五个免费UML建模工具推荐
- 数组的升序排序 字符串的方法 0308
- 智慧城市——数字化城市管理平台系统建设方案
- 微信公众号主体注销了,怎么办理账号迁移和公证?
- java计算农历日期
- 中e管家理财小方法让闲钱变成活钱
- Redhat linux命令行连接wifi
- 十分钟了解K-means聚类
- 何为五笔输入的最高境界?
- 【Ubuntu】Ubuntu16.04安装GTX960M显卡驱动(960、1070and 750ti直接图形界面安装亲测能用,1080需要到命令界面安装亲测能用)
- Vllos笔记-Java基础
- 已知华氏求摄氏C语言,c语言:根据华氏温度求摄氏温度,并分析错误
- Prometheus监控(一)
- 用户配额(限额)不足
- docusign怎么用_轨道上的Ruby上的docusign集成