笛卡尔集
- 多表即数据存放在多张表中,这在实际应用中很常见。
- 笛卡尔集:
行数 = table1的行数 * table2的行数;
列数 = table1的列数 + table2的列数。 - 操作笛卡尔集时,应避免使用“笛卡尔全集”,因为里面含有大量错误信息。因此应首先过滤(
where
)(只要操作多表,一定要使用where
语句过滤)。这需要使用连接条件。 - 多表查询就是按照给定的连接条件,从笛卡尔全集中选出正确的结果。
- Oracle中,连接条件分为:等值连接、不等值连接、外连接、自连接。
等值连接
where
子句后的条件是“=
”则为等值连接,否则为不等值连接。
//查询员工号、姓名、月薪、部门名称:
//表emp中只有前三项信息,部门名称信息在表dept中,且这两张表中都有部门号
//通常在多表查询时会给每张表取个别名,使用“表别名.列名”获取数据:
select e.empno, e.ename, e.sal, d.dname
from emp e, dept d
where e.deptno = d.deptno;
//注意:这里仅涉及两张表,因此过滤条件只有一个;
//若有N张表,则where后面的条件至少应有N-1个。
//这里,语句的解析顺序并不是按书写顺序从上到下,而是数据库设定的,但显然不是按书写顺序
//所以,在后面给两张表取的别名可以在第一行就使用<