多表連線查詢

2022-05-06 08:57:10 字數 2098 閱讀 1668

理論上將全部資料放到同一張表中很難實現,實際上即使實現了,表也很龐大,很冗雜,不便於查詢與維護,

因此將不同的資料存放到不同的表中,需要時連線各表進行查詢。

兩張表進行連線查詢時,將其中一張表中的每一行資料與另外一張表的全部資料進行對比,如果滿足給定的條件,

則將這兩行資料合併為一行,否則捨棄,繼續對比剩餘行。

如果表連線時未設定連線條件,那麼返回的查詢結果數目是兩個錶行數的乘積,這種現象被叫做笛卡爾現象。

兩張表進行連線查詢,如果只顯示匹配資料,那麼採用內連線的方式。

格式:

select t1.columnname01,t2.columnname02 from tbname01 t1(inner)join tbname02 t2 on 連線條件;
為了指明字段所屬的表,為每一張參與連線的表指定別名,通過別名呼叫其中的字段。

外連線將連線指向的一張表中的資料全部返回,另一種表對應欄位無匹配資料時用null填充。

格式:

select t1.columnname01,t2.columnname02 from tbname01 t1 right/left (outer) join tbname02 t2 on 連線條件;
在外連線中使用left,左邊表的資料被全部取出;使用right,右邊表的資料被全部取出。

一張表a與多張表連線查詢,表a與其他表分別進行連線查詢,最終的結果是各個獨立連線查詢結果中相同a表字段資料的組合,

即將某乙個連線查詢結果中某一行a表全部字段取出,如果其他連線查詢結果都具有該a欄位,則所有具有該字段的

行合併為一行。

下面以多對多關聯關係進行演示。

學生表tb_student:

課程表tb_course:

中間表tb_mid(採用聯合主鍵,每個主鍵欄位又是乙個外來鍵字段,分別指向對應的學生表或者課程表的主鍵):

任務:查詢學生「李四」所選的全部課程。

分析:學生表與課程表之間沒有直接關係,而學生表與中間表、課程表與中間表都有關係,因此採用中間表作為主表,分別與學生表、課程表進行連線查詢。

中間表與學生表連線查詢,將查詢結果記作a表:

中間表與課程表連線查詢,將查詢結果記作b表: 

從a表中的某一行取出主表(tb_mid)的全部資料,與b表的所有行進行對比,如果主表對應字段值相同,則合併為一行,以此迴圈,就形成了3張表連線查詢的結果:

以上就是如下3張表連線查詢的執行過程:

select s.id sid,s.name sname,c.id cid ,c.name cname,m.student_id,m.course_id 

from

tb_mid m join tb_student s on m.student_id =s.id

join tb_course c on m.course_id=c.id;

在3張表連線查詢結果中新增乙個過濾條件「where s.name='李四'」就獲得了最終結果。

多表查詢(連線查詢)

多表查詢 資料 是多個表,這時注意一定要書寫連線條件。當n個表連線,至少需要n 1個連線條件。注意 1 如何判斷兩個表之間有公共列?型別一致 寬度一致。列名不能作為判斷標準,列名不同也能是公共列 如 emp的empno和emp的mgr 2 如何避免二義性問題?給每個屬性加歸屬。3 注意使用表別名。表...

多表連線查詢

1 內連線 inner join 只返回兩個表中所有滿足連線條件的行 2 外連線outer join 除了返回兩個表中所有滿足連線條件的行之外,還返回 某個表中不滿足連線條件的行 3 交叉連線 產生笛卡爾積的連線 如果連線條件使用等號 就可以叫做相等連線 1 使用natural join關鍵字進行內...

多表連線查詢

1.如果乙個查詢需要多個表進行操作,就成為連線查詢。2.連線查詢實際上是通過各個表之間共同列的關聯性來查詢資料的,資料表之間的聯絡是通過表的字段值來體現的。查詢 劉偉 老師所教授的課程,要求列出教師號,教師姓名和課程號 1.方法一 select t.no,tn,cno from t,tc where...