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

WBOY
发布: 2016-06-07 16:07:14
原创
916 人浏览过

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

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

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!