数据库-Mysql使用学习笔记(命令行及图形化界面)(2)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 数据库-Mysql使用学习笔记(命令行及图形化界面)(2)

条件查询

根据条件进行筛选。

SELECT〈目标列组〉

    FROM〈数据源〉

    [WHERE 条件1 [AND [OR]] 条件2 ...]

设A为10、B为20。

                                                 操作符

image.png

查询工资大于等于2000的员工名字

select ename from emp where sal >= 2000;

2020062310470442.png

查询工资在1100到5000的员工名及工资,包含1100和5000

select ename,sal from emp where sal between 1100 and 5000;

2020062310470442.png

between and 适合某值在闭区间中

查询津贴为NULL的员工名,工资和津贴

select ename,sal,comm from emp where comm is null;

2020062310470442.png

在前面查询这个表所有信息的时候,TURNER的津贴为0.00,注意,数据库中null表示有或没有,不能当做数值使用"="等操作符,0.00可以认为是有津贴,但是员工犯错误,扣光了。

查询津贴扣光或没有津贴的可以这样写

select ename,sal,comm from emp where comm is null or comm = 0.00;

select ename,sal,comm from emp where comm > 0.00; 

读者自行尝试,不再截图。

查询薪资大于1000并且部门编号为20或30的员工名,薪资,部门编号

select ename,sal,deptno from emp where sal>1000 and deptno=20 or deptno=30;

2020062310470442.png

看似没有问题,但是实际查询的是薪资大于1000并且部门编号为20的员工,以及部门编号为30的所有员工。原因是and的优先级高于or, sal>1000和deptno=20两个条件合并了。

可以通过加小括号的方式来进行限制,括号的优先级最高。

select ename,sal,deptno from emp where sal>1000 and (deptno=20 or deptno=30);

2020062310470442.png

in 等同于 or,in 后面加的是等于多少的值所构成的数值元组,也可解决上面的问题

select ename,sal,deptno from emp where sal>1000 and deptno in (20,30);

2020062310470442.png

select ename,sal,deptno from emp where sal>1000 and deptno in (20,30); 

not in 就是不在元组中

2020062310470442.png

模糊查询like

  • %:任意多个
  • _:任意一个

查询名字中包含O的员工名

select ename from emp where ename like '%O%';

2020062310470442.png

查询名字第二个字母是'A'的员工名

select ename from emp where ename like '_A%';

2020062310470442.png

如果查找名字中含下划线或百分号的,可以使用转义字符 '\'

select ename from emp where ename like '%\_%';

当然,本数据表里面没有,以后碰到了记得使用转义字符即可。

排序查询

SELECT〈目标列组〉
     FROM〈数据源〉
     [WHERE 条件1 [AND [OR]] 条件2 ...]
     [ORDER BY {列名 | 表达式 | 位置}

查询工作岗位是 'MANAGER'的员工,并按工资升序排列

select * from emp where job = 'MANAGER' order by sal;

2020062310470442.png

默认升序,需要降序添加关键字 desc 即可。 使用asc是升序,你可以像我一样省略。

多条件,逗号隔开,先按前,再按后。

查询员工姓名和工资,并按工资升序排列,如果工资相同,按名字降序排列。

select ename,sal from emp order by sal,ename desc;

2020062310470442.png

位置,按结果的第几列排序,健壮性太差,位置一换就不行了,尽量不用。

select ename,sal from emp order by 2;

2020062310470442.png

分组查询

SELECT〈目标列组〉
     FROM〈数据源〉
     [WHERE 条件1 [AND [OR]] 条件2 ...]
     [ORDER BY {列名 | 表达式 | 位置}
     [GROUP BY {列名 | 表达式 | 位置}
     [HAVING  条件子句]

分组函

  • count 计数
  • sum 求和
  • avg 平均值
  • max 最大值
  • min 最小值

分组函数自动忽略null

查询津贴有几种情况

select count(comm) from emp;

2020062310470442.png

从前面可以看到,comm除了null还有四个。

当出现group by时,select 之后只能加分组字段以及分组函数

2020062310470442.png

    数据错误

    按多个字段分组

    查询每个部门不同工作岗位的最高薪资


      分组函数自动忽略null
    select deptno,job,max(sal) from emp group by deptno,job;

    2020062310470442.png

    分组函数不可直接使用在where子句中

    查询工资高于平均工资的员工的名字和工资。

    select ename,sal from emp where sal > avg(sal);

    2020062310470442.png

    解决办法见子查询一节

    查询每个工作岗位的最高薪资

    select max(sal) from emp group by job;

    2020062310470442.png

    分组函数在分组之后运行,先按job分组,之后再算每一组的最大值。

    having 分组后的数据再次过滤

    查询每个部门最高薪资,仅显示大于2900的部门编号及最大薪资。

    select deptno,max(sal) from emp group by deptno having max(sal) > 2900;

    2020062310470442.png

    运行顺序:

    from 子句 -> where 子句 -> group by 子句 ->having子句 -> select列 子句 -> order by 子句

    where 和having的选择

    having的效率是比较低的

     select deptno,max(sal) from emp where sal > 2900 group by deptno;

    上面也可以完成“查询每个部门最高薪资,仅显示大于2900的部门编号及最大薪资”, 而且where子句在 group by 子句前执行,过滤掉后再进行分组时会少写数据,但是having是在分组之后再运行。

    所以,能用where优先使用where,不行再使用having

    查询每个部门平均薪资,仅显示大于2900的部门编号及平均薪资

    select deptno,avg(sal) from emp group by deptno having avg(sal) > 2900;

    where子句是无法办到的,原因还是执行顺序。

    2020062310470442.png

    去重

    除了分组,还可以使用关键字 distinct 来进行去重。

    select distinct job from emp;

    2020062310470442.png

    注:distinct只能出现在所有字段的最前方,多个字段则表示后面所有字段看做合并字段进行去重。


    相关实践学习
    每个IT人都想学的“Web应用上云经典架构”实战
    本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
    MySQL数据库入门学习
    本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
    相关文章
    |
    6月前
    |
    缓存 关系型数据库 BI
    使用MYSQL Report分析数据库性能(下)
    使用MYSQL Report分析数据库性能
    480 158
    |
    6月前
    |
    关系型数据库 MySQL 数据库
    阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
    阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
    1146 152
    |
    6月前
    |
    关系型数据库 MySQL 数据库
    阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
    阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
    880 156
    |
    6月前
    |
    缓存 监控 关系型数据库
    使用MYSQL Report分析数据库性能(中)
    使用MYSQL Report分析数据库性能
    483 156
    |
    6月前
    |
    关系型数据库 MySQL 分布式数据库
    阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
    阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
    |
    6月前
    |
    关系型数据库 分布式数据库 数据库
    阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
    阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
    |
    6月前
    |
    SQL 关系型数据库 MySQL
    Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
    本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
    |
    6月前
    |
    关系型数据库 MySQL 数据库
    自建数据库如何迁移至RDS MySQL实例
    数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
    |
    6月前
    |
    缓存 监控 关系型数据库
    使用MYSQL Report分析数据库性能(上)
    最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
    590 161
    |
    7月前
    |
    存储 运维 关系型数据库
    从MySQL到云数据库,数据库迁移真的有必要吗?
    本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。

    推荐镜像

    更多