左连接、右连接与内连接的区别

 

左连接、右连接与内连接的区别  

2012-12-24 11:02:42|  分类: mysql数据库|举报|字号 订阅

 
 
左连接、右连接与内连接的区别:

---------创建两张表-------------男生表和女生表,各两个字段,姓名和配偶的编号--------
mysql> create table boy(
    -> bname varchar(10) not null default '',
    -> spouse char(1) not null default ''
    -> )engine myisam charset utf8;
Query OK, 0 rows affected (0.10 sec)
 
mysql> create table girl(
    -> gname varchar(10) not null default '',
    -> spouse char(1) not null default ''
    -> )engine myisam charset utf8;
Query OK, 0 rows affected (0.09 sec)
 
----------给两张表添加数据------------------------------------------
mysql> select * from boy;
+--------+--------+
| bname  | spouse |
+--------+--------+
| 张三   | A      |
| 李四   | B      |
| 王五   | C      |
| 屌丝    | D      |
| 高富帅 | E      |
+--------+--------+
5 rows in set (0.00 sec)
 
mysql> select * from girl;
+--------+--------+
| gname  | spouse |
+--------+--------+
| 小倩   | A      |
| 大乔   | C      |
| 虞美人 | B      |
| 张柏芝 | E      |
| 阿娇   | E      |
| 剩女   | F      |
+--------+--------+
5 rows in set (0.00 sec)
 
观察:
boy表中,屌丝没有配偶,而高富帅有两个配偶,其它人一个一个配偶
girl表中,剩女没有配偶
 
----------------------使用左连接查询,条件为配偶的编号相等-----------------------------------
mysql> select bname,boy.spouse,gname,girl.spouse from boy left join girl on boy.spouse=girl.spouse;
+--------+--------+--------+--------+
| bname  | spouse | gname  | spouse |
+--------+--------+--------+--------+
| 张三   | A      | 小倩   | A      |
| 李四   | B      | 虞美人 | B      |
| 王五   | C      | 大乔   | C      |
| 屌丝    | D      | NULL   | NULL   |
| 高富帅 | E      | 张柏芝 | E      |
| 高富帅 | E      | 阿娇   | E      |
+--------+--------+--------+--------+
6 rows in set (0.01 sec)
 
---------------使用右连接查询,条件为配偶的编号相等---------------------------------------
mysql> select bname,boy.spouse,gname,girl.spouse from boy right join girl on boy.spouse=girl.spouse;
+--------+--------+--------+--------+
| bname  | spouse | gname  | spouse |
+--------+--------+--------+--------+
| 张三   | A      | 小倩   | A      |
| 王五   | C      | 大乔   | C      |
| 李四   | B      | 虞美人 | B      |
| 高富帅 | E      | 张柏芝 | E      |
| 高富帅 | E      | 阿娇   | E      |
| NULL   | NULL   | 剩女   | F      |
+--------+--------+--------+--------+
6 rows in set (0.00 sec)
 
-----------------------使用内连接查询,条件为配偶的编号相等---------------------------
mysql> select bname,boy.spouse,gname,girl.spouse from boy inner join girl on boy.spouse=girl.spouse;
+--------+--------+--------+--------+
| bname  | spouse | gname  | spouse |
+--------+--------+--------+--------+
| 张三   | A      | 小倩   | A      |
| 王五   | C      | 大乔   | C      |
| 李四   | B      | 虞美人 | B      |
| 高富帅 | E      | 张柏芝 | E      |
| 高富帅 | E      | 阿娇   | E      |
+--------+--------+--------+--------+
5 rows in set (0.00 sec)
 
=====结论======
(1)左连接 boy left join girl on boy.spouse=girl.spouse:以boy表(男生表)为准,相当于主持人喊一声——所有的男生把牵着自己配偶的手,到舞台上来;有几个配偶都一起牵手上来;没有配偶的男生,拿着写着null的牌子,也一起上来。
(2)右连接与左连接正好相反
(3)内连接,相当于没有配偶的,就不要上来了。
posted @ 2015-01-23 14:12  ken.s  阅读(261)  评论(0)    收藏  举报