多表查詢
多表關(guān)系
項目開發(fā)中织阅,在進行數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計時烘嘱,會根據(jù)業(yè)務(wù)需求及業(yè)務(wù)模塊之間的關(guān)系咽袜,分析并設(shè)計表結(jié)構(gòu)挺庞,由于業(yè)務(wù)之間相互關(guān)聯(lián)退敦,所以各個表結(jié)構(gòu)之間也存在著各種聯(lián)系暴区,基上分為三種:
- 一對多(多對一)
- 多對多
- 一對一
一對多
關(guān)系:一個部門對應(yīng)多個員工紧武,一個員工對應(yīng)一個部門
實現(xiàn):在多的一方建立外鍵晌畅,指向一的一方的主鍵
多對多
關(guān)系:一個學(xué)生可以選多門課程偏形,一門課程也可以供多個學(xué)生選修
實現(xiàn):建立第三張中間表静袖,中間表至少包含兩個外鍵,分別關(guān)聯(lián)兩方主鍵
一對一
關(guān)系:一對一關(guān)系俊扭,多用于單表拆分队橙,將一張表的基礎(chǔ)字段放在一張表中,其他詳情字段放在另一張表中萨惑,以提升操作效率
實現(xiàn):在任意一方加入外鍵捐康,關(guān)聯(lián)另外一方的主鍵,并且設(shè)置外鍵為唯一的(UNIQUE)
多表查詢
概述:
從多張表中查詢數(shù)據(jù)
合并查詢(笛卡爾積庸蔼,會展示所有組合結(jié)果):
select * from employee, dept;
笛卡爾積:兩個集合A集合和B集合的所有組合情況(在多表查詢時解总,需要消除無效的笛卡爾積)
消除無效笛卡爾積:
select * from employee, dept where employee.dept_id = dept.id;
多表查詢分類:
1.連接查詢
1.內(nèi)連接:相當(dāng)于查詢A、B交集部分數(shù)據(jù)
2.外連接:
1.左外連接:查詢左表所有數(shù)據(jù)姐仅,以及兩張表交集部分數(shù)據(jù)
2.右外連接:查詢右表所有數(shù)據(jù)花枫,以及兩張表交集部分數(shù)據(jù)
3.自連接:當(dāng)前表與自身的連接查詢,自連接必須使用表別名
2.子查詢
連接查詢
內(nèi)連接查詢
內(nèi)連接查詢的是兩張表交集的部分
隱式內(nèi)連接:
SELECT 字段列表 FROM 表1, 表2 WHERE 條件 ...;
顯式內(nèi)連接:
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 連接條件 ...;
顯式性能比隱式高