多表查询
指的是从多张表中查询数据
查询单表数据,执行的SQL形式为:select * from emp;
执行多表查询,只要使用逗号分隔多张表即可,如:select * from emp , dept
笛卡尔积:指的是乘积是指在数学中,两个集合A集合和B集合的所有组合情况。
可以给多表查询加上连接查询的查询即可去除无效的笛卡尔积
分类
连接查询
内连接:相当于查询A、B交集部分数据
语法
隐式内连接
显式内连接
注意事项:左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接。
外连接:
左外连接:查询左表中所有数据,以及两张表交集部分数据
右外连接:查询右表中所有数据,以及两张表交集部分数据
自连接:当前标语自身的连接查询,自连接必须使用表别名
子查询
介绍
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
根据查询结果分
A. 标量子查询(子查询结果为单个值)
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
常用的操作符:= <> > >= < <=
B. 列子查询(子查询结果为一列)
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符:IN 、NOT IN
操作符 描述
IN 在指定的集合范围之内,多选一
NOT IN 不在指定的集合范围之内
C. 行子查询(子查询结果为一行)
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、IN 、NOT IN
D. 表子查询(子查询结果为多行多列)
子查询返回的结果是多行多列,常作为临时表,这种子查询称为表子查询。
常用的操作符:IN
根据子查询位置分
A. WHERE之后
B. FROM之后
C. SELECT之后
事务
问题:如果删除部门成功了,而删除该部门的员工时,失败了,此时就造成了数据的不一致。
要解决上述的问题,就需要通过数据库中的 事务 来解决。
事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
1). 开启事务:START TRANSACTION 或 BEGIN ;
2). 提交事务:COMMIT;
3). 回滚事务:ROLLBACK;
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。