zoukankan      html  css  js  c++  java
  • 多表查询(重点)

    在之前查询之中  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.笛卡尔积只是显示消除,但是它还是在的。尽量回避多表查询尤其是数据量大的时候。

    连接方式:

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

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

      

    SELECT e.empno,e.job,e.mgr,m.empno
    FROM emp e, emp m
    WHERE e.mgr = m.empno(+) ;

    //(+)只适用于Oracle

    其他的使用

    SQL1999

    1.交叉连接

      产生笛卡尔积  

    SELECT *
    FROM emp CROSS JOIN dept ;

     2.自然连接

      

  • 相关阅读:
    SVN中trunk、branches、tag的使用
    svn建立分支和svn代码合并的操作方法
    SVN分支的合并和同步
    iOS开发--即时通讯
    iOS 开发--开源图片处理圆角
    ios开发--网易滚动导航栏
    ios开发--高德地图SDK使用简介
    大型网站架构演变和知识体系
    Nginx配置文件nginx.conf中文详解
    nginx+apache+php+mysql服务器集群搭建
  • 原文地址:https://www.cnblogs.com/da-peng/p/5178380.html
Copyright © 2011-2022 走看看