多表聯(lián)查
關(guān)系型數(shù)據(jù)庫(kù)在設(shè)計(jì)倦卖,往往將一些綜合數(shù)據(jù)丘薛,分離到不同的表中舍扰,當(dāng)我們要展示到數(shù)據(jù)分布在不同的表的列中時(shí),需要將相關(guān)表格先聯(lián)合起來(lái),組成一新的“表”(結(jié)果集),然后再對(duì)該新表進(jìn)行SQL查詢
-
基本的兩表聯(lián)查
語(yǔ)法:哪些表的哪些字段阱表,兩個(gè)表的連接字段(外鍵)
select 表1.字段1,表1.字段2, 表2.字段1,表2.字段2 from 表1,表2 where 連接條件 and 查詢條件 //查詢表所有字段 select 表1.*,表2.* from .... 連接條件 表1.關(guān)聯(lián)鍵 = 表2.關(guān)聯(lián)鍵
示例:
獲取學(xué)生及班級(jí)名信息
select stu_info.`stu_name`, //查詢字段 stu_info.`stu_age`, stu_info.`stu_sex`, stu_class.`c_name` from stu_info, //查詢表 stu_class where stu_info.`c_id`=stu_class.`c_id`; //連接條件 and stu_info.`stu_age` > 30 //對(duì)連接后的結(jié)果集爱致,進(jìn)行條件篩選
-
標(biāo)準(zhǔn)聯(lián)接查詢
- 內(nèi)連接
語(yǔ)法
select 表1.字段,表2.字段 from 表1 join 表2 on 連接條件 where 查詢條件
示例:
select stu_info.`*`, stu_class.`*` from stu_info right join stu_class on stu_info.`c_id`=stu_class.`c_id` where stu_age > 20
- 左/右聯(lián)接查詢
表1 left join 表2 on 聯(lián)接條件 表1 right join 表2 on 聯(lián)接條件
- left : 表示逢防,以表1為主表,將表2向表1合并局嘁,包證表1數(shù)據(jù)完整性(合并后集合中必須包含所有的表1數(shù)據(jù)項(xiàng))晌畅,如果表2有表1沒(méi)有连躏,就將沒(méi)有項(xiàng)丟棄。 表1有,表2有就補(bǔ)NULL
- right:表示,以表2為主表讳侨,將表1向表2合并囱皿,包證表2數(shù)據(jù)完整性(合并后集合中必須包含所有的表2數(shù)據(jù)項(xiàng)),如果“輔表”有 “主表” 沒(méi)有,就將“主表沒(méi)有項(xiàng)”丟棄。 主表有,輔表沒(méi)有,就補(bǔ)NULL