SQL多表銜接查詢實例剖析(具體圖文)。本站提示廣大學習愛好者:(SQL多表銜接查詢實例剖析(具體圖文))文章只能為提供參考,不一定能成為您想要的結果。以下是SQL多表銜接查詢實例剖析(具體圖文)正文
新建兩張表:
表1:student 截圖以下:
表2:course 截圖以下:
(此時如許建表只是為了演示銜接SQL語句,固然現實開辟中我們不會如許建表,現實開辟中這兩個表會有本身分歧的主鍵。)
1、外銜接
外銜接可分為:左銜接、右銜接、完整外銜接。
1、左銜接 left join 或 left outer join
SQL語句:select * from student left join course on student.ID=course.ID
履行成果:
左外銜接包括left join左表一切行,假如左表中某行在右表沒有婚配,則成果中對應行右表的部門全體為空(NULL).
注:此時我們不克不及說成果的行數等於左表數據的行數。固然此處查詢成果的行數等於左表數據的行數,由於閣下兩表此時為一對一關系。
2、右銜接 right join 或 right outer join
SQL語句:select * from student right join course on student.ID=course.ID
履行成果:
右外銜接包括right join右表一切行,假如左表中某行在右表沒有婚配,則成果中對應左表的部門全體為空(NULL)。
注:異樣此時我們不克不及說成果的行數等於右表的行數。固然此處查詢成果的行數等於左表數據的行數,由於閣下兩表此時為一對一關系。
3、完整外銜接 full join 或 full outer join
SQL語句:select * from student full join course on student.ID=course.ID
履行成果:
完整外銜接包括full join閣下兩表中一切的行,假如右表中某行在左表中沒有婚配,則成果中對應行右表的部門全體為空(NULL),假如左表中某行在右表中沒有婚配,則成果中對應行左表的部門全體為空(NULL)。
2、內銜接 join 或 inner join
SQL語句:select * from student inner join course on student.ID=course.ID
履行成果:
inner join 是比擬運算符,只前往相符前提的行。
此時相當於:select * from student,course where student.ID=course.ID
3、穿插銜接 cross join
1.概念:沒有 WHERE 子句的穿插聯接將發生銜接所觸及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積成果集的年夜小。
SQL語句:select * from student cross join course
履行成果:
假如我們在此時給這條SQL加上WHERE子句的時刻好比SQL:select * from student cross join course where student.ID=course.ID
此時將前往相符前提的成果集,成果和inner join所示履行成果一樣。
4、兩表關系為一對多,多對一或多對多時的銜接語句
固然下面兩表為一對一關系,那末假如表A和表B為一對多、多對一或多對多的時刻,我們又該若何寫銜接SQL語句呢?
其實兩表一對多的SQL語句和一對一的SQL語句的寫法都差不多,只是查詢的成果紛歧樣,固然兩表也要略有修改。
好比表1的列可以改成:
Sno Name Cno
表2的列可以改成:
Cno CName
如許兩表便可以寫一對多和多對一的SQL語句了,寫法和下面的一對一SQL語句一樣。
上面引見一下當兩表為多對多的時刻我們該若何建表和些SQL語句。
新建三表:
表A: student 截圖以下:
表B: course 截圖以下:
表C: student_course 截圖以下:
一個先生可以選擇多門課程,一門課程可以被多個先生選擇,是以先生表student和課程表course之間是多對多的關系。
當兩表為多對多關系的時刻,我們須要樹立一個中央表student_course,中央表至多要有兩表的主鍵,固然還可以有其余內容。
SQL語句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno
履行成果:
此條SQL履行的成果是先生選課的情形。