轉 自鏈接、外鏈接和自鏈接查詢

表1:teachersql

+----+--------+
| id | name   |
+----+--------+
|  1 | 劉德華 |
|  2 | 張學友 |
|  4 | 黎明   |
+----+--------+

表2:studentcode

+----+------+--------+
| id | name | tea_id |
+----+------+--------+
|  1 | 張三 |      1 |
|  2 | 李四 |      1 |
|  3 | 王五 |      1 |
|  4 | 趙六 |      2 |
|  5 | 孫七 |      2 |
+----+------+--------+

1.內鏈接:在每一個表中找出符合條件的共有記錄。[x inner join y on...]
第一種寫法:(至關於多表查詢,用的是where!)table

select t.*,s.* from teacher t,student s where t.id=s.tea_id;

第二種寫法:(inner省略了)class

select t.*,s.* from teacher t join student s on t.id=s.tea_id;

第三種寫法:軟件

select t.*,s.* from teacher t inner join student s on t.id=s.tea_id;
+----+--------+----+------+--------+

| id | name   | id | name | tea_id |

+----+--------+----+------+--------+

|  1 | 劉德華 |  1 | 張三 |      1 |

|  1 | 劉德華 |  2 | 李四 |      1 |

|  1 | 劉德華 |  3 | 王五 |      1 |

|  2 | 張學友 |  4 | 趙六 |      2 |

|  2 | 張學友 |  5 | 孫七 |      2 |

+----+--------+----+------+--------+


2.外鏈接有三種方式:左鏈接,右鏈接和全鏈接。
2.1 左鏈接:根據左表的記錄,在被鏈接的右表中找出符合條件的記錄與之匹配
找不到與左表匹配的,用null表示。[x left [outer] join y on...]
第一種寫法:select

select t.*,s.* from teacher t left join student s on t.id=s.tea_id;


第二種寫法:查詢

select t.*,s.* from teacher t left outer join student s on t.id=s.tea_id;

 

+----+--------+------+------+--------+

| id | name   | id   | name | tea_id |

+----+--------+------+------+--------+

|  1 | 劉德華 |    1 | 張三 |      1 |

|  1 | 劉德華 |    2 | 李四 |      1 |

|  1 | 劉德華 |    3 | 王五 |      1 |

|  2 | 張學友 |    4 | 趙六 |      2 |

|  2 | 張學友 |    5 | 孫七 |      2 |

|  4 | 黎明   | NULL | NULL |   NULL |

+----+--------+------+------+--------+

 


2.2 右鏈接:根據右表的記錄,在被鏈接的左表中找出符合條件的記錄與之匹配,
找不到匹配的,用null填充。[x right [outer] join y on...]
第一種寫法:tab

select t.*,s.* from teacher t right join student s on t.id=s.tea_id;


第二種寫法:co

select t.*,s.* from teacher t right outer join student s on t.id=s.tea_id;

 

+------+--------+----+------+--------+

| id   | name   | id | name | tea_id |

+------+--------+----+------+--------+

|    1 | 劉德華 |  1 | 張三 |      1 |

|    1 | 劉德華 |  2 | 李四 |      1 |

|    1 | 劉德華 |  3 | 王五 |      1 |

|    2 | 張學友 |  4 | 趙六 |      2 |

|    2 | 張學友 |  5 | 孫七 |      2 |

+------+--------+----+------+--------+


2.3 全鏈接:返回符合條件的全部表的記錄,沒有與之匹配的,用null表示(結果是左鏈接和右鏈接的並集)
第一種寫法:join

select t.*,s.* from teacher t full join student s on t.id=s.tea_id;


第二種寫法:

select t.*,s.* from teacher t full outer join student s on t.id=s.tea_id;


3 交叉鏈接(結果是笛卡爾積)

select t.*,s.* from teacher t cross join student s;

等效於:

select t.*,s.* from teacher t,student s;
+----+--------+----+------+--------+
| id | name   | id | name | tea_id
| +----+--------+----+------+--------+
|  1 | 劉德華 |  1 | 張三 |      1 |
|  2 | 張學友 |  1 | 張三 |      1 |
|  4 | 黎明   |  1 | 張三 |      1 |
|  1 | 劉德華 |  2 | 李四 |      1 |
|  2 | 張學友 |  2 | 李四 |      1 |
|  4 | 黎明   |  2 | 李四 |      1 |
|  1 | 劉德華 |  3 | 王五 |      1 |
|  2 | 張學友 |  3 | 王五 |      1 |
|  4 | 黎明   |  3 | 王五 |      1 |
|  1 | 劉德華 |  4 | 趙六 |      2 |
|  2 | 張學友 |  4 | 趙六 |      2 |
|  4 | 黎明   |  4 | 趙六 |      2 |
|  1 | 劉德華 |  5 | 孫七 |      2 |
|  2 | 張學友 |  5 | 孫七 |      2 |
|  4 | 黎明   |  5 | 孫七 |      2 |
+----+--------+----+------+--------+


5自鏈接:鏈接的表都是同一個表,一樣能夠由內鏈接,外鏈接各類組合
方式,按實際應用去組合。

SELECT a.*,b.* FROM table_1 a,table_1 b WHERE a.[name]=b.[name]

--鏈接的兩表是同一個表,別稱不同

SELECT a.*,b.* FROM table_1 a LEFT JOIN table_1 b ON a.[name]=b.[name]

--左鏈接寫法

----------------------------------------------------------

易銷寶(www.exiao800.com),企業專屬的的定貨平臺,網上定貨系統,加盟商定貨軟件,訂單管理系統
相關文章
相關標籤/搜索