1. 程式人生 > 其它 >MySQL資料庫 - 連線查詢

MySQL資料庫 - 連線查詢

技術標籤:Educoder實訓之MySQL

第1關:內連線查詢
任務描述
本關任務:使用內連線查詢資料表中學生姓名和對應的班級。
相關知識
為了完成本關任務,你需要掌握:
1.什麼是內連線查詢;
2.如何使用內連線查詢。
內連線查詢
僅將兩個表中滿足連線條件的行組合起來作為結果集,稱為內連線;
關鍵字:[inner] join … on。
語法:
表1 [inner] join 表2 on 表1.欄位=表2.欄位
語法解釋:
從表1中取出每一條記錄,去表2中與所有的記錄進行匹配,匹配必須是某個條件在表1中與表2中相同,最終才會保留結果,否則不保留。inner 關鍵字可省略不寫;on 表示連線條件:條件欄位就是代表相同的業務含義(如下面兩張表中的 employee.dept_id 和 department.id),大多數情況下為兩張表中的主外來鍵關係。

內連線查詢的使用
現在我們有兩張表,資料如下:
employee表資料:
在這裡插入圖片描述
department表資料:
在這裡插入圖片描述
現在想要查詢出員工姓名以及其對應的部門名稱,我們就使用內連線來進行查詢。
我們可以將關聯查詢思路分為三步:
1.確定所連線的表,
2.確定所要查詢的欄位,
3.確定連線條件與連線方式。
在這裡插入圖片描述
其中,沒有部門的員工和部門沒有員工的部門都沒有被查出來,這就是內連線的特點,只查詢在連線表中有對應的記錄,其中dept.id=emp.dept_id是連線條件。
程式設計要求
在右側編輯器補充程式碼,查詢資料表中學生姓名以及對應的班級名稱,將其對應的列名分別另命名為studentName和className。
我們為你提供了兩張表,內容如下:
tb_student表資料:
在這裡插入圖片描述
tb_class表資料:
在這裡插入圖片描述
測試說明
平臺會對你編寫的程式碼進行測試:
預期輸出:
studentName className
Kevin 軟體1631
James 軟體1631
Emma 軟體1632
Rose 軟體1632
Mary 測試1632
開始你的任務吧,祝你成功!
參考程式碼:

USE School;
########## 查詢資料表中學生姓名和對應的班級 ##########
#請在此處新增實現程式碼
########## Begin ##########
select tb_student.name as studentName,tb_class.name as className from tb_student join tb_class on tb_class.id = tb_student.class_id;
########## End ##########

第2關:外連線查詢
任務描述
本關任務:使用外連線查詢資料表中所有班級和對應班級裡學生的姓名。
相關知識
為了完成本關任務,你需要掌握:
1.什麼是外連線查詢;
2.如何使用外連線查詢。
外連線查詢
以某張表為主,取出裡面的所有記錄,然後每條與另外一張表進行連線,不管能不能匹配上條件,最終都會保留。能匹配,正確保留;不能匹配,其它表的欄位都置空(null),稱為外連線。
外連線查詢分為左外連線查詢和右外連線查詢;
關鍵字:left/right [outer] join … on。
語法:
表1 left/right [outer] join 表2 on 表1.欄位=表2.欄位
語法解釋:
左外連線:在內連線的基礎上,還包含表1中所有不符合條件的資料行,並在其中的表2列填寫 NULL;
右外連線:在內連線的基礎上,還包含表2中所有不符合條件的資料行,並在其中的表1列填寫 NULL。
外連線查詢的使用
我們仍使用如下兩張資料表:
employee表資料:
在這裡插入圖片描述
department表資料:
在這裡插入圖片描述
例如查詢所有員工姓名以及他所在部門,在內連線中Mary沒有被查出,因為他沒有對應的部門,現在想把Mary也查出來,就要使用左外連線。
在這裡插入圖片描述
此查詢語句以employee為主表查詢,因此最終記錄至少不少於主表已有的記錄數。
右外連線是同理的,只是基準表的位置變化了而已。
在這裡插入圖片描述
我們在這裡只是將left修改成了right,但是基準表變化了,是以department表的資料去匹配employee表,所以左外連線能做到的查詢,右外連線也能做到,僅展現的效果有所不同。
雖然左外連線和右外連線有主表差異,但左外連線和右外連線可以互轉,如上面的右外連線也等效於如下查詢語句,只需將基準表換一下:
在這裡插入圖片描述
程式設計要求
在右側編輯器補充程式碼,分別使用左外連線和右外連線查詢資料表中所有學生姓名和對應的班級名稱,查詢結果列分別另命名為studentName和className。
我們為你提供了兩張表,內容如下:
tb_student表資料:
在這裡插入圖片描述
tb_class表資料:
在這裡插入圖片描述
測試說明
平臺會對你編寫的程式碼進行測試:
預期輸出:
studentName className
Emma 軟體1632
Mary 測試1632
Allen NULL
Kevin 軟體1631
Rose 軟體1632
James 軟體1631
studentName className
Kevin 軟體1631
James 軟體1631
Emma 軟體1632
Rose 軟體1632
NULL 測試1631
Mary 測試1632
開始你的任務吧,祝你成功!
參考程式碼:

USE School;
########## 使用左外連線查詢所有學生姓名和對應的班級 ##########
#請在此處新增實現程式碼
########## Begin ##########
select tb_student.name as studentName,tb_class.name as className 
from tb_class right join tb_student on tb_class.id=tb_student.class_id;
########## End ##########
########## 使用右外連線查詢所有學生姓名和對應的班級 ##########
#請在此處新增實現程式碼
########## Begin ##########
select tb_student.name as studentName,tb_class.name as className 
from tb_class  left join tb_student on tb_class.id=tb_student.class_id;
########## End ##########

第3關:複合條件連線查詢
任務描述
本關任務:使用連線查詢,查詢所有班級裡分數在90分以上的學生的姓名和學生的成績以及學生所在的班級。
相關知識
為了完成本關任務,你需要掌握:如何編寫複合條件連線查詢語句。
複合條件連線查詢
複合條件連線查詢,就是在連線查詢的過程中,通過新增過濾條件來限制查詢結果,使查詢結果更加精確。
如下兩張資料表:
employee表資料:
在這裡插入圖片描述
department表資料:
在這裡插入圖片描述
要求查詢員工姓名和所在部門名稱,使用內連線查詢,將查詢結果按照年齡升序排序:
在這裡插入圖片描述
程式設計要求
在右側編輯器補充程式碼,查詢所有班級裡分數在90分以上的學生的姓名和學生的成績以及學生所在的班級,其中學生的姓名和學生所在班級分別另命名為studentName和className。
我們為你提供了兩張表,內容如下:
tb_student表資料:
在這裡插入圖片描述
tb_class表資料:
在這裡插入圖片描述
測試說明
平臺會對你編寫的程式碼進行測試:
預期輸出:
studentName score className
James 99 軟體1631
Mary 92 測試1632
開始你的任務吧,祝你成功!
參考程式碼:

USE School;
########## 查詢所有班級裡分數在90分以上的學生的姓名和學生的成績以及學生所在的班級 ##########
#請在此處新增實現程式碼
########## Begin ##########
select s1.name as studentName,score,s2.name as className
from tb_student as s1,tb_class as s2
where s1.class_id=s2.id
and s1.score>90
order by score desc;
########## End ##########