1 联结的作用和分类
我们都知道Mysql数据库是一种关系型数据库,这种数据库的最大特点之一是每个数据表之间都通过外键相关联。关系型数据库的优点可以避免很多不必要的重复,例如我们有一些产品和供应商的数据字段,如果有一个供应了很多产品,则会在产品后面重复写入很多次供应商,从而造成数据的冗余。另外,使用两个数据表存储产品和供应商,在更改供应商信息时,只需更改一次即可。
联结是一种关联两个或多个数据表时的一种操作,具体可以分为笛卡尔积(叉联结)、内联结、自联结、外联结,外联结又可以分为左外联结和右外联结。
2 笛卡尔积
笛卡尔积是一种类似于广播的联结方式,我们接下来的均以“mysql必知必会”一书中的数据表举例。
select prod_id, vendors.vend_id from products, vendors;
输出:
+---------+---------+
| prod_id | vend_id |
+---------+---------+
| ANV01 | 1001 |
| ANV01 | 1002 |
| ANV01 | 1003 |
| ANV01 | 1004 |
| ANV01 | 1005 |
| ANV01 | 1006 |
| ANV02 | 1001 |
| ANV02 | 1002 |
| ANV02 | 1003 |
| ANV02 | 1004 |
| ANV02 | 1005 |
| ANV02 | 1006 |
| ANV03 | 1001 |
| ANV03 | 1002 |
| ANV03 | 1003 |
| ANV03 | 1004 |
| ANV03 | 1005 |
| ANV03 | 1006 |
| FU1 | 1001 |
| FU1 | 1002 |
| FU1 | 1003 |
| FU1 | 1004 |
| FU1 | 1005 |
| FU1 | 1006 |
| OL1 | 1001 |
| OL1 | 1002 |
| OL1 | 1003 |
| OL1 | 1004 |
| OL1 | 1005 |
| OL1 | 1006 |
| DTNTR | 1001 |
| DTNTR | 1002 |
| DTNTR | 1003 |
| DTNTR | 1004 |
| DTNTR | 1005 |
| DTNTR | 1006 |
| FB | 1001 |
| FB | 1002 |
| FB | 1003 |
| FB | 1004 |
| FB | 1005 |
| FB | 1006 |
| FC | 1001 |
| FC | 1002 |
| FC | 1003 |
| FC | 1004 |
| FC | 1005 |
| FC | 1006 |
| SAFE | 1001 |
| SAFE | 1002 |
| SAFE | 1003 |
| SAFE | 1004 |
| SAFE | 1005 |
| SAFE | 1006 |
| SLING | 1001 |
| SLING | 1002 |
| SLING | 1003 |
| SL