Join 和 Key
又是为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行join。
数据库中的表通过键将彼此联系起来,主键(primary key)是一个列,在这个列中的每一行的值都是唯一的,在表中,每个主键的值都时唯一的,这样做的目的在不重复每个表中的所有数据的情况下,把表间的数据交叉绑定在一起。SQL教程
请看DUCK表:
DUCK_ID | NAME | YEAR |
---|---|---|
HK234 | DUCK01 | 2016 |
DK244 | DUCK02 | 2016 |
KK134 | DUCK03 | 2016 |
DUCK_ID时DUCK表中的主键,这意味着没有两列数据的主键是相同的
接下来是MEAT表:
MEAT_ID | KIND | PRODUCTION_YEAR | DUCK_ID |
---|---|---|---|
LO23 | DUCK | 2016 | KK134 |
LO93 | DUCK | 2016 | DK244 |
LO03 | DUCK | 2016 | HK234 |
LO66 | DUCK | 2016 | CO134 |
MEAR 表中MEAT_ID时该表的主键,同时表中的DUCK_ID引用DUCK中的主键,
引用两张表
我们可以通过引用两张表的方式,从两个表中获取数据:
SELECT M.MEAT_ID,D.DUCK_ID,M.KIND,M.PRODUCTION_YEAR,D.YEAR FROM MEAT M,DUCK D WHERE M.DUCK_ID=D.DUCK_ID;
结果:
MEAT_ID | DUCK_ID | KIND | PRODUCTION_YEAR | YEAR |
---|---|---|---|---|
LO23 | KK134 | DUCK | 2016 | 2016 |
LO23 | KK134 | DUCK | 2016 | 2016 |
LO23 | KK134 | DUCK | 2016 | 2016 |
SQL JOIN使用join
除了上面的方法,我们也可以使用关键字JOIN来从两个表中获取数据。
SELECT M.MEAT_ID,D.DUCK_ID,M.KIND,M.PRODUCTION_YEAR,D.YEAR FROM MEAT M INNER JOIN DUCK D ON M.DUCK_ID=D.DUCK_ID ORDER BY M.MEAT_ID;
结果:
MEAT_ID | DUCK_ID | KIND | PRODUCTION_YEAR | YEAR |
---|---|---|---|---|
LO03 | HK234 | DUCK | 2016 | 2015 |
LO23 | KK134 | DUCK | 2016 | 2016 |
LO93 | DK244 | DUCK | 2016 | 2016 |
不同的SQL JOIN
除了我们在上面的例子中使用的INNER JOIN(内连接),我们还可以使用其他几种方式连接。
下面是使用JOIN类型,和他们之间的差异。
- JOIN:如果表中至少有一个匹配,则返回行。
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行。
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行,
- FULL JOIN:只要其中一个表中存在匹配,就返回行