![ea18ff594cfa6103d9abd2654d20b276.png](https://img-blog.csdnimg.cn/img_convert/ea18ff594cfa6103d9abd2654d20b276.png)
笔记对应书本的十六至十八章
「written by Talaxy on 3/23/20」
使用表别名
除了列名和计算字段外,SQL还允许给表名起别名,比如:
select 列一, 列二
from 表一 as p1, 表二 as p2, 表三 as p3
where p1.列三 = p2.列三
and p3.列四 = p2.列四
and 列五 = 'XXX'
表别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机
使用不同类型的联结
自联结
如果你想找出生产过"商品一"的所有厂商,然后列出这些厂商所生产的产品信息:
select 商品ID, 商品名 from 表
where 商品厂商 = (select 商品厂商 from 表
where 商品名 = "商品一");
而使用自联结可以这么写:
select p1.商品ID, p1.商品名
from 表 as p1, 表 as p2
where p1.商品厂商 = p2.商品厂商
and p2.商品ID = "商品一";
虽然两个方法结果是相同的,但有时候处理联结远比处理子查询快得多。
自然联结
其实自然联结和内部联结一样,只是不允许出现相同的列。系统不会帮你自然联结(过去的MySQL有此功能),只能通过自己手动联结这些互不相同的列。事实上,可能我们建立的每个内部联结都是自然联结。
外部联结
在对两个表(比如 表A 和 表B)进行联结时,我们可能会遇到 在表B中找不到与表A(的某一行)相关联的一行 的情况。使用内部联结或者自然联结时,会直接抛弃表A中的这类行,而在外部联结,会保留这类行,并对行中B列的值标记为NULL。
比如