MySQL多表联查

前一段时间在和一个程序员同行闲聊的时候,谈到了MySQL的一些东西。谈完之后他说你对MySQL真是了解啊!我愣了一下,表面故作谦虚说:”where, where!”,实际心里暗暗吃惊:“我勒个去,我才知道一点皮毛啊。。。”。

他说他一直没有弄明白MySQL中的多表联查,特别是对于JOIN、INNER JOIN、LEFT JOIN以及RIGHT JOIN的概念很是模糊。这里就整理一下。

先建立两张表并初始化一点数据:

dancer:
mysql> select * from dancer;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | Lily  |   22 | 
|  2 | PSY   |   46 | 
|  3 | Jolin |   26 | 
+----+-------+------+

review:
mysql> select * from review;
+----+-----------+-------+
| id | dancer_id | score |
+----+-----------+-------+
|  1 |         2 |     3 | 
|  2 |         1 |     4 | 
|  3 |         5 |     2 | 
+----+-----------+-------+

以上数据的特点就是dancer中的Jolin没有review,而review中的第三条没有对应的dancer。也就是说数据并不是一一对应的,这种情况在实际情况中是一种普遍的存在。

那么现在我要获得dancer以及其review的数据,就可以用JOIN来实现多表联查。

1. JOIN
  1. SELECT d.idd.named.ager.score FROM dancer AS d JOIN reviewAS r ON d.id=r.dancer_id;
+----+------+------+-------+
| id | name | age  | score |
+----+------+------+-------+
|  2 | PSY  |   46 |     3 | 
|  1 | Lily |   22 |     4 | 
+----+------+------+-------+
2. INNER JOIN
  1. SELECT d.idd.named.ager.score FROM dancer AS d INNER JOINreview AS r ON d.id=r.dancer_id;
+----+------+------+-------+
| id | name | age  | score |
+----+------+------+-------+
|  2 | PSY  |   46 |     3 | 
|  1 | Lily |   22 |     4 | 
+----+------+------+-------+

INNER JOINJOIN是一样的,会查询出两个表中一一关联的记录,舍去没有对应数据的记录。

3. LEFT JOIN
  1. SELECT d.idd.named.ager.score FROM dancer AS d LEFT JOINreview AS r ON d.id=r.dancer_id;
+----+-------+------+-------+
| id | name  | age  | score |
+----+-------+------+-------+
|  1 | Lily  |   22 |     4 | 
|  2 | PSY   |   46 |     3 | 
|  3 | Jolin |   26 |  NULL | 
+----+-------+------+-------+

LEFT JOIN保留了左边的表dancer的记录,不管右边的表review是否有对应的数据。

4. RIGHT JOIN
  1. SELECT d.idd.named.ager.score FROM dancer AS d RIGHT JOINreview AS r ON d.id=r.dancer_id;
+------+------+------+-------+
| id   | name | age  | score |
+------+------+------+-------+
|    2 | PSY  |   46 |     3 | 
|    1 | Lily |   22 |     4 | 
| NULL | NULL | NULL |     2 | 
+------+------+------+-------+

RIGHT JOIN就和LEFT JOIN相反。

其实就这么简单。

SQL JOIN

SQL JOIN

posted @ 2013-06-09 15:01  chen1706  阅读(146)  评论(0)    收藏  举报