码迷,mamicode.com
首页 > 其他好文 > 详细

多表查询(重点)

时间:2016-02-02 19:48:34      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

在之前查询之中  from  子句之后只有一个数据表,所谓的多表查询是同时从多张数据表中取出数据实现查询

COUNT(*)统计一个表格的数据量

SELECT COUNT(*) FROM EMP ;

将emp和dept表多表查询

如果使用这样的语句查询:

SELECT * FROM EMP ,DEPT ;

这样查出的是 emp*dept的表格

所以要这样:

SELECT * FROM EMP ,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO ;

虽然消除了笛卡尔积,但是笛卡尔积依然存在

如果表格名称过长,往往会为其定义一个别名,

SELECT * FROM EMP E ,DEPT D WHERE E.DEPTNO = D.DEPTNO ;

范例,

1.要求查出每个雇员的编号,名字,职位,工资,部门,部门名称

  -选择数据表

    emp表,dept表。

  -确定已知的关联条件

    雇员和部门关联  emp.deptno = dept.deptno ;

第一步,查询每个雇员的编号。。。。

SELECT e.empno, e.ename ,e.job ,e.deptno  FROM emp e ;

第二步,加入部门表,要增加消除笛卡尔积的条件:

SELECT e.empno, e.ename ,e.job ,e.deptno  ,d.dname,d.loc FROM emp e ,dept d
WHERE e.deptno = d.deptno;

 

 

2.查询每个雇员的编号,姓名,工资,雇佣日期,工资等级

  -两个表

    emp和salgrade

  -关联字段

    emp.sal BETWEEN salgrade.losal AND salgrade.hisal ;

SELECT e.empno,e.ename,e.sal,s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal ;

3.查询雇员的编号,姓名,职位,雇佣日期,工资,工资等级,所在部门及位置

  -emp

  -dept

  -salgrade

  关联条件

  emp.sal BETWEEN salgrade.losal AND salgrade.hisal ;

  AND  emp.deptno = dept.deptno ;

 

说明:1.如果使用NOT IN有了null则表示不为空,有些字段是永恒不能为空的,如果表很庞大,则直接造成死机。

   2.笛卡尔积只是显示消除,但是它还是在的。尽量回避多表查询尤其是数据量大的时候。

 

 

 

 

连接方式:

内连接:等值连接,在之前的所有查询都是内连接

外链接:左外连接,右外连接,全外连接

在emp表格中增加一个没有部门的数据:

此时新增加的数据部门为空

:观察内连接,等值连接。

多表查询(重点)

标签:

原文地址:http://www.cnblogs.com/da-peng/p/5178380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!