2019-05-16多表查詢和事務(wù)操作

內(nèi)連接

隱式內(nèi)連接

看不到Join關(guān)鍵字纠永,條件使用where指定

語法:select 列名印颤,列名...from 表名1苔可,表名2where 表名1.列名=表名2.列名

select *from fruit ,price where fruit.price_id=price.id;

說明:在產(chǎn)生兩張表的笛卡爾積的數(shù)據(jù)后寇漫,通過條件刪選出正確的結(jié)果亲桦。

顯示內(nèi)連接

使用 inner join...on語句,可以省略inner

語法:select *from 表名1 inner join 表名2 on 條件中符;

或者 select * from 表名1 join 表名2 on 條件

具體操作

select *from fruit inner join price on fruit.price_id=price.id

小結(jié)

1.隱式連接看不到j(luò)oin姜胖,顯示連接看到j(luò)oin

2.內(nèi)連接查詢步驟:

1.確定查詢幾張表

2.確定表連接哪些條件

3.根據(jù)需要在操作

左外連接

左外連接可以理解為:用左邊表去右邊表中查詢對應記錄,不管是否找到淀散,都將顯示左邊表中全部記錄

左外連接: 使用 left outer join...on,outer 可以省略

select *from 表1 left outer join 表2 on 條件右莱;

用 left 關(guān)鍵字之前的表,是定義為左側(cè)档插。left 關(guān)鍵字之后的表慢蜓,定義右側(cè)。

查詢的內(nèi)容:以左側(cè)的表為主郭膛,如果左側(cè)有數(shù)據(jù)晨抡,右側(cè)沒有對應的數(shù)據(jù),仍然會把左側(cè)數(shù)據(jù)進行顯示则剃。

select *from fruit left outer join price on fruit.price_id=price.id?

右外連接

用右邊表去左邊表查詢記錄耘柱,不管是否找到,右邊表的記錄都將顯示棍现。

右外連接:使用 right outer join...on,outer 可以省略

語法:select *from 表1 right outer join 表2 on 條件调煎;

select *from fruit outer join price on fruit.price_id=price.id

子查詢

什么是子查詢

一條查詢語句結(jié)果作為另一條查詢語法一部分

select 查詢字段 from 表 where 條件;

舉例: select * from employee where salary =(select max(salary)from employee);

子查詢的三種情況

單行單列? ?多行單列? ? ?多行多列

單行單列?

1.查詢最高工資是多少

select max(salary)from emp;

根據(jù)最高工資到員工表查詢到對應的員工信息

select?*from emp where salary =(select max(salary)from emp);

到員工表查詢小于平均的員工信息

?select *from emp where salary <(select? avg(salary)from emp);

子查詢結(jié)果是單行單列時父查詢?nèi)绾翁幚恚?/p>

select 查詢字段 from 表where 字段=(子查詢);

通常作為父查詢條件

子查詢是多行單列的時候

子查詢的結(jié)果是多行單列己肮,結(jié)果集類似一個數(shù)組士袄,在where后面作為條件悲关,父查詢使用in運算符

select 查詢字段 from 表 where 字段 in(子查詢);

查詢工資大于5000的員工娄柳,來自于哪些部門的名字

先查詢大于5000的員工所在的部門id

select dept_id from emp where salary >5000;

在查詢在這些部門id中部門的名字

select dept.name from dept where dept.id in(select dept_id from emp where salary >5000);

子查詢的結(jié)果是多行單列時父查詢?nèi)绾翁幚恚?/p>

放在父查詢的條件位置寓辱,使用in

子查詢的結(jié)果是多行多列

子查詢的結(jié)果是多行多列,在from后面作為表

select 查詢字段from (子查詢)表別名 where條件赤拒;

注意:子查詢作為表需要取別名秫筏,否則這張表沒用名稱無法訪問表中的字段

查詢出2011年以后入職的員工信息,包括部門名稱

在員工表中查詢2011-1-1以后入職的員工

select *from empty where join date >"2011-1-1"

查詢所有的部門信息需了,與上面的虛擬表中的信息組合跳昼,找出所有部門id等于dept_id

select *from dept d,(select *from emp where join_date >"2011-1-1")? ?e? where e.dept_id=d.id;

小結(jié)

三種子查詢情況:單行單列,多行單列肋乍,多行多列

單行單列:作為父查詢的條件

多行單列:作為父查詢的條件鹅颊,通常使用in

多行多列:作為父查詢的一張表(虛擬表)

事務(wù)的概念

mysql中可以有兩種方式進行事務(wù)操作

1.手動提交事務(wù):先開啟,再提交

