內鏈接:[inner] join,從左表中每取出一條記錄,都跟右表中全部的記錄匹配,匹配必須是某個條件在左表和右表中條件相同纔會保留結果。不然不保留。
sql
基本語法:
spa
左表[inner] join 右表 on 左表.字段=右表.字段 ;on表示鏈接條件,條件字段就是表明相同的業務含義,如(student.cid = class.id) 。
code
select * from my_user inner join my_class on my_user.c_id = my_class.id ;
字段別名+表別名
ci
select u.*,u.name as u_name,c.name as c_name from =====字段別名 my_user as u inner join my_class as c =====表別名 on u.c_id = c.id ;
內鏈接能夠沒有鏈接條件,便可以沒有on後邊內容,這個時候系統會保留全部結果,即出現笛卡爾積。class
因此,內鏈接可使用where代替on關鍵字。on效率更高
效率
外連接:以某一個表爲主表,取出裏邊的全部記錄,而後每條與另外一個表中進行鏈接,無論能不能匹配上條件,最終都會保留,若是能匹配,則保留,若是不能匹配則另外一個表的字段爲空null。
select
外連接分兩種,由於以某一個表爲主表,因此須要一個主表
語法
Left join :左外連接 以左表爲主表
數據
Right join : 右外連接 以右表爲主表
co
基本語法: 左表 left/right join 右表 on 左表.字段=右表.字段 ;
左外連接
select u.*,c.name as c_name,c.id as c_id from my_user as u left join my_class as c on u.c_id = c.id ; ====左表爲主表,最終記錄數至少很多於左表已有記錄數
右外連接
select u.*,c.name as c_name,c.id as c_id from my_user as u right join my_class as c on u.c_id = c.id ;
左外鏈接和右外連接雖然有主表差別,可是顯示的結果,左表數據在左邊,右表數據在右邊。