Heim  >  Artikel  >  Datenbank  >  深入SELECT语句的查询功能(二)(1)

深入SELECT语句的查询功能(二)(1)

WBOY
WBOYOriginal
2016-06-07 16:07:14926Durchsuche

上接《深入SELECT语句的查询功能(一)》 检索语句与多个表的连接 SELECT语句不仅可以从单个表中检索数据,也可以通过连接多个表来检索数据。这里将介绍全连接和左连接的作用。 我们创建两个表作为例子。 mysql CREATE TABLE first- (- id TINYINT,- first_n

上接《深入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     |

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:MySQL的密码设置Nächster Artikel:MySQL备份和恢复数据表的方法(1)