2.自動提交事務(wù)(默認的):即執(zhí)行一條SQL語句提交一次事務(wù)墓造。

事務(wù)有關(guān)的SQL語句:

SQL語句? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?描述

start transaction;? ? ? ? ? ? ? ? ?開啟手動控制事務(wù)

commit;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?提交事務(wù)

rollback;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?回滾事務(wù)

手動提交事務(wù)的步驟

第一種情況:開啟事務(wù)——>執(zhí)行SQL語句——>成功——>提交事務(wù)

第二種情況:開啟事務(wù)——>執(zhí)行SQL語句——>失敗——>回滾事務(wù)

?在mysql中模她,mysql默認是自動提交事務(wù)纱控,就是執(zhí)行一個sql語句就會提交一次事務(wù)掸犬。

-- 查看mysql是否是自動提交事務(wù)

show variables like'%commit%'


-- autocommit 值是on表示開啟了自動提交事務(wù)聋伦,如果值是off表示關(guān)閉自動提交事務(wù)


-- a - 100

update account set money = money - 100where name='a';

-- b + 100

update account set money = money + 100where name='b';


-- 關(guān)閉自動提交事務(wù)


-- autocommit 值是on表示開啟了自動提交事務(wù),如果值是off表示關(guān)閉自動提交事務(wù)

-- 可以給其設(shè)置值 1 表示on 0 表示off

set autocommit = 0

-- 手動控制事務(wù)

start transaction;

-- 執(zhí)行轉(zhuǎn)賬的sql語句都位于都一個事務(wù)中蛉拙,要么都成功尸闸,要么都失敗--

-- a - 100

update account set money = money - 100where name='a';

-- b + 100

update account set money = money + 100where name='b';

-- 一切正常,提交事務(wù)永久性改變

commit;

-- 小結(jié):

--??? 1.在start transaction開啟事務(wù)之前會將之前沒有提交事務(wù)的數(shù)據(jù)先提交然后在控制事務(wù)

--? 2.在mysql中關(guān)閉自動提交事務(wù)只是臨時的孕锄,如果重新啟動mysql服務(wù)或者重新連接mysql服務(wù)器那么又會

-- 開啟自動提交事務(wù)

事務(wù)的特性

原子性:一組sql語句不能被拆分吮廉,要么都成功,要么都失敗

一致性:操作事務(wù)前后數(shù)據(jù)是一致的畸肆。

原來:

A:100

B:100

轉(zhuǎn)賬之后:

A:90

B:110

持久性:事務(wù)被提交之后宦芦,數(shù)據(jù)就會永久性保存。

隔離性:多個事務(wù)之間沒有關(guān)系轴脐。

事務(wù)1:a給b轉(zhuǎn)賬

事務(wù)2:c給d轉(zhuǎn)賬

事務(wù)并發(fā)訪問引發(fā)的問題

前提:不考慮隔離性调卑。

有三個問題:

1)臟讀:最嚴重的,一定避免

2)不可重復讀

3)幻讀或者虛讀

小結(jié):

臟讀:未提交事務(wù) 數(shù)據(jù)內(nèi)容

不可重復讀:已經(jīng)提交事務(wù) 數(shù)據(jù)內(nèi)容 update

幻讀:已經(jīng)提交事務(wù) 行記錄數(shù) insert delete

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大咱,一起剝皮案震驚了整個濱河市恬涧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碴巾,老刑警劉巖溯捆,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異餐抢,居然都是意外死亡现使,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門旷痕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碳锈,“玉大人,你說我怎么就攤上這事欺抗∈厶迹” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵绞呈,是天一觀的道長贸人。 經(jīng)常有香客問我,道長佃声,這世上最難降的妖魔是什么艺智? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮圾亏,結(jié)果婚禮上十拣,老公的妹妹穿的比我還像新娘。我一直安慰自己志鹃,他們只是感情好夭问,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著曹铃,像睡著了一般缰趋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陕见,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天秘血,我揣著相機與錄音,去河邊找鬼淳玩。 笑死直撤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蜕着。 我是一名探鬼主播谋竖,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼承匣!你這毒婦竟也來了蓖乘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤韧骗,失蹤者是張志新(化名)和其女友劉穎嘉抒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袍暴,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡些侍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年隶症,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岗宣。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚂会,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耗式,到底是詐尸還是另有隱情胁住,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布刊咳,位于F島的核電站彪见,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娱挨。R本人自食惡果不足惜余指,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望让蕾。 院中可真熱鬧浪规,春花似錦、人聲如沸探孝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顿颅。三九已至缸濒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粱腻,已是汗流浹背庇配。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绍些,地道東北人捞慌。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像柬批,于是被迫代替她去往敵國和親啸澡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容