多表查询包括:内连接和外连接。
笛卡尔积: 两表数据相乘
一丶表连接查询
1.内连接:⽤左边表的记录去匹配右边表的记录,如果符合条件的则显示。
- 隐式内连接:看不到 join关键字,条件使⽤ where 指定
select 字段名 from 左表, 右表 where 条件;
- 显示内连接
select 字段名 from 左表 [inner] join 右表 on 条件;
- 内连接查询步骤
1.确定查询哪些表 2.确定表连接的条件 3.确定查询的条件 4.确定查询的字段
2.外连接
- 左外连接:使⽤ LEFT OUTER JOIN ... ON,OUTER 可以省略
--⽤左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示 NULL
可以理解为:在内连接的基础上保证左表的数据全部显示
select 字段名 from 左表 left [outer] join 右表 on 条件
- 右外连接:使⽤ RIGHT OUTER JOIN ... ON,OUTER 可以省略
-- ⽤右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示 NULL
可以理解为:在内连接的基础上保证右表的数据全部显示
select 字段名 from 左表 right [outer] join 右表 on 条件
二丶子查询
概念:
1.⼀个查询的结果做为另⼀个查询的条件
2.有查询的嵌套,内部的查询称为⼦查询
3.⼦查询要使⽤括号
1.⼦查询结果只要是单⾏单列,肯定在 WHERE 后⾯作为条件,⽗查询使⽤:⽐较运算符
select 查询字段 from 表 where 字段 = (⼦查询);
2.⼦查询结果是单例多⾏,结果集类似于⼀个数组,⽗查询使⽤ IN 运算符
select 查询字段 from 表 where 字段 in (⼦查询);
3.⼦查询结果只要是多列,肯定在 FROM 后⾯作为表
select 查询字段 from (⼦查询) 表别名 where 条件;
小结:⼦查询结果只要是单列,则在 WHERE 后⾯作为条件⼦查询结果只要是多列,则在 FROM 后⾯作为表进⾏⼆次查询
三丶事务
概念:业务层面上不可分割的最小单位。事务执⾏是⼀个整体,所有的 SQL 语句都必须执⾏成功。如果其中有 1 条 SQL 语句出现异常,则所有的 SQL 语句都要回滚,整个业务执⾏失败。例如:转账,往往是要多次访问数据库才能完成的。转账是⼀个⽤户扣钱,另⼀个⽤户加钱。
1.手动提交事务
开启事务 start transaction;
提交事务 commit;
回滚事务 rollback;
执⾏成功的情况:开启事务
→
执⾏多条
SQL
语句
→
成功提交事务
执⾏失败的情况:开启事务
→
执⾏多条
SQL
语句
→
事务的回滚
2.自动提交事务
MySQL
默认每⼀条
DML(
增删改
)
语句都是⼀个单独的事务,每条语句都会⾃动开启⼀个事务,
语句执⾏完毕⾃动提交事务,
MySQL
默认开始⾃动提交事务
3.事务的隔离级别
- 事务的四大特性
- 事务并发访问产生的问题
- MySQL 数据库有四种隔离级别
注:隔离级别越⾼,性能越差,安全性越⾼。