mysql自鏈接與join關聯

mysql自鏈接

mysql有時在信息查詢時須要進行對自身鏈接(自鏈接),因此咱們須要爲表定義別名。咱們舉例說明,下面是商品採購表,咱們須要找到採購價格比惠惠高的全部信息。
mysql

通常狀況咱們看到這張表咱們第一時間用語句進行操做:sql

SELECT * FROM shoping WHERE price>27

可想而知,這是有多麼簡單,假設你並不知道數據庫表詳細數據或者數據量至關龐大呢?做爲一個數據庫管理員,咱們就要用別的方式迅速找出所須要的數據。數據庫

分步查詢

最簡單的一種方式,也是最容易想到操做:spa

SELECT price FROM shopping WHERE name='惠惠' //得出price查詢結果爲27
SELECT * FROM shopping WHERE price>27

與採用自鏈接的方式相比,這種方法須要對中間結果進行人工干預,顯然不利於程序中的自動處理操做。code

自鏈接方式:

SELECT b.* 
from shopping as a,shopping as b
where a.name='惠惠' 
and a.price<b.price 
order by b.id

咱們能夠獲取到以下表信息:
blog

注意點:rem

  • 別名 a,b雖然名稱不一樣,可是同一個表,定義別名的目的是更方便在自身進行刪選。it

  • 執行select經過(中間表)所獲得的b.*,,就是最終結果。table

子查詢

子查詢也是經常使用的一種方式,就是在select裏嵌套select。實現代碼以下:class

SELECT * FROM shopping 
WHERE price>(select price from 'shopping' where name='惠惠')

所得結果以下所示,可見兩種方式所得結果相同:

JOIN

INNER JOIN

內關聯的主要做用是在表中存在至少一個匹配時,就返回結果集,這裏的inner join和join做用相同,因此一塊兒介紹。
下面給出兩張表,分別爲goods和category表:

SELECT * FROM goods INNER JOIN category 
ON goods.id=category.goods_id 
ORDER BY gods.id

結果以下所示:

LEFT JOIN

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回全部的行,即便在右表 (table_name2) 中沒有匹配的行。作項目時建議使用左關聯。可是存在不少表關聯的,一個表對a是左鏈接,但同時對b是右鏈接,這時加上右鏈接,寫起來可能方便一些。
套用一開始的兩張表,進行左關聯查詢:

SELECT goods.*,category.cate_name 
FROM goods LEFT JOIN category 
ON goods.id=category.goods_id 
ORDER BY goods.id

RIGHT JOIN

RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回全部的行,即便在左表 (table_name1) 中沒有匹配的行。套用一開始的兩張表進行右關聯查詢:

SELECT a.goods_name,a.price,b.*
FROM goods as a
RIGHT JOIN category as b
ON a.id=b.goods_id
ORDER BY b.id

對於多表關聯的狀況,就是多加幾條關聯語句。

相關文章
相關標籤/搜索