今天心血來(lái)潮想嘗試下視圖的知識(shí)藕漱,之前早就聽(tīng)說(shuō)過(guò)這個(gè)名字锅劝,只不過(guò)礙于對(duì)未知的恐懼,或者是未知的挑戰(zhàn)性,總是沒(méi)有邁出學(xué)習(xí)視圖的這一步茬斧,然后查閱了相關(guān)資料腰懂,發(fā)現(xiàn)視圖其實(shí)還是蠻好玩的,在我工作的實(shí)際業(yè)務(wù)中项秉,經(jīng)常涉及到3绣溜,4張表關(guān)聯(lián)的大數(shù)據(jù)分析查詢,很多時(shí)候沒(méi)辦法進(jìn)行優(yōu)化娄蔼,但是學(xué)了視圖之后怖喻,突然靈機(jī)一動(dòng),想到是不是可以用這個(gè)來(lái)解決多表聯(lián)查的一些優(yōu)化呢岁诉,尤其是物資系統(tǒng)锚沸,7、8張表聯(lián)查唉侄,效率是非常慢的咒吐,廢話不多說(shuō),解釋了原理属划,接下來(lái)看看如何使用恬叹。
一、創(chuàng)建
語(yǔ)法:
? ? 用戶表(users) ? ? ? ? ? ? ? ?職位表(depts) ? ? ? ? ? ? ? ? 組織表(orgs)
id ? ?name ? ?dept_id ? ? ? ? ? ? ? ?id ? name ?org_id ? ? ? ? ? ? ? ?id ? name
用戶表關(guān)聯(lián)職位id同眯,職位表關(guān)聯(lián)組織id绽昼,現(xiàn)在知道了用戶的id,需要查出該用戶屬于哪個(gè)組織须蜗,就需要如下sql:
select o.name as org_name?
from users as u?
left join depts as d on u.dept_id = d.id
left join orgs as o on d.org_id = o.id
每次都需要連接3張表才能找到該組織硅确,如果用視圖來(lái)解決這個(gè)問(wèn)題的話,就可以這樣:
create view org_info as (select u.id as user_id,d.id as dept_id,o.id as org_id,o.name as org_name from users as u
left join depts as d on u.dept_id = d.id
left join orgs as o on d.org_id = o.id)
創(chuàng)建好視圖之后明肮,以后每次要完成上述需求菱农,只需要對(duì)視圖進(jìn)行查詢:
select org_name from org_info where user_id = 1
這樣就完成了,是不是很簡(jiǎn)單柿估!