MySql进阶+Maven(1.26)
一、连接
1.MySQL 笛卡尔积
笛卡尔积本质是两个或多个表进行无关联条件的连接查询,结果集的行数等于各表行数的乘积。
- 比如表 A 有 3 行,表 B 有 4 行,笛卡尔积结果就是
3×4=12行; - 笛卡尔积本身不是错误,但非预期的笛卡尔积会导致结果集异常庞大(甚至撑爆数据库),是开发中需要避免的。
-- 无WHERE条件关联,触发笛卡尔积
SELECT * FROM category, product;
2.相等连接/内连接:(都是14条数据)
//相等连接
select *
from emp ,dept
where emp.deptno=dept.deptno
//内连接
SELECT *
FROM emp
inner JOIN dept on emp.deptno=dept.deptno
3.外连接+左外连接+右外连接+全外连接:
外连接的核心规则:保留指定表的所有记录,未匹配的记录用 NULL 填充。
-
左外连接(LEFT OUTER JOIN):保留左表所有记录,右表无匹配则填 NULL(最常用)
SELECT * FROM emp left outer JOIN dept on emp.deptno=dept.deptno -
右外连接(RIGHT OUTER JOIN):保留右表所有记录,左表无匹配则填 NULL(可转化为左连接,少用)
SELECT * FROM emp right outer JOIN dept on emp.deptno=dept.deptno -
全外连接(FULL OUTER JOIN):MySQL 不原生支持,需用「左连接 + 右连接 + UNION」模拟,union-->去重,union all-->不去重
SELECT * //不支持,但可以模拟,先左外再右外
FROM dept full outer JOIN emp on emp.deptno=dept.deptno
SELECT *
from emp left outer JOIN dept on emp.deptno=dept.deptno
union
SELECT *
from emp right outer JOIN dept on emp.deptno=dept.deptno
二、分组查询:
1.group by:按照什么分组
2.having:分组条件
3.记住核心逻辑:先筛选(WHERE)→ 再分组(GROUP BY)→ 最后筛选分组结果(HAVING)。
4.用通俗的方式解释:数据库的 “分组统计过程”
你可以把数据库执行 GROUP BY 的过程想象成 “整理扑克牌”:
-
第一步:归类:数据库先扫描整张表,把字段值相同的行归为一组(比如把所有
value=10的行放在一个盒子里,value=20的放在另一个盒子里); -
第二步:计数:在归类的同时,数据库会给每个盒子贴个 “标签”,记录这个盒子里有多少张牌(多少行数据);
-
第三步:输出结果:执行
GROUP BY后,每个盒子只输出 “一条代表数据”,而COUNT(*)就是读取这个 “标签上的数字”,把组内数量展示出来。SELECT deptno,max(sal),avg(sal),sum(sal) from emp group by deptno having avg(sal) > 2000
三、有关日期函数:
seleCt now(),day(now()),year(now()),month(NOW()),hour(now()),minute(now()),second(now()),
DATE_FORMAT(now(),"%Y-%m-%d %H:%i:%s")
四、子查询:
--查询所有工资比 部门30 平均工资高的员工信息
--1.查询部门30部门的平均工资
--2.查询所有员工信息,条件 sal>avg(30 ssal)
select * from emp where sal>(select avg(sal) from emp where deptno=30)
子查询 vs 多表查询:SELECT 字段来源对比
| 场景 | SELECT 字段来源 |
本质 |
|---|---|---|
| 多表查询 | 直接来自多个物理表 | 多表字段的 “拼接组合” |
| 子查询 | 来自子查询生成的临时结果集 + 主表 | 先统计 / 筛选出临时数据,再和主表字段组合 |
子查询可以使用的位置,多表查询也能使用,select不一样,子查询的select是一个表的字段,多表的select是多个表的字段
--in any all
select * from emp where sal > any(select sal from emp where deptno=30)
select * from emp where job not in ('SALESMAN','MANAGER','CLERK')
五、Maven
1.Maven 是一款Java 项目的构建工具 + 依赖管理工具,可以把它理解成 Java 项目的 “管家”—— 帮你自动处理项目中繁琐的依赖下载、编译、打包、发布等工作,不用你手动一个个操作。
官方定义:Maven 是 Apache 基金会的开源项目,基于项目对象模型(POM)的概念,通过一个核心的 pom.xml 配置文件,管理项目的构建、报告和文档。
2.作用:
- 同一项目结构
- 维护项目的生命周期
- 维护jar包的依赖
3.标准化项目构建流程
Maven 定义了一套标准化的构建生命周期,你只需要执行简单的命令,就能完成从编译到打包的全流程:
| 常用命令 | 核心作用 |
|---|---|
| clean | 清理所有的.class文件 |
| compile | 编译,将所有的.java文件编译成.class文件 |
| test | 程序编译后,执行test里面的所有测试程序 |
| package | 项目测试后,打jar|war包 |
| install | 将打包后的包安装到本地 Maven 仓库,供本地项目依赖 |
| deploy | 将包发布到远程 Maven 仓库,需配置仓库地址和认证,供团队共享 |
简单总结:
- war 包 = 只有代码,需要找个 Tomcat “寄宿” 才能运行。
- Spring Boot jar 包 = 代码 + 自带 Tomcat,自己就能独立运行。
4.jar包的下载



浙公网安备 33010602011771号