【mysql复习】——单表查询知识复习

很喜欢一句话:这个世上只有一种真正的英雄主义,就是你认清了生活的真相,却仍然热爱它;

目录

条件查询(查询满足条件的数据)

注意点:

        在学习数学公式以及排序等关键字时,首先你要明白他们使用在语句的那个位置,格式要求等等;

数据排序(order by 字段)

关键字书写顺序

select ...

from ...

where ...

group by ... 

order by ...

执行顺序

from ...

where ...

group by ...

having ...

select ...

order by ...

常见函数

常见的单行处理函数

分组函数

注意点:

分组查询(可分组 )

重点结论:

在一条select语句中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数,其他的一律不行;

你也可以联合两个字段成一个字段看(两个字段联合分组)

注意点

having可以对分组之后的数据进行过滤,但它必须和group by 联合使用(但单独使用时效率低);

单表查询总结



条件查询(查询满足条件的数据)

常见的条件查询(查询语句后面添加where + 条件):

  1. =(等于)、<>或!=(不等于)、大于等于等等

  2. between .... and .... (处于两个值之间的)

    • 注意:必须遵循左小右大原则且闭区间

  3. is null、is not null

    • 数据库中的null不能使用等号来衡量,他的实际意义是没有值、什么都没有,因此不能有(=null)这种语法

       where  salary is null;
  4. and(并且),or(或者)

     where job = "MANAGER" and salary > 3000;where job = "MANAGER" or salary > 3000;
    • and和or同时出现,and优先级高,同时出现可以使用小括号;

     //找出工资大于2500并且编号是10或20的;where sal > 2500 and deptno = 10 or deptno =20;//这么写容易出现歧义where sal > 2500 and (deptno = 10 or deptno =20);
  5. in(包含,相当于当个or)、not in

     //找出工资大于2500并且编号是10或20的;where sal > 2500 and deptno in (10,20)

    注意:此处的in不是区间,而是集合;

  6. like (模糊查询),%或下划线匹配;

    注意:%匹配任意字符;下划线只能匹配一个字符;

     //名字中含有Awhere dname like '%A%';//第二个字母是Awhere dname like '_A%';//找出名字中带有下划线的where name like '%_%';//这样就会查出所有where name like '%\_%'//转义字符

注意点:

        在学习数学公式以及排序等关键字时,首先你要明白他们使用在语句的那个位置,格式要求等等;

数据排序(order by 字段)

常见排序方式:

  1. asc 升序

  2. desc降序

 order by salary asc, ename asc;//salary在前,起主导作用,只有salary相同时,才会使用ename升序排列;

关键字书写顺序

关键字使用的先后顺序是不能改变的;

select ...

from ...

where ...

group by ... 

order by ...

执行顺序

from ...

where ...

group by ...

having ...

select ...

order by ...

常见函数

常见的函数分为单行处理函数(处理几行输出几行),和多行处理函数(处理多行返回一行结果)

常见的单行处理函数

  1. lower() 转换小写

    select lower(uname) as ename from emp;
  2. upper() 转换大写

  3. substr()取子串,格式:substr(被截取的字符串,起始下标,截取长度)

    注意:起始下标从1开始

     where substr(ename,1,1) = 'A';
  4. length()取长度

  5. trim()去空格

  6. str_to_date() 将字符串转换成日期

  7. date_format()格式化日期

  8. round()四舍五入

  9. rand()生成随机数

  10. ifnull()可以将null转换成一个具体值


分组函数

分组函数又称多行处理函数

  1. count计数、sum求和、avg平均值、max最大值、min最小值

  2. 注意:分组函数必须先分组,然后才能使用,也就是说按照执行顺序,在group by后面才能使用分组函数

        错误演示:

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

    理论上这是没问题的,但实际运行中会报错 ;

     正确示例:

    select min(sal) from emp;
  3. 如果没有分组,那么就默认一张表就是一组

    select max(salary) from emp;

注意点:

  1. 在数据库中运算时遇见null其结果就是null,但是在分组函数中自动会排除null;

  2. null不是一个值,他表示什么也没有;

  3. count(某个字段)得到的结果是该数据表中的,该字段不为null的字段个数;

分组查询(可分组 )

实际需求中我们会遇到先需要对数据表进行分组,分完组之后在进行查询;

  案例演示:

 select ename,job ,sum(sal) from emp group by job;

上面这条语句只能在的MySQL在运行,本身无意义,但在Oracle中会报错,应为Oracle的语法要求相对mysql而言比较严格,

