本節內容
1.多表查詢
2.事務
多表查詢:
查詢語法
select
列名列表
from 表名列表 where ...
准備sql
#創建部門表
CREATE TABLE dept();
#創建員工表
CREATE TABLE emp();
笛卡爾積:
有兩個集合A,B,去這兩個集合的所有組成情況.
要完成多表查詢,需要消除無用的數據
多表查詢的分類:
1.內連接查詢
- 隱式內連接:使用where條件消除無用數據
- 顯示連接:語法:select 字段列表 from 表名1 [inner] join 表名2 on 條件
- 內連接查詢:
- 從那些表中查詢數據
- 條件是什么
- 查詢那些字段
2.外連接查詢
1.左外連接:
語法:select 字段列表 from 表1 left [outer] join 表2 on 條件;
查詢的是左表所有數據以及其交集部分.
2.右外連接
語法:select 字段列表 from 表1 right [outer] join 表2 on 條件;
查詢的是右表所有數據以及其交集部分.
子查詢:
概念:查詢中嵌套查詢,稱嵌套查詢為子查詢
--查詢工資最高的員工信息
--1查詢最高的工資是多少 9000
SELECT MAX(salary) FROM emp;
--2 查詢員工信息,並且工資等於9000的 select * from emp WHERE emp.'salary'=9000; --一條sql就完成這個操作.子查詢 SELECT * FROM emp WHERE emp.'salary' = (SELECT MAX(salary) FROM emp);
事務
1.事務的基本介紹
概念:
如果一個包含多個步驟的業務操作,被事務管理,那么這些操作要么同時成功,要么同時失敗.
操作:
- 開啟事務:start transaction;
- 回滾:rollback;
- 提交:commit;
2.事務的四大特征
- 原子性:是不可分割的最小操作單位,要么同時成功,要么同時失敗.
- 持久性:當事務提交或回滾后,數據庫會持久化的保存數據
- 隔離性:多個事務之間,相互獨立.
- 一致性:事務操作前后,數據總量不變
3.事務的隔離級別
概念:多個事務之間隔離的,相互獨立的.但是如果多個事務操作同一批數據,則會引發一些問題,設置不同的隔離級別就可以解決這些問題.
存在問題:
- 臟讀:一個事務,讀取到另一個事務中沒有提交的數據
- 不可重復讀(虛讀):在同一個事物中,兩次讀取到的數據不一樣.
- 幻讀:一個事務操作(DML)數據表中所有記錄,另一個事務添加了一條數據,則第一個事務查詢不到自己的修改.
隔離級別:
1.read uncommmitted:讀未提交
產生的問題:臟讀,不可重復讀,幻讀
2.read committed :讀已提交(Oracle) 產生的問題:不可重復讀,幻讀 3.repeatable read:可重復讀(MySQL默認) 產生的問題:幻讀 4.serializable:串行化 可以解決所有的問題
注意:隔離級別從小到大安全性越來越高,但是效率越來越低
數據庫查詢隔離級別:
select @@tx_isolation
數據庫設置隔離級別:
set global transaction isolation level 級別字符串;