資料庫的多表查詢和事務

2022-06-24 15:57:08 字數 2431 閱讀 1039

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 級別字串;

多表查詢資料庫

在專案中建立資料庫的時候,我們經常會進行多表查詢。資料庫中建立乙個表應該與乙個實體類相對應。乙個實體物件應該與一條記錄相對應。資料庫是一種結構化的查詢語言,資料庫語言是非過程化的,寫一句就可以執行一句。進行建表的時候,如果是一對多的關係,應該在多的一方建立乙個字段。該字段為少的一方的id。進行建表的...

資料庫多表查詢

笛卡爾積 select from emp,dept select from emp cross join dept 內連線 inner join 內連線把兩個表連線成乙個表 稱為第三個表 在這個表中僅包含那些滿足連線條件的記錄行 select from emp,dept where emp.dept...

資料庫多表查詢 子查詢

子查詢 查詢中巢狀查詢,稱巢狀巢狀查詢為子查詢 下面要使用的表如下,放在此處便於更好地理解 emp 員工資訊表 dept 部門表 例 查詢公司員工工資最高的員工資訊 首先要得到公司員工的最高工資的值 select max salary from emp 假設查詢結果為10000然後根據上一句sql語...