從資料庫中查詢資料時,會經常使用到多張表的資料,有些資料需要從兩張或多張表中共同獲取。
舉個例子,這裡有兩張表格,分別是學生資訊表(表A)、學生成績表(表B)。
stunum | stuname | major | age |
---|---|---|---|
20200101 | 張三 | 軟體工程 | 18 |
20200102 | 李莉 | 電腦科學與技術 | 19 |
20200103 | 王五 | 資訊科技 | 20 |
20200104 | 張小 | 軟體工程 | 20 |
stunum | stumname | math | english | shujujiegou |
---|---|---|---|---|
20200101 | 張三 | 67 | 80 | 60 |
20200102 | 李莉 | 80 | 85 | 89 |
20200103 | 王五 | 75 | 75 | 90 |
20200104 | 張小 | 75 | 75 | 95 |
例一 假設我們要查詢專業為轉件工程的同學的各科成績,可以看到專業資訊在表A,成績資訊在表B,如果我們要查詢的話,要以表A為基礎,因為首先要查到專業為軟體工程專業的學生,這時我們把表A作為左表,用左連線來查詢。
查詢語句為:
select A.stunum,A.stuname,A.major,B.math,B.english,B.shujujiegou #查詢A表的學號、A表的姓名、A表的專業、以及B表數學、英語、資料結構成績。
from A left john B #從A與B的左連線表中
where major="軟體工程" and A.stunum=B.stunum #條件是專業為軟體工程且學號相等
order by A.stumun asc; 按學號升序排列
查詢結果為,從左到右欄位分別為學號、姓名、專業、數學分數、英語分數、資料結構分數。
20200101 | 張三 | 軟體工程 | 67 | 80 | 60 |
---|---|---|---|---|---|
20200104 | 張小 | 軟體工程 | 75 | 75 | 95 |
這就是left john的用法,以左表為基礎來查詢。
例二 假設要查詢資料結構分數在80分以上的同學的學號,姓名、專業、年齡。從表中可以看到成績在表B中,所以要先從表B中查詢到資料結構分數大於80分的同學,然後再去表A查詢專業、年齡欄位。
查詢語句為:
select A.stunum,A.stuname,A.major,A.age,B.shujujiegou #查詢學號、姓名、專業、年齡、資料結構分數
from A right john B #從A與B的右連線表中
where B.shujujiegou >'80'and A.stunum=B.stunum #條件是資料結構分數大於80且A與B的學號相等
order by B.shujujiegou asc;#按資料結構分數升序排列
查詢結果為,從左到右欄位分別為學號、姓名、專業、年齡、資料結構分數。
20200102 | 李莉 | 電腦科學與技術 | 19 | 89 |
---|---|---|---|---|
20200103 | 王五 | 資訊科技 | 20 | 90 |
20200104 | 張小 | 軟體工程 | 20 | 95 |
這就是right john的用法,以右表基礎來查詢。