龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

MySQL连接用法示例(1)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
以下的文章主要介绍的是 MySQL 连接用法总结,以及MySQL连接的概念,各种连接的具体使用方案,数据库增量同步实例的介绍,如果你对这些相关的内容心存好奇的话,你就可以对以下的

以下的文章主要介绍的是MySQL连接用法总结,以及MySQL连接的概念,各种连接的具体使用方案,数据库增量同步实例的介绍,如果你对这些相关的内容心存好奇的话,你就可以对以下的文章进行阅读了。

1、MySQL连接简介

MySQL支持的连接类型如下:

交叉连接、内连接、外连接(左外MySQL连接和右外连接)、自连接、联合

2、各种连接的使用方法

在演示各种MySQL连接的用法之前,我们先定义如下的数据库表格,以后的演示就使用它们。

  1. mysql> select * from t_users;  
  2. +---------+-----------+---------+---------------------+  
  3. | iUserID | sUserName | iStatus | dtLastTime |  
  4. +---------+-----------+---------+---------------------+  
  5. | 1 | baidu | 0 | 2010-06-27 15:04:03 |  
  6. | 2 | google | 0 | 2010-06-27 15:04:03 |  
  7. | 3 | yahoo | 0 | 2010-06-27 15:04:03 |  
  8. | 4 | tencent | 0 | 2010-06-27 15:04:03 |  
  9. +---------+-----------+---------+---------------------+mysql> select * from t_groups;  
  10. +----------+------------+---------------------+  
  11. | iGroupID | sGroupName | dtLastTime |  
  12. +----------+------------+---------------------+  
  13. | 1 | spring | 2010-06-27 15:04:03 |  
  14. | 2 | summer | 2010-06-27 15:04:03 |  
  15. | 3 | autumn | 2010-06-27 15:04:03 |  
  16. | 4 | winter | 2010-06-27 15:04:03 |  
  17. +----------+------------+---------------------+mysql> select * from t_users_groups;  
  18. +---------+----------+---------------------+  
  19. | iUserID | iGroupID | dtLastTime |  
  20. +---------+----------+---------------------+  
  21. | 1 | 1 | 2010-06-27 15:04:03 |  
  22. | 2 | 1 | 2010-06-27 15:04:03 |  
  23. | 4 | 3 | 2010-06-27 15:04:03 |  
  24. | 6 | 4 | 2010-06-27 15:04:03 |  
  25. +---------+----------+---------------------+1.交叉连接  

2.内连接

3.外连接

外连接有什么特点?简而言之,外连接作用在通过某个key相连接的两张表上,它首先从A表中依次读出每行数据,然后到与之相连接的B表,寻找具有相同key值的记录。如果有匹配行,A和B的对应记录组成新结果行;如果没有,A与一条各字段为NULL的B记录组成新结果行。

到底从哪个表中选择所有行,SQL标准定义了左外连接和右外连接。

左外连接:

  1. mysql> SELECT * FROM t_users LEFT JOIN t_users_groups ON t_users.iUserID=t_users_groups.iUserID;  
  2. +---------+-----------+---------+---------------------+---------+----------+---------------------+  
  3. | iUserID | sUserName | iStatus | dtLastTime | iUserID | iGroupID | dtLastTime |  
  4. +---------+-----------+---------+---------------------+---------+----------+---------------------+  
  5. | 1 | baidu | 0 | 2010-06-27 15:04:03 | 1 | 1 | 2010-06-27 15:04:03 |  
  6. | 2 | google | 1 | 2010-06-27 15:46:51 | 2 | 1 | 2010-06-27 15:04:03 |  
  7. | 3 | yahoo | 1 | 2010-06-27 15:46:51 | NULL | NULL | NULL |  
  8. | 4 | tencent | 0 | 2010-06-27 15:04:03 | 4 | 3 | 2010-06-27 15:04:03 |  
  9. +---------+-----------+---------+---------------------+---------+----------+---------------------+  
  10. 4 rows in set (0.00 sec) 

t_users为上述描述中的A表,t_users_groups为B表。

