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