javaweb 之 mysql 多表查询 内连接 外连接 子查询 事务 事务的四大特征(常见面试题)

多表查询

笛卡尔积:取 A,B集合所有组合情况

 

内连接查询:

内连接查询语法:

隐式内连接:查询学生和对应学习的信息

如果想要只显示想要的字段:查询student表的name age ,School表的name  :

select student.name,school.name,student.age from student,school where student.schid=school.id;

也可以给表起别名:

select t1.name,t2.name,t1.age from student t1,school t2 where t1.schid=t2.id;

显式内连接

select * from student inner join school on student.schid=school.id;

显示内连接的inner 可以省略不写  如果有多个表跟条件,就多join几次

外连接查询

外连接查询语法:

 outer可以省略

左外连接

查询学生表所有数据和对应的学校信息

select  * from student left join dept on student.schid=school.id;

右外连接

查询学校表所有数据和对应的学生信息

select  * from student right join dept on student.schid=school.id;

左外连接:相当于查询左表所有数据和交集部分数据 

右外连接:相当于查询右表所有数据和交集部分数据

子查询

 单行单列:

查询年龄大于小明的学生信息 ,我们需要先查询小明的年龄 再查询符合条件的学生:

select * from student where age>(select age from student where name ='小明');

多行单列:

查询体育部和文艺部所有的学生信息

先查询到部门对应id 然后根据部门id查询信息

select * from student where dep_id in (select did from dept where dname = '体育部' or dname='文艺部 );

多行多列:

查询入学日期为‘2022-11-11’之后的学生信息及学校信息

首先查询满足日期的学生 然后跟学校信息做个内连接查询

select * from (select * from student where join_date>‘2022-11-11’) t1,school where t1.schid=school.id;

练习:查询出部门编号,部门名称,部门人数

先查询学生表按部门分组并统计各个组的人数 得到部门id 跟对应的人数,然后跟部门表进行一个内连接

select dept.id,dept.dname,t1.count from dept,(select dept id,count(*)from student group by dept_id ) t1 where dept.id=t1.dept_id;

事务

事务简介:

数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败

事务是一个不可分割的工作逻辑单元

 

 事务的四大特征

原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态

隔离性(Isolation) :多个事务之间,操作的可见性

持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

 在写语句执行的时候默认是自动提交的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值