關於mysql中的自聯結的通俗理解
(一) sql的概述
(二) mysql的概述
(三) 聯結和自聯結
聯結:其實聯結的意思很容易理解,就是將兩個表的列結合到一起,形成乙個新的表,那麼此時就是說兩個表進行了聯結。因為乙個表的資料可能很有限,為了能夠獲得更多的資料並且將這些列放在一起,那麼此時就需要聯結。聯結一般是需要有聯結欄位的。
自聯結:自聯結字面的意思就是,自己和自己聯結。此時聯結所用到的表只有一張,此時我們可以把自聯結想象成兩張一模一樣的表在進行聯結。
自聯結的原理解釋和可能出現的問題
1.自聯結的原理解釋,為此我準備了兩張一模一樣的**,進行模擬自聯結的進行
**演示
**演示
11)自聯結的一張表的**演示和查詢結果--以下是該錶的字段資訊
2create
table
`customers` (
3 `cust_id` char ( 10 ) not
null,
4 `cust_name` char ( 50 ) not
null,
5 `cust_address` char ( 50 ) default
null,
6 `cust_city` char ( 50 ) default
null,
7 `cust_state` char ( 5 ) default
null,
8 `cust_zip` char ( 10 ) default
null,
9 `cust_country` char ( 50 ) default
null
,10 `cust_contact` char ( 50 ) default
null
,11 `cust_email` char ( 255 ) default
null,12
primary
key( `cust_id` )
13 ) engine = innodb default charset = utf8
**演示
1查詢結果--以下的**是在同一張表上進行的真正的自聯結
2select
c1.cust_name,c1.cust_country
3from
customers c1,customers c2
4where c1.cust_country = c2.cust_country and c2.cust_contact =
'michelle green
';
2)模擬自聯結的兩張表進行聯結的**演示和查詢結果
**演示
1查詢結果--以下**裡面是兩個一樣的表,另外乙個表叫customers_copy是對原表的備份
2select
c1.cust_name,c1.cust_country
3from
customers c1,customers_copy c2
4where c1.cust_country = c2.cust_country and c2.cust_contact =
'michelle green
';
3)總結
我們會發現查詢的結果是一樣的,那麼我們就可以簡單地認為自聯結查詢和兩張一樣的表進行聯結的效果等同,但是其實我不了解其底層實現,所以也不敢說他們肯定是一樣,我只能說可能效果上是相似的。
2.自聯結可能出現的問題
1)自聯結的沒有充分過濾
a 自聯結沒有充分過濾條件的**演示
1演示結果,出現了四個fun4all,其實我們的原表就只有兩個fun4all這樣的結果就是出現了垃圾資訊--以下僅僅使用了cust_name這一包含重複資訊的字段進行了聯結,但是沒有再多加條件進行二次過濾,可能出現笛卡爾積的類似錯誤,得到錯誤的資訊
2select
o1.cust_name,o1.cust_contact,o1.cust_id
3from
customers o1, customers o2
4where o1.cust_name = o2.cust_name;
b 自聯結進行了過濾的**演示
1演示結果,新增了雙重過濾之後,**的結果就更加正確,沒有更多的垃圾或者錯誤的資訊--以下的**也是使用了cust_name作為聯結字段,但是加了乙個過濾條件,那麼得到的結果就更為正確
2select
o1.cust_name,o1.cust_contact,o1.cust_id
3from
customers o1, customers o2
4where o1.cust_name = o2.cust_name and o2.cust_contact =
'jim jones
';
2)總結
如果想要對單個**進行查詢,那麼自聯結其實比自查詢的效率要高很多,當我們要查詢單個表中的資料的時候,查詢又較為複雜的時候,那麼自聯結就能夠派上用場了,但是要注意自聯結的過濾條件和字段的選擇。
mysql中的聯結 MySQL中的聯結表
使用聯結能夠實現用一條select語句檢索出儲存在多個表中的資料。聯結是一種機制,用來在一條select語句中關聯表,不是物理實體,其在實際的資料庫表中並不存在,dbms會根據需要建立聯結,且會在查詢期間一直存在。聯結的本質是第乙個表中符合條件的每一行與第二個表中符合條件的每一行進行配對,假如沒有w...
mysql中的聯結型別
就聊到這吧 下面我也不是很懂。說重點,為什麼使用聯結?如果資料儲存在多個表中,怎麼用一條select語句查詢出資料呢?答案是使用聯結。那mysql中有幾種聯結呢?我這邊搬下課本上的,如果還有歡迎補充!內聯結 等值聯結 先交代測試表的結構!兩張表,products 產品表 與vendors 商表 pr...
mysql使用聯結的好處 Mysql 聯結
聯結 簡介聯結是一種機制,用來在一條select語句中關聯表,聯結是由mysql根據需要而建立的,它存在於select語句的執行當中。在執行資料檢索查詢中使用聯結是sql強大的功能之一,聯結是利用sql的select能執行的最重要的操作,在使用聯結之前,我們必須要了解下關係表。關係表來個栗子說明下 ...