学习目标
- 外部联合
- 内部联合
- 左联合
- 右联合
- 等值联合
- 不等值联合
笛卡尔积 n*m行
如果你在联合表的时候没有使用 WHERE 子句 你执行的其实是笛卡尔联合 也就
是笛卡尔叉积 这种联合会对 FROM 中指出的表进行完全的组合 如果每个表有 200
个记录的话 那么所得到的结果将会有 40000 行 200 *200
等值联合
- 等值联合是在 WHERE 子句中使用等号
- 利用都存在的列,这种联合操作称为等值联合 因为它只显示第一个表中的数据以及第二个表中的 存在于第一个表
中的数值
不等值联合
- 不等值联合则是在 WHERE 子句中使用除了等号以外的其它比较运算符
- 在现实世界中等值联合的使用
要远远多于不等值联合 但是你的编程时可能会遇到使用不等值联合的情况
内部联合与外部联合
这种类型的联合没有 WHERE 子句
- 内部联合 指与个表内的行与本表内的数据相互进行联合,产生的结果行数取决于参加联合的行数
- SELECT P.PARTNUM P.DESCRIPTION P.PRICE O.NAME O.PARTNUM
FROM PART P JOIN ORDERS O ON ORDERS.PARTNUM = 54 - 外部联合指外部联合则是表间的联合
- 外部右联合,它会令 SQL 返回右边表集内的全部记录
SELECT P.PARTNUM P.DESCRIPTION P.PRICE O.NAME O.PARTNUM FROM PART P
RIGHT OUTER JOIN ORDERS O ON ORDERS.PARTNUM = 54 - 外部左联合,与内部联合的结果一样 都是六行 因为你使用的是左联合 PART 表决定返回的行
数 而 PART 表比 ORDERS 表小 所以 SQL 把其余的行数都扔掉了 - 在一些解释器中使用+号来代替外部联合 +号的意思就是 ——显示我的全部内容包括
不匹配的内容。
select e.name e.employee_id ep.salary ep.marital_status from e,ployee_tbl e,
employee_pay_tbl ep
where e.employee_id = ep.employee_id(+) and e.name like ‘%MITH’
这条语句将会联合两个表 标有+号的 employee_id 将会全部显示 包括不满足条件的
记录
自我联合
用于检查已存在的数据是否有错误插入
WHERE F.PARTNUM = S.PARTNUM AND F.DESCRIPTION <> S.DESCRIPTION.