MySql(鏈接查詢)

一,內鏈接

    內鏈接:[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 ;

    左外鏈接和右外連接雖然有主表差別,可是顯示的結果,左表數據在左邊,右表數據在右邊。

相關文章
相關標籤/搜索