右外连接:

  1. mysql> SELECT * FROM t_users RIGHT JOIN t_users_groups ON t_users.iUserID=t_users_groups.iUserID;  
  2. +---------+-----------+---------+---------------------+---------+----------+---------------------+  
  3. | iUserID | sUserName | iStatus | dtLastTime | iUserID | iGroupID | dtLastTime |  
  4. +---------+-----------+---------+---------------------+---------+----------+---------------------+  
  5. | 1 | baidu | 0 | 2010-06-27 15:04:03 | 1 | 1 | 2010-06-27 15:04:03 |  
  6. | 2 | google | 1 | 2010-06-27 15:46:51 | 2 | 1 | 2010-06-27 15:04:03 |  
  7. | 4 | tencent | 0 | 2010-06-27 15:04:03 | 4 | 3 | 2010-06-27 15:04:03 |  
  8. | NULL | NULL | NULL | NULL | 6 | 4 | 2010-06-27 15:04:03 |  
  9. +---------+-----------+---------+---------------------+---------+----------+---------------------+  
  10. 4 rows in set (0.00 sec) 

t_users_groups为上述描述中的A表,t_users为B表。

4.自MySQL连接

5.联合

UNION运算符表示联合,它用来把多个SELECT查询的结果连接成一个单独的结果集,但在MySQL连接时去除重复行。可以使用UNION连接尽可能多的SELECT查询,但要谨记两个基本条件。首先,每个SELECT查询返回的字段个数必须相同。第二,每个SELECT查询的字段类型必须依次相同。

我们举个联合例子:

  1. mysql> SELECT iUserID,sUserName,dtLastTime FROM t_users   
  2. -> UNION   
  3. -> SELECT iGroupID,sGroupName,dtLastTime FROM t_groups;  
  4. +---------+-----------+---------------------+  
  5. | iUserID | sUserName | dtLastTime |  
  6. +---------+-----------+---------------------+  
  7. | 1 | baidu | 2010-06-27 15:04:03 |  
  8. | 2 | google | 2010-06-27 15:46:51 |  
  9. | 3 | yahoo | 2010-06-27 15:46:51 |  
  10. | 4 | tencent | 2010-06-27 15:04:03 |  
  11. | 1 | spring | 2010-06-27 15:04:03 |  
  12. | 2 | summer | 2010-06-27 15:04:03 |  
  13. | 3 | autumn | 2010-06-27 15:04:03 |  
  14. | 4 | winter | 2010-06-27 15:04:03 |  
  15. +---------+-----------+---------------------+ 

8 rows in set (0.01 sec)

对UNION的每个SELECT添加ORDER BY子句是没有意义的,如果要排序则必须将其施加到最后的结果集上。比如我们要对上面的例子中的iUserID进行排序,应该使用如下的SQL语句:

  1. mysql> (SELECT iUserID,sUserName,dtLastTime FROM t_users)   
  2. -> UNION   
  3. -> (SELECT iGroupID,sGroupName,dtLastTime FROM t_groups)  
  4. -> ORDER BY iUserID ASC;  
  5. +---------+-----------+---------------------+  
  6. | iUserID | sUserName | dtLastTime |  
  7. +---------+-----------+---------------------+  
  8. | 1 | baidu | 2010-06-27 15:04:03 |  
  9. | 1 | spring | 2010-06-27 15:04:03 |  
  10. | 2 | google | 2010-06-27 15:46:51 |  
  11. | 2 | summer | 2010-06-27 15:04:03 |  
  12. | 3 | yahoo | 2010-06-27 15:46:51 |  
  13. | 3 | autumn | 2010-06-27 15:04:03 |  
  14. | 4 | tencent | 2010-06-27 15:04:03 |  
  15. | 4 | winter | 2010-06-27 15:04:03 |  
  16. +---------+-----------+---------------------+  
  17. 8 rows in set (0.02 sec) 

以上的相关内容就是对MySQL连接与各种连接的使用方法的介绍,望你能有所收获。


精彩图集

赞助商链接