多表查询
一、为什么使用多表连接
因为在实际系统中,一张表无法涵盖业务的所有信息,即使能,使用一张表来存储所有业务数据也会使数据变得难以维护,提高耦合性,失去可维护性。比如一个超市系统将会员表,库存表,进货表,售价表糅合成一张表,相信没有任何管理员愿意去使用这种表。
二、笛卡尔积
1.笛卡尔积是:
第一个表中的所有行和第二个表中的所有行都发生连接。
2.笛卡尔积在下列情况产生:
(1)连接条件被省略;
(2)连接条件是无效的;
3.为了避免笛卡尔积的产生,通常需要在WHERE子句中包含一个有效的连接条件。
4.笛卡尔积的写法:
SELECT EMP.EMPNO, EMP.ENAME, EMP.DEPTNO, DEPT.DEPTNO, DEPT.LOC
FROM EMP, DEPT;
三、连接查询
多表连接的写法
1.分析要查询的列都来自于哪些表,构成FROM子句;
2.分析这些表之间的关联关系,如果表之间没有直接关联关系,而是通过另一个中间表关联,则也要在FROM子句中补充中间关联表;
3.接下来在WHERE子句中补充表之间的关联关系,通常N个表,至少要有N-1个关联关系;
4.分析是否还有其它限制条件,补充到WHERE子句的表关联关系之后,作为限制条件;
5.根据用户想要显示的信息,补充SELECT子句。
6.分析是否有排序要求,如果排序要求中还涉及到其它表,则也要进行第2步补充排序字段所在的表,并且添加表之间的关联关系;
1.等值连接。两个表中的相同字段可以使用“=”进行连接,作为限制条件,不过要使用表名作为前缀
练习1
1-1写一个查询,显示所有员工姓名,部门编号,部门名称
SELECT ENAME,EMP.DEPTNO,DNAME
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO