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 填充

  1. 左外连接(LEFT OUTER JOIN):保留左表所有记录,右表无匹配则填 NULL(最常用)

    SELECT * 
    FROM emp left outer JOIN dept on emp.deptno=dept.deptno
    
  2. 右外连接(RIGHT OUTER JOIN):保留右表所有记录,左表无匹配则填 NULL(可转化为左连接,少用)

    SELECT * 
    FROM emp right outer JOIN dept on emp.deptno=dept.deptno
    
  3. 全外连接(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 的过程想象成 “整理扑克牌”:

  1. 第一步:归类:数据库先扫描整张表,把字段值相同的行归为一组(比如把所有 value=10 的行放在一个盒子里,value=20 的放在另一个盒子里);

  2. 第二步:计数:在归类的同时,数据库会给每个盒子贴个 “标签”,记录这个盒子里有多少张牌(多少行数据);

  3. 第三步:输出结果:执行 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包的下载

image-20260126203235354(1)

image-20260126203918866(1)

image-20260126203747556(1)

posted on 2026-01-27 23:21  冬冬咚  阅读(7)  评论(0)    收藏  举报