重点结论:

在一条select语句中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数,其他的一律不行;

你也可以联合两个字段成一个字段看(两个字段联合分组)

 select deptno,job,max(sal) from emp group by deptno,job;

注意点

  1. 加了group by 之后,select后面的字段就不能随意写了,你就只能写group by后面的字段和分组函数;

  2. 分组函数不能写在where后面,这个执行顺序有关,先分组后使用分组函数;

  3. 为什么在select后面可以使用分组函数呢,也和执行顺序有关,select执行在group by后面;

 //找出每个部门中薪资最高的,显示的最高薪资要大于3000select ename,job,max(sal) from emp where sal>3000  group by ename,job;

having可以对分组之后的数据进行过滤,但它必须和group by 联合使用(但单独使用时效率低);

效率低代码演示:

 select ename,job,max(sal) from emp   group by ename,job having sal>3000;

为解决上面效率低的问题,我们可以采用where和having联合使用,此时条件删选会优先考虑where,where完成不了才会考虑having;

优化后策略:

 select ename,job,max(sal) from emp where sal>3000  group by ename,job having sal>30;
//这个having加的没有意义,我只想在此处强调where和having可以联合使用以及优先级;

这样的优化看似愚蠢,但实际上一些实际运用中还真有where解决不了的需要having解决的例如:找出每个部门平均薪资,要求显示的平均薪资高于2500的,针对这个需求,就要having解决了

单表查询总结

  1. 可以先从表中查数据,先通过where筛选,然后对筛选后的结果通过having进行过滤;

  2. 对于分组函数,他的语法位置是在select后面;

  3. 在使用group by进行分组查询之后,要格外注意select后面的字段;

  4. 关键字执行顺序,from -- where -- group by -- having -- select -- order by;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 向系统日历添加日程提醒事件

Android 向系统日历添加日程提醒事件 1.权限申请 <uses-permission android:name"android.permission.READ_CALENDAR" /> <uses-permission android:name"android.permission.WRITE_CALENDAR" /> 注意&#xff1a;6.0 以上需要申请权限才可…

企业既要用u盘又要防止u盘泄密怎么办?

企业在日常生产生活过程中&#xff0c;使用u盘交换数据是最企业最常用也是最便携的方式&#xff0c;但是在使用u盘的同时&#xff0c;也给企业的数据保密工作带来了很大的挑战&#xff0c;往往很多情况下企业的是通过u盘进行数据泄漏的。很多企业采用一刀切的方式&#xff0c;直…

【Kubernetes】

目录 一、Kubernetes 概述1、K8S 是什么&#xff1f;2、为什么要用 K8S?3、Kubernetes 集群架构与组件 二、核心组件1、Master 组件2、Node 组件3、K8S创建Pod的工作流程&#xff1f;&#xff08;重点&#xff09;4、K8S资源对象&#xff08;重点&#xff09;5、Kubernetes 核…

iOS数字转为图片

根据数字&#xff0c;转成对应的图片 - (void)viewDidLoad {[super viewDidLoad];[self testNum2String:10086]; }/// 根据数字&#xff0c;显示对应的图片 数字用特定的图片显示 - (void)testNum2String:(NSInteger)num {UIView *numContentView [[UIView alloc] initWithFr…

flask------请求拓展

flask中也有类似与django中的中间件&#xff0c;只不过是另一种写法&#xff0c;但是他们的作用是一样的&#xff0c;下面我们就一一介绍&#xff1a; 1.before_request 作用 : before_request 相当于 django 中的 process_request&#xff0c;每一个请求在被处理前都会经…

JAVA环境变量配置(windows)

windows配置环境变量&#xff08;大小写不区分&#xff09;&#xff1a; 新建JAVA_HOME&#xff1a;jdk的根目录 D:\Java\jdk1.8.0_71Path&#xff08;必须&#xff09;%JAVA_HOME%\bin新建&#xff08;类路径&#xff09;CLASSPATH: .;D:\Java\jdk1.8.0_71\lib(或者.;%JAVA_HO…

【外卖系统】套餐管理

新增套餐 需求分析 后台可以管理套餐信息&#xff0c;通过新增套餐功能来添加一个新的套餐&#xff0c;在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品&#xff0c;并需要上传套餐对应的图片。 页面发送ajax请求&#xff0c;请求服务端获取套餐分类数据并展示到下…

最细致讲解yolov8模型推理完整代码--(前处理,后处理)

