sql連接查詢(inner join、full join、left join、 right join)
一、內連接(inner join)
首先我這有兩張表
1、顧客信息表customer
2、消費訂單表orders
注意:顧客與訂單之間是一對多關系
需求:查詢哪個顧客(customer_name)在哪一天(create_time)消費了多少錢(money)
sql語句:
select c.customer_name, o.create_time, o.money from customer c, orders o where c.id = o.customer_id
sql語句也可以這樣寫:
select c.customer_name, o.create_time, o.money from customer c inner join orders o on c.id = o.customer_id
結果:
內連接的過程:
將符合條件的記錄組合起來,放在一張新表里面
二、左連接(left join)
需求:查詢哪個顧客(customer_name)在哪一天(create_time)消費了多少錢(money)
sql語句:
select c.customer_name, o.create_time, o.money from customer c left join orders o on c.id = o.customer_id
結果:
從結果可以很清楚的明白左連接的含義:
將左邊表的所有記錄拿出來,不管右邊表有沒有對應的記錄
三、右連接(right join)
需求:查詢哪個顧客(customer_name)在哪一天(create_time)消費了多少錢(money)
sql語句:
select c.customer_name, o.create_time, o.money from customer c right join orders o on c.id = o.customer_id
結果:
、
從結果可以很清楚的明白右連接的含義:
將右邊表的所有記錄拿出來,不管右邊表有沒有對應的記錄
四、全連接(full join)
這里要注意的是mysql本身並不支持全連接查詢,但是我們可以使用UNION關鍵字實現
sql語句:
select c.customer_name, o.create_time, o.money from customer c left join orders o on c.id = o.customer_id UNION select c.customer_name, o.create_time, o.money from customer c right join orders o on c.id = o.customer_id
結果:
從sql語句中可以清楚的看到:
使用UNION關鍵字將左連接和右連接,聯合起來