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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 数据库-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只能出现在所有字段的最前方,多个字段则表示后面所有字段看做合并字段进行去重。


    相关实践学习
    如何在云端创建MySQL数据库
    开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    相关文章
    |
    8天前
    |
    SQL 关系型数据库 MySQL
    go语言数据库中mysql驱动安装
    【11月更文挑战第2天】
    22 4
    |
    6天前
    |
    SQL 关系型数据库 MySQL
    12 PHP配置数据库MySQL
    路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
    19 1
    |
    15天前
    |
    监控 关系型数据库 MySQL
    数据库优化:MySQL索引策略与查询性能调优实战
    【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
    77 1
    |
    17天前
    |
    关系型数据库 MySQL Linux
    在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
    本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
    59 2
    |
    20天前
    |
    存储 关系型数据库 MySQL
    MySQL vs. PostgreSQL:选择适合你的开源数据库
    在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
    80 4
    |
    3天前
    |
    运维 关系型数据库 MySQL
    安装MySQL8数据库
    本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
    27 0
    |
    16天前
    |
    监控 关系型数据库 MySQL
    数据库优化:MySQL索引策略与查询性能调优实战
    【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
    47 0
    |
    1月前
    |
    存储 SQL 关系型数据库
    Mysql学习笔记(二):数据库命令行代码总结
    这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
    124 6
    |
    1月前
    |
    存储 关系型数据库 MySQL
    Mysql(4)—数据库索引
    数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
    61 3
    Mysql(4)—数据库索引
    |
    1月前
    |
    SQL Ubuntu 关系型数据库
    Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
    本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
    69 3
    Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用