关于Oracle数据库的学习记录:
十四、多表查询1.从多张数据表里取出数据范例:统计emp表中的数据量SELECT COUNT(*) FROM emp; ----14行记录范例:统计dept表中的数据量SELECT COUNT(*) FROM dept; ----4行记录范例:实现多表查询SELECT * FROM emp,dept;实现了多表查询,但是查询的结果发现有了惊喜,一共产生了56行的记录SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;CONN sh/sh;SELECT COUNT(*) FROM costs;SELECT COUNT(*) FROM sales;SELECT COUNT(*) FROM costs,sales WHERE sales.prod_id=cost.prod_id;以上的代码已经提供了消除积的条件,但是,执行速度依然很慢,因为总的数据量很大;一定要记住一个原则:多表查询性能一定是很差的,在开发之中应该尽可能回避。但是,在进行列访问的时候发现都使用了表名称,严格来讲,这样也不好,万一表名称很长?所以在进行多表查询的时候建议使用别名范例:使用别名SELECT * FROM emp e,dept d WHERE e.deptno=d.deptno;任何情况下,如果要实现多表查询操作,永远都有一个前提:要关联的数据表一定要有关联字段条件,不存在这些要求,一定不能够使用多表查询范例:要求显示每个雇员的编号、姓名、职位、工资、部门名称、部门位置SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno;范例:要求显示每个雇员的编号、姓名、职位、工资、工资等级**确定要使用的数据表 |-emp表:雇员的编号、姓名、职位、工资 |-salgrade表:工资等级**确定已知的关联字段 |-雇员与工资等级:SELECT e.empno,e.ename,e.job,e.sal,s.grade FROM emp e,salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;范例:查询每个雇员的编号、姓名、职位、工资、工资等级、部门名称**确定要使用的数据表 |-emp表:雇员的编号、姓名、职位、工资 |-salgrade表:工资等级 |-dept表:部门名称**确定已知的关联字段 |-雇员与工资等级:emp.sal BETWEEN salgrade.losal AND salgrade.hisal; |-雇员与部门:emp.deptno=dept.deptno;一般情况下如果是多个消除笛卡尔积的条件都会使用AND进行连接SELECT e.empno,e.ename,e.job,e.sal,s.grade,d.dname FROM emp e,salgrade s,dept d WHERE e.sal BETWEEN s.losal AND s.hisal AND e.deptno=d.deptno;
