多表查询
设A表与B表 笛卡尔积:取A,B集合的所有情况
连接查询:
内连接
相当于查询A,B集合交集的数据
– 隐式内连接
select 字段列表 from 表A,表B.....where 条件
例如:select A.name , B.name from A ,B where A.id=B.dep_id;
-- 给表起别名:select A.name , B.name from A a ,B b where a.id=b.dep_id;
– 显示内连接
select 字段列表 from 表A [INNER] JOIN 表B ON 条件;
例如:select A.name,B.name from A inner join B on A.id=B.dep_id; #inner 可以省略
外连接:
左外连接:查询A表所有数据和交集部分数据
select 字段列表 from 表A left [outer] join 表B on 条件;
右外连接:相当于查询B表所有数据和交际部分数据
select 字段列表 from 表A right [outer] join 表B on 条件;
子查询
查询中嵌套查询,称嵌套查询为子查询
例如查询工资高于大牛工资的人员信息:
select * from emp where salary >(select salary from emp where name="大牛");
子查询根据查询结果不同,作用不同:
单行单列:作为条件值,使用= != > <等进行条件判断
select 字段列表 from 表名 where 字段名=(子查询);
多行单列:作为条件值,使用in等关键字进行条件判断
select 字段列表 from 表名 where 字段名 in(子查询);
多行多列:作为虚表
select 字段列表 from (子查询) where 条件;
事务
1.数据库的事务是一种机制、一个操作序列,包含了一组数据库操作命令
2.事务吧所有的命令作为一个整体向系统提交或者撤销请求,这一组数据库命令要么成功要么失败
3.事务是一个不可分割的工作逻辑单元
开启事务(临时修改,只作用当前用户)
start transaction;或者 begin;
提交事务(永久修改,针对所有用户)
commit;
--------出异常 回滚事务
rollback;
例如:
#开启事务
begin;
#李四向张三转账500
update account set money =money-500 where name='李四';
update account set money =money+500 where name='张三';
#提交事务
commit;
#回滚事务
rollback;
mysql事务是默认自动提交的;
oracle事务默认手动提交;
事务特性:
原子性:事务不可分割,要么都成功,要么都失败;
一致性:事务完成时,必须所有数据都保持一致;
隔离性:多个事务之间,操作的可见性;
持久性:事务一旦提交或者回滚,他对数据库的改变是永久的;