研究yolov8时&#xff0c;一直苦寻不到Yolov8完整的模型推理代码演示&#xff0c;大部分人都是基于Yolo已经封装好的函数调用&#xff0c;这个网上教程很多&#xff0c;本文就不赘述这方面的内容了&#xff0c;接下来将细致全面的讲解yolov8模型推理代码&#xff0c;也就是yolo…

卡片的点击事件通过点击进行路由传参

下面是详情页 通过 接收 <template><div class"detail"><img :src"row.imgUrl"><van-icon name"arrow-left" click"back" /></div> </template><script> export default {created() {let …

Webpack 安装教程

Webpack 是一个前端资源加载/打包工具。 安装 Webpack 使用 cnpm 安装 webpack&#xff1a; cnpm install webpack -g 创建项目 接下来我们创建一个目录 app&#xff1a; mkdir app 在 app 目录下添加 runoob1.js 文件&#xff0c;代码如下&#xff1a; app/runoob1.js 文件…

LeetCode每日一题Day4——26. 删除有序数组中的重复项

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

【分布式任务调度平台 XXL-JOB 急速入门】从零开始将 XXL-JOB 接入到自己的项目

&#x1f4a7; 分布式任务调度平台 X X L − J O B 急速入门&#xff1a;从零开始将 X X L − J O B 接入到自己的项目 \color{#FF1493}{分布式任务调度平台 XXL-JOB 急速入门&#xff1a;从零开始将 XXL-JOB 接入到自己的项目} 分布式任务调度平台XXL−JOB急速入门&#xff1a…

增强知识保护和知识管理:PDM系统的知识库特色

在现代竞争激烈的商业环境中&#xff0c;知识保护和知识管理对企业的发展至关重要。PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;作为一款强大的数字化工具&#xff0c;具备丰富的知识库特色&#xff0c;帮助企业增强知识保护和知识管理的…

《TCP IP 网络编程》第十五章

第 15 章 套接字和标准I/O 15.1 标准 I/O 的优点 标准 I/O 函数的两个优点&#xff1a; 除了使用 read 和 write 函数收发数据外&#xff0c;还能使用标准 I/O 函数收发数据。下面是标准 I/O 函数的两个优点&#xff1a; 标准 I/O 函数具有良好的移植性标准 I/O 函数可以利用…

FPGA学习——蜂鸣器实现音乐播放器并播放两只老虎

文章目录 一、蜂鸣器简介1.1 蜂鸣器分类1.2 PWM 二、C4开发板原理图三、如何产生不同的音调四、代码实现及分析五、总结 一、蜂鸣器简介 1.1 蜂鸣器分类 蜂鸣器一般分为有源蜂鸣器和无源蜂鸣器。二者的区别在于&#xff0c;有源蜂鸣器内部含有振动源和功放电路&#xff0c;只…

前端如何打开钉钉(如何唤起注册表中路径与软件路径不关联的软件)

在前端唤起本地应用时&#xff0c;我查询了资料&#xff0c;在注册表中找到腾讯视频会议的注册表情况&#xff0c;如下&#xff1a; 在前端代码中加入 window.location.href"wemeet:"; 就可以直接唤起腾讯视频会议&#xff0c;但是我无法唤起钉钉 之所以会这样&…

【Android】使用 CameraX 实现基础拍照功能

目录 1. 基础开发环境 2. 添加相关依赖 3. APP 布局 4. 主流程逻辑 5. 调试或安装 APK 6. 项目完整代码 1. 基础开发环境 JDK&#xff1a;JDK17 Android Studio&#xff1a;Android Studio Giraffe | 2022.3.1 Android SDK&#xff1a;Android API 34 Gradle: gradle-7.2…

前端如何并发控制

本文节选自我的博客&#xff1a;前端如何并发控制 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖的猫&#x1f4d…

2023年人工智能技术与智慧城市发展白皮书

人工智能与智慧城市是当前热门的话题和概念&#xff0c;通过将人工智能技术应用在城市管理和服务中&#xff0c;利用自动化、智能化和数据化的方式提高城市运行效率和人民生活质量&#xff0c;最终实现城市发展的智慧化&#xff0c;提升城市居民的幸福感。 AI技术在城市中的应…

QT中使用ffmpeg的api进行视频的播放

在了解ffmpeg使用api进行视频的播放之前&#xff0c;我们首先了解一下视频的播放流程。 一、视频的播放流程 首先是我们最常见的视频文件&#xff0c;在播放流程中首先是要打开视频文件&#xff0c;将视频文件中的数据进行解封装&#xff0c;之后再将解封装之后的视频进行解码…