java 多张表事务处理_Java中的多表&事务&DCL&一个多表操作例子

这篇博客详细介绍了Java中涉及多表的数据库操作,包括内连接、外连接、子查询以及事务处理。通过创建部门和员工表,展示了如何进行交叉连接、内连接和外连接查询。此外,还讲解了子查询的使用,如单行单列、多行单列和多行多列的子查询。在事务管理方面,解释了事务的四大特性、默认的自动提交行为以及如何设置事务隔离级别。最后,文章简单提到了DCL(数据控制语言),包括用户管理和权限管理。
摘要由CSDN通过智能技术生成

准备sql:

创建部门表

CREATE TABLE dept(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20)

);

INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');

# 创建员工表

CREATE TABLE emp (

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(10),

gender CHAR(1), -- 性别

salary DOUBLE, -- 工资

join_date DATE, -- 入职日期

dept_id INT,

FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键)

);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);

连接:

交叉连接:

交叉连接得出的结果就是所有表中数据的所有组合关系,表一x表二. 叫做笛卡尔积.

一般情况下, 一旦我们发现结果集中包含笛卡尔积的情况, 都是因为条件不够完整导致的.

-- 简化前

SELECT * FROM emp CROSS JION dept;

-- 简化后

SELECT * FROM emp,dept;

62ad74377ebc348997ef2430702d4e19.png

内连接查询(不写关键字,where条件AND条件):

有两个集合A,B .取这两个集合的所有组成情况。要完成多表查询,两个表的积会出现无用数据,我们要消除无用的数据所以我们应使用内连接和外连接。

隐式内连接:

使用where条件消除无用数据

-- 查询所有员工信息和对应的部门信息

SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;

bccd2beb07fb30b212e12a3929b4708d.png

-- 查询员工表的名称,性别。部门表的名称

SELECT

t1.name, -- 员工表的姓名

t1.gender,-- 员工表的性别

t2.name -- 部门表的名称

FROM

emp t1,

dept t2

WHERE

t1.`dept_id` = t2.`id`;

596e4b578f7a92f6997a81c271eccc62.png

显式内连接(写关键字inner join 表 on 条件):

语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件(写不写inner都行)

SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;

SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;

fa81c4ea0b538c09d31dd01d584ffc31.png

内连接查询:

先写From字句,明确从那些表查询

如果这些表中包含主外键关系,先把主外键关系的条件

如果还有其他额外的额外条件,添加

最后在补充select字句的内容。

外链接查询:

左外和右外可以互相转化,一般写左外。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值