单表查询

数据查询语言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】单表查询相关推荐

  1. MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名

    目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...

  2. Oracle入门--水表项目(单表查询,链接查询,左右外连接,子查询,分页查询)(3)

    水表项目建表 1.1.1 分析 1.1.2 SQL实现 表结构 -- <自来水公司收费系统> -- 1 业主类型表 create table t_ownertype(id number p ...

  3. MySQL之单表查询、多表查询(一)

    阅读目录 一.单表查询: ①.基本语法执行顺序 ②.where约束条件的使用 ③.group by 分组 ④.having (类似于where,但是必须在group by语句后使用) ⑤.distin ...

  4. python mysql查表_python进阶(十、mysql:单表查询)

    3.mysql数据库 3.10 单表查询 3.10.1. 简单查询 查询在数据库中使用的频率是最高的:十次查询,一次增删改. 1)建表 2)插入数据 3.10.1.1. 选择字段:select sel ...

  5. 04 Mysql之单表查询

    1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法select * from,这个sele ...

  6. mysql:单表查询,多表查询.

    文章目录 mysql mysql基本查询语句及方法 连表 子连接 单表查询 多表查询 一 单表查询 1.前期表与数据准备 插入记录 插入表数据 2.语法书写与执行顺序 在写SQL命令是注意两点: 执行 ...

  7. mysql练习-单表查询和多表查询

    单表查询 CREATE TABLE `worker` (`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` ...

  8. MySQL之单表查询、多表查询(二)

    ⑥.order by (排序) --------------------------------------------------------------------注:如果你对python感兴趣, ...

  9. MySQL之单表查询

    一.关键字的执行优先级 1,from:找到表 2,where:拿着where指定的约束条件,去文件/表中取出一条条数据 3,group by:将取出的一条条数据进行分组,如果没有group by,则整 ...

  10. Mysql ==》 单表查询

    主要内容: 1.查询语法 2.关键字的执行优先级 3.简单查询 4.单条件查询 5.where 约束 6.分组查询: group by 7.使用聚合函数查询 8.having 过滤 9.查询排序:or ...

最新文章

  1. dnn神经网络_OpenCV3.3深度神经网络(DNN)模块
  2. Spring进阶的几大要点,你有做到吗?
  3. 20个优秀的JavaScript 键盘事件处理库
  4. 作研究需要的绣花功夫
  5. swagger文档转换为WebApiClient声明式代码
  6. 五个免费UML建模工具推荐
  7. 数组的升序排序 字符串的方法 0308
  8. 智慧城市——数字化城市管理平台系统建设方案
  9. 微信公众号主体注销了,怎么办理账号迁移和公证?
  10. java计算农历日期
  11. 中e管家理财小方法让闲钱变成活钱
  12. Redhat linux命令行连接wifi
  13. 十分钟了解K-means聚类
  14. 何为五笔输入的最高境界?
  15. 【Ubuntu】Ubuntu16.04安装GTX960M显卡驱动(960、1070and 750ti直接图形界面安装亲测能用,1080需要到命令界面安装亲测能用)
  16. Vllos笔记-Java基础
  17. 已知华氏求摄氏C语言,c语言:根据华氏温度求摄氏温度,并分析错误
  18. Prometheus监控(一)
  19. 用户配额(限额)不足
  20. docusign怎么用_轨道上的Ruby上的docusign集成

热门文章

  1. Hashtable:仅有两列的表
  2. 春节书单:优秀的产品经理们都在读什么?
  3. 带你遍历用户生命价值与流失挽救(上) : 流量下的价值套路
  4. 开发人员能力不足的情况下如何推进敏捷开发?
  5. 大话架构”阿里架构师的笔记——多研究些架构,少谈些框架
  6. Java JNI简单实现
  7. LaTeX Test
  8. java.lang.NoSuchMethodError
  9. 50个不上你网站的理由
  10. 备份MySQL数据库的方法