java 数据库 查询 select 2
Day2
组函数
-
以组为操作单位,一组数据得到一个结果。
-
在没有手动分组的前提下,整张表默认为一组数据
-
max(列名):获取最大值
-
min(列名):获取最小值
-
sum(列名):获取总和
-
avg(列名):获取平均值
-
count(列名):统计值的个数
-
所有组函数都会自动忽略null值
-- 查看员工的最高薪资 select max(salary) from employees -- 查看员工的最低薪资、平均薪资、月薪资总和 select min(salary),avg(salary),sum(salary) from employees -- 统计总共有多少名员工 select count(*) from employees select count(employee_id) from employees -- 统计员工表中部门的个数 -- 先对整张表的部门id进行去重,再count统计结果 select count(distinct department_id) from employees
分组
-
在某些情况下,我们需要根据需要对表中数据进行手动分组
-
规则:值相同的为同一组数据
select 列名 from 表名 group by 列名
执行顺序:from-->group by-->select
先确定从哪张表进行操作-->对表中数据进行分组-->基于分组结果进行查询操作
-- 查询各个部门的平均薪资 select department_id,avg(salary) from employees group by department_id
where+group by
-
先where,再group by
先筛选出符合要求的数据,再对符合要求的数据进行分组时,分组的工作量会被减少,效率更高
where 条件 group by 列名
-- 查询部门id为10,20,30的部门的平均薪资 select department_id,avg(salary) from employees where department_id in(10,20,30) group by department_id
-
执行顺序:from-->where-->group by-->select
having子句
-
和where类似,也是用来做数据筛选,在分组之后执行
group by 列名 having 条件
-- 查询部门平均薪资>=7000的部门id select department_id,avg(salary) from employees group by department_id -- 先分组 having avg(salary)>=7000 -- 后筛选
和where子句的区别
-
where在分组前执行,having在分组后执行
-
where子句存在分组时不能使用组函数,但是having可以
-
当既可以使用where,又能使用having时,优先使用where,效率更高
limit关键字
-
作用:限制查询结果显示的条目数,通常用于分页
select 列名.. from 表名 limit 显示的起始下标,显示的条数
-
使用:
-
该关键字是基于查询的最终结果进行限制显示,所以其与其他查询关键字使用时,必须最后执行,所以一定写在最后
-
下标为0时,可以省略不写
-
-- 查询工资最高的前十名员工信息 select employee_id,salary from employees order by salary desc -- 先根据工资进行降序排序 limit 0,10 -- 显示前十行 -- 查看前十条员工信息 select * from employees limit 10 -- 查询部门平均薪资最高的前3个部门id -- 分析:-- 部门平均薪资:根据部门id分组 group by -- 最高:根据平均薪资进行降序排序 order by avg(salary)-- 前三个:limit从最终查询结果中提取出前三条 select department_id,avg(salary) from employees group by department_id -- 根据部门id分组 order by avg(salary) desc -- 根据平均薪资进行降序排序 limit 3 -- 从最终查询结果中提取出前三条
查询关键字的顺序
-
select 、 from 、where 、 order by 、 group by 、 having 、 limit
语法顺序: select 、 from 、where、 group by、having 、order by 、limit
子查询
-
当一个SQL的执行需要借助另一个SQL的执行结果时,则需要进行SQL嵌套,该语法结构称之为子查询
select 列名... from 表名 where 列名 =|in (子SQL语句)
-
执行顺序:优先执行小括号内的子SQL,根据子SQL的执行结果再执行外层SQL
-
只要逻辑完整,对SQL的嵌套层数不做要求
-
执行:从内向外执行
-
where单值子查询
-
子SQL(被嵌套的SQL)返回的时一行一列的单个结果
-- 查询员工id为101号员工的领导信息 -- 先查询员工id为101号员工的直接领导的id select manager_id from employees where employee_id=101 -- 拼装 select * from employees where employee_id=(select manager_id from employees where employee_id=101 ) -- 查询员工id为100的员工所在的部门信息 -- 查询员工id为100的员工所在的部门id select department_id from employees where employee_id=100 -- 拼装 select * from departments where department_id =(select department_id from employees where employee_id=100)
where多值子查询
-
子SQL返回的是多个结果
-- 查询工资>10000的员工所在的部门信息 select * from departments where department_id in(select department_id from employees where salary>10000)
from子查询(了解)
-
将子SQL的查询结果临时看作一张表进行后续操作
-
为了符合语法要求,需要给子查询的结果起别名充当临时表的表名
-- 查询工资最高的前十名员工的总薪资 -- 分析:1. 把工资最高的前十名员工的薪资查出来-- 2. 对这十个工资进行求和 -- 查询SQL的基本语法:select 列名 from 表名 select sum(salary) from (select salary from employees order by salary desc limit 10) as e -- 子SQL:把工资最高的前十名员工的薪资查出来 select salary from employees order by salary desc limit 10
表连接
关系字段:两表中有关联关系的字段
-
什么是表连接?
-
当我们的查询结果需要从多张表中获取时,此时应该让表之间建立连接,同时获取数据
-
内连接
-
特点:同时对连接双方做约束,双方只有符合连接条件的数据才会进行显示
select 表名.列名, 表名.列名,... from 表名1 inner join 表名2 on 连接条件 -- 两表间的关系字段
-- 查询员工的id、工资与部门名称-- 第一步:确定数据来自于哪些表-- 第二步:确定两表之间的关系字段-- 书写表连接完成查询操作 select e.employee_id 员工id,e.salary 员工工资,d.department_name -- 基于连接结果进行查询操作 from employees e inner join departments d -- 起别名,方便后续书写 on e.department_id=d.department_id -- 关系字段:员工表的部门id=部门表的部门id
from-->join on:确定数据来源
select:查询操作
左外连接
-
特点:左表中的数据无论如何都会显示,右表中的数据只有符合连接条件才会显示
select 表名.列名, 表名.列名,... from 左表 left outer join 右表 on 连接条件 -- 两表间的关系字段
-- 使用左外连接显示员工信息及其部门信息 select e.*,d.* from employees e left outer join departments d -- 员工信息无论如何都会显示,部门信息符合连接条件才会显示 on e.department_id=d.department_id
右外连接
-
特点:右表中的数据无论如何都会显示,左表中的数据只有符合连接条件才会显示
select 表名.列名, 表名.列名,... from 左表 right outer join 右表 on 连接条件 -- 两表间的关系字段
-- 使用右外连接显示部门信息及对应员工信息 select e.*,d.* from employees e right outer join departments d on e.department_id=d.department_id
连接关键字中的inner、outer可以省略
全外连接(了解)
-
特点:对双方都不做约束
-
作用:将两个查询结果进行合并
查询结果1 union 查询结果2
-
使用:
-
合并双方字段数目、内容必须一致
-
union关键字可以去重
-
union all 不会对结果去重
-
-- 查询员工表所有信息 select employee_id,first_name,salary from employees union all -- 合并,不去重 -- 查询员工表所有信息 select employee_id,first_name,salary from employees
自连接
-
特点:是特殊的表连接,参与连接的是同一张表
-
使用:
-
表中的两个字段为关系字段,作为连接条件
-- 按照指定要求查询员工信息:员工id,员工姓名,直接领导的id,直接领导的姓名 select e1.employee_id 员工id,e1.first_name 员工姓名,e1.manager_id 领导id,e2.first_name 领导姓名 from employees e1 left join employees e2 -- e1:员工信息 e2:领导信息 on e1.manager_id=e2.employee_id -- 连接条件:员工的领导id=领导的员工id
-
连接双方判断同一字段,作为连接条件
-- 查询工资相同的员工id及其工资 select e1.employee_id,e1.salary,e2.employee_id,e2.salary from employees e1 left join employees e2 -- 连接参与比较的两个员工 on e1.salary=e2.salary -- 两个员工的工资相同 where e1.employee_id>e2.employee_id
-
如果查询字段来自于多张表,内连接或左外连接
如果查询字段来自于一张表并且来自同一行数据,则简单查询|子查询
如果查询字段来自于一张表但是不来自于同一行数据。则自连接
多表连接
-
特点:同时从多张表中获取数据
select 表名.列名, 表名.列名,... from 表1 left join 表2 on 连接条件 -- 表1和表2的关系字段 left join 表3 on 连接条件 -- 表1和表3的关系字段|表2和表3的关系字段
-- 查询员工id,员工姓名,所属部门id,部门名称,部门所在城市 select e.employee_id,e.first_name,d.department_id,d.department_name,l.city from employees e left join departments d -- 先让员工表和部门表建立连接 on e.department_id=d.department_id -- 员工的部门id=部门的id left join locations l -- 再让地址表参与连接 on d.location_id=l.location_id -- 部门表的地址id=地址表的id
实际开发中,不建议表连接超过3张表,否则会有性能问题
相关文章:
java 数据库 查询 select 2
Day2 组函数 以组为操作单位,一组数据得到一个结果。 在没有手动分组的前提下,整张表默认为一组数据 max(列名):获取最大值 min(列名):获取最小值 sum(列名):获取总和 avg(列名):获取平均值 count(列…...
【前端学java】复习巩固-Java中的对象比较(14)
往期回顾: 【前端学java】JAVA开发的依赖安装与环境配置 (0)【前端学 java】java的基础语法(1)【前端学java】JAVA中的packge与import(2)【前端学java】面向对象编程基础-类的使用 (…...
Sentinel 系统规则 (SystemRule)
Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…...
Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
Linux 软件包管理器 yum 什么是软件包: 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通…...
剧情继续:马斯克曝出OpenAI前员工举报信,董事会与奥特曼谈判回归
丰色 发自 凹非寺 量子位 | 公众号QbitAI 经过4天的极限拉扯、反转再反转,奥特曼有可能重新回归了。 据知情人士透露,OpenAI董事会正与奥特曼进行一场“富有成效”的新谈判。 如果奥特曼回到OpenAI,他将继续担任CEO。 与此同时,…...
mysql解压版安装步骤linux
1. MySQL下载就不说了,以5.7版本举例 2. 解压安装包 tar -zxvf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz 3. 重命名目录 mv mysql-5.7.41-linux-glibc2.12-x86_64 /usr/local/mysql 4. 创建mysql用户组和用户 groupadd mysql useradd -r -g mysql mysql …...
Program Header Table(转载)
程序头表与段表相互独立,由ELF文件头统一管理。 程序头表负责ELF文件从文件到加载后映像的映射关系,一般只有可执行文件包含。 1. segment和section segment: 程序头表项描述的对象称为segment,即elf文件加载后的数据块; 它提供…...
汽车智能座舱/智能驾驶SOC -2
第二篇(笔记)。 未来智能汽车电子电气将会是集中式架构(车载数据中心)虚拟化技术(提供车载数据中心灵活性和安全性)这个几乎是毋庸置疑的了。国际大厂也否纷纷布局超算芯片和车载数据中心平台。但是演进需…...
Vite Vue3+Element Plus框架布局
App根组件:框架布局 <template><el-container class"layout-container-demo" style"height: 98vh"><!-- 菜单栏 --><el-aside width"200px"><el-scrollbar><!-- router:是否启用 vue-router 模式。…...
【原创】为MybatisPlus增加一个逻辑删除插件,让XML中的SQL也能自动增加逻辑删除功能
前言 看到这个标题有人就要说了,D哥啊,MybatisPlus不是本来就有逻辑删除的配置吗,比如TableLogic注解,配置文件里也能添加如下配置设置逻辑删除。 mybatis-plus:mapper-locations: classpath*:mapper/*.xmlconfiguration:mapUnd…...
ABAP 长文本操作
关联表 1.STXH:长文本抬头表 2.STXL:长文本行表 3.TTXID:Text ID 表 4.TTXOB:Textobject表 5.订单中众多的文本描述,我们怎么知道其对应的【对象】&【ID】呢? 可SE38-通过查找程式:RST…...
C++:哈希表的模拟实现
文章目录 哈希哈希冲突哈希函数 解决哈希冲突闭散列:开散列 哈希 在顺序结构和平衡树中,元素的Key和存储位置之间没有必然的联系,在进行查找的时候,要不断的进行比较,时间复杂度是O(N)或O(logN) 而有没有这样一种方案…...
echarts实现如下图功能代码
这里写自定义目录标题 const option {tooltip: {trigger: axis},legend: {left: "-1px",top:15px,type: "scroll",icon:rect,data: [{name:1, textStyle:{color: theme?"#E5EAF3":#303133,fontSize:14}}, {name: 2, textStyle:{color: theme…...
Java 开源重试类 guava-retrying 使用案例
使用背景 需要重复尝试执行某些动作,guava-retrying 提供了成型的重试框架 依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>${retrying.version}</version>…...
服务器 jupyter 文件名乱码问题
对于本台电脑,autodl服务器,上传中文文件时,从压缩包名到压缩包里的文件名先后会出现中文乱码的问题。 Xftp 首先是通过Xftp传输压缩包到Autodl服务器: 1、打开Xftp,进入软件主界面,点击右上角【文件】菜…...
Ubuntu设设置默认外放和麦克风设备
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pulseaudio 是什么?二、配置外放1.查看所有的外放设备2.设定默认的外放设备3.设定外放设备的声音强度4.设定外放设备静音 三、配置麦克风1.查看…...
【教程】Sqlite迁移到mysql(django)
1、先将sqlite db文件导出sql sqlite3 db.sqlite3 .dump>output.sql db.sqlite3 是 sqlite 数据库文件 output.sql是导出sql文件的名称 2、sql文件转换、处理 sed s/AUTOINCREMENT/AUTO_INCREMENT/g output.sql | sed s/datetime/timestamp/g | sed s/INTEGER/int/g &g…...
【漏洞复现】DPTech VPN存在任意文件读取漏洞
漏洞描述 DPtech是在网络、安全及应用交付领域集研发、生产、销售于一体的高科技企业。DPtech VPN智能安全网关是迪普科技面向广域互联应用场景推出的专业安全网关产品,集成了IPSec、SSL、L2TP、GRE等多种VPN技术,支持国密算法,实现分支机构…...
CentOS 8搭建WordPress
步骤 1: 更新系统 确保你的系统是最新的,使用以下命令更新: bashCopy code sudo dnf update 步骤 2: 安装Apache bashCopy code sudo dnf install httpd 启动Apache,并设置开机自启动: bashCopy code sudo systemctl star…...
服务器安全防护导致使用多款行业顶尖软件搭配使用,还是单独一款解决呢?
如今,在全球各地,数以千计的公司、组织和个人都依赖于服务器来存储和访问重要数据,托管应用程序,以及提供服务。但是,这些服务器不断面临着来自网络黑客的威胁,因此服务器的安全成为了当务之急。 在这种情…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
