1.多表查询
多表查询就是指从多张表中查询数据,我们要是执行多张表,那么我们只需要用逗号分隔多张表即可select * from 表A,表B
通过上述操作我们获得大量结果集,这种现象称之为笛卡尔积(笛卡尔积是指在数学中集合A和集合B所有组合的情况)
去除无效的笛卡尔积:给多表查询加上连接查询的条件:
select * from emp , dept where emp.dept_id = dept.id;
多表查询分类
1.内连接:相当于A,B交集部分数据
2.外连接:
(1)左外连接:查询左表所有数据,以及两张表的交集部分数据
(2)右外连接:查询右表所有数据,以及两张表的交集部分数据
3.自连接:当前表与自身的连接查询,自连接必须使用表别名
内连接:内连接分为两种隐式内连接,显式内连接。
1.隐式内连接:select 字段列表 from 表1 , 表2 where 条件 ... ;
2.显式内连接:select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;
外连接:左外连接和内外连接
1.左外连接:相当于查询左表所有数据,同时也包含两个表的交集
select 字段列表 from 表1 left [ outer ] join 表2 on 条件 ... ;
2.右外连接:相当于查询右表所有数据,同时也包含俩个表的交集
select 字段列表 from 表1 right [ outer ] join 表2 on 条件 ... ;
子查询:
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询
SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );
分类:根据子查询结果不同,分为:
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)
根据子查询位置,分为:
where之后,from之后,select之后
1.标量子查询:子查询返回的结果是单个值(常用操作符= < > > >= < <=)
2.列子查询:子查询返回结果是一列( in not in)
3.行子查询:子查询返回结果是一行(= <> in not in)
4.表子查询:子查询返回结果是一个表 (IN)
事务
事务是一组操作的集合
三个操作:
开启事务 start transaction /begin
提交事务commit
回滚事务rollback
四大特性:(ACID)
原子性:事务是不可分割的最小操作单元,要么同时成功,要么同时失败
一致性:事务完成时,必须使用所有数据都保持一致
隔离性:数据库系统提供隔离机制,保证事务不受外部并发操作影响的独立环境下运行
持久性:事务一旦提交或者回滚,他对数据库中的数据的改变就是永久的