程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 深入SELECT語句的查詢功能(二)(1)

深入SELECT語句的查詢功能(二)(1)

編輯:MySQL綜合教程

上接《深入SELECT語句的查詢功能一)》

檢索語句與多個表的連接

SELECT語句不僅可以從單個表中檢索數據,也可以通過連接多個表來檢索數據。這裡將介紹全連接和左連接的作用。

我們創建兩個表作為例子。

mysql> CREATE TABLE first
-> (
-> id TINYINT,
-> first_name CHAR(10)
-> );

錄入如下數據:

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

| id   | first_name|

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

|    1 | Tom       |

|    2 | Marry     |

|    3 | Jarry     |

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

mysql> CREATE TABLE last
-> (
-> id TINYINT,
-> last_name CHAR(10)
-> );


錄入數據

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

| id   | last_name |

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

|    2 | Stone     |

|    3 | White     |

|    4 | Donald    |

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

全連接

全連接:在檢索時指定多個表,將每個表用都好分隔,這樣每個表的數據行都和其他表的每行交叉產生所有可能的組合,這樣就是一個全連接。所有可能的組和數即每個表的行數之和。

那麼觀察下面的檢索的結果:

mysql> SELECT * FROM first,last;

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

| id   | first_name | id   | last_name |

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

|    1 | Tom        |    2 | Stone     |

|    2 | Marry      |    2 | Stone     |

|    3 | Jarry      |    2 | Stone     |

|    1 | Tom        |    3 | White     |

|    2 | Marry      |    3 | White     |

|    3 | Jarry      |    3 | White     |

|    1 | Tom        |    4 | Donald    |

|    2 | Marry      |    4 | Donald    |

|    3 | Jarry      |    4 | Donald    |

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

你可以看到輸出的結果集中共有3×3=9 行,這就是全連接的結果。

你也可以這樣使用SQL語句:

mysql> SELCT first.*,last.* FROM first,last;

輸出結果與上面的例子相同,並無二致。記錄集的輸出的排序是以FROM子句後的表的順序進行,即先排列位置靠前的表,即使你改變記錄集中列的顯示順序,例如下面的例子:

mysql> SELECT last.*,first.* FROM first,last;

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

| id   | last_name | id   | first_name |

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

|    2 | Stone     |    1 | Tom        |

|    2 | Stone     |    2 | Marry      |

|    2 | Stone     |    3 | Jarry      |

|    3 | White     |    1 | Tom        |

|    3 | White     |    2 | Marry      |

|    3 | White     |    3 | Jarry      |

|    4 | Donald    |    1 | Tom        |

|    4 | Donald    |    2 | Marry      |

|    4 | Donald    |    3 | Jarry      |

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

上面的例子是兩個非常小的表的例子,如果是幾個非常大的表的全連接,例如,兩個行數分別為1000的表,這樣的連接可以產生非常大的結果集合1000×1000=100萬行。而實際上你並不需要這麼多行的結果,通常你需要使用一個WHERE從句來限制返回的記錄集的行數:

mysql> SELECT * FROM first,last WHERE first.id= last.id;

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

| id   | first_name | id   | last_name |

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

|    2 | Marry      |    2 | Stone     |

|    3 | Jarry      |    3 | White     |

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


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved