联结(Join)表
MySQL是一种关系数据库,所谓关系就是指把数据分解为多个表,一个类据一>个表。各表之间通过某些常用的值(即关系)相关联
就比如说有一个表储存了供应商信息,供应商ID为主键。另一个表储存了一些商品的信息,但是也需要知道商品相应的供应商信息。那么可以给商品设置一个供应商ID>,称为外键,通过这个外键来去供应商表查询供应商的信息
外键(foreign key): 外键为某个表中的一列,它包含另一个表的主键值,定>义了两表的关系
就比如说,有两张表:
mysql> select * from product;
+------+---------+
| name | vent_id |
+------+---------+
| KOH | 1 |
| NaOH | 2 |
| KF | 1 |
| NaF | 3 |
+------+---------
mysql> select * from vent;
+---------+----------+
| vent_id | name |
+---------+----------+
| 1 | wanqing |
| 2 | alading |
| 3 | guoyao |
| 4 | maikelin |
+---------+----------+
内部联结(Inner Join)
mysql> SELECT product.name, product.vent_id,vent.name
-> FROM product,vent
-> WHERE product.vent_id=vent.vent_id;
+------+---------+---------+
| name | vent_id | name |
+------+---------+---------+
| KF | 1 | wanqing |
| KOH | 1 | wanqing |
| NaOH | 2 | alading |
| NaF | 3 | guoyao |
+------+---------+---------+
可以看到通过使用WHERE设置过滤条件,实现了两张表的联结。这种联结是等>值联结,也被称为内部联结(Inner Join)
上述带WHERE语句的更加标准的写法是:
mysql> SELECT product.name, product.vent_id,vent.name
-> FROM product INNER JOIN vent
-> ON product.vent_id=vent.vent_id;
+------+---------+---------+
| name | vent_id | name |
+------+---------+---------+
| KF | 1 | wanqing |
| KOH | 1 | wanqing |
| NaOH | 2 | alading |
| NaF | 3 | guoyao |
+------+---------+---------+
外部联结(Outer Join)
与内部联结不同的是,外部联结会包括没有联结的行,也就是会出现NULL。使用时必须指定是LEFT OUTER JOIN还是RIGHT OUTER JOIN,分别表示外部联结左边还是右边的表