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…...
服务器安全防护导致使用多款行业顶尖软件搭配使用,还是单独一款解决呢?
如今,在全球各地,数以千计的公司、组织和个人都依赖于服务器来存储和访问重要数据,托管应用程序,以及提供服务。但是,这些服务器不断面临着来自网络黑客的威胁,因此服务器的安全成为了当务之急。 在这种情…...
Windows安卓应用安装终极指南:APK-Installer完整使用教程
Windows安卓应用安装终极指南:APK-Installer完整使用教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上轻松安装安卓应用吗?…...
别再只当开关用了!手把手教你用p-GaN HEMT在GaN芯片上实现高性能电容
解锁p-GaN HEMT的隐藏技能:片上高性能电容设计实战指南 在GaN功率集成电路设计中,工程师们常常面临一个棘手的问题:如何在有限的芯片面积内集成更多功能模块?传统解决方案是增加MIM(金属-绝缘体-金属)电容&…...
告别‘yum install’卡顿:保姆级教程优化Rocky 9的yum源配置,提速软件安装
告别‘yum install’卡顿:保姆级教程优化Rocky 9的yum源配置,提速软件安装 如果你正在使用Rocky Linux 9,可能已经体验过yum install命令那令人抓狂的等待时间。默认的网络源在高峰时段慢如蜗牛,安装一个简单的vim编辑器都可能让你…...
为什么你的ComfyUI-Impact-Pack节点总失效?3个架构洞察与5个配置关键点
为什么你的ComfyUI-Impact-Pack节点总失效?3个架构洞察与5个配置关键点 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项…...
GetQzonehistory:5步永久备份你的QQ空间青春回忆,告别数据丢失焦虑
GetQzonehistory:5步永久备份你的QQ空间青春回忆,告别数据丢失焦虑 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否也曾担心,那些记录着青春岁…...
硬件设计避坑:PMOS缓启动电路关断慢?实测教你优化栅极泄放回路(含仿真文件)
PMOS缓启动电路优化实战:栅极泄放回路设计与关断性能提升 引言 在电源管理系统中,PMOS管因其低导通电阻和简单驱动特性,常被用作电源开关。但当负载端存在较大容性负载时,直接开关可能导致瞬间大电流冲击,因此缓启动电…...
告别Web界面:用JFrog CLI命令行高效管理Artifactory仓库的5个实战场景
告别Web界面:用JFrog CLI命令行高效管理Artifactory仓库的5个实战场景 在DevOps的日常工作中,Artifactory作为二进制制品管理的核心枢纽,其Web界面虽然直观,但在批量操作和自动化场景下往往效率低下。上周处理一个紧急发布时&…...
VSCode Voltage插件:专为Laravel Blade模板打造的一流开发体验
1. 项目概述:为什么我们需要一个专为Blade而生的VSCode插件?如果你和我一样,常年与Laravel项目打交道,那么对Blade模板引擎一定是又爱又恨。爱它的简洁、强大,以及与PHP逻辑的无缝融合;恨它在代码编辑器里那…...
容器镜像同步工具comsu:轻量化私有仓库管理与DevOps实践
1. 项目概述:从“comsu”看容器镜像的轻量化实践最近在折腾容器化部署的时候,发现一个挺有意思的现象:很多开发者,包括我自己在内,都习惯性地去 Docker Hub 拉取那些“官方”或“热门”的镜像。比如跑个 Nginx…...
一键恢复IE 浏览器,电脑很多功能都离不开它
不少人日常习惯用主流浏览器,就觉得老旧的 IE 浏览器可有可无,其实大错特错。IE 作为 Windows 系统自带的原生浏览器,是系统底层核心组件之一,不只是单纯用来上网浏览网页。 很多政务办公系统、老旧业务后台、企业内网平台、网银…...
