• 多表查询(重点)


    在之前查询之中  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.自然连接

      

  • 相关阅读:
    MSDN RSS Feeds (ZT)
    不錯,今天看到日历了.
    模糊:让你的代码远离偷窥之眼
    .NET中異常發布器的開發(1)(2)(3)
    How To Query Performance Monitor Counters Using a Web Page
    可選參數的Stored Procedure範例.
    Outlook GetCurrent Folder / GetSelectedItems / GetInspectors
    微軟的MS04007补丁有严重问题啊.
    Blog,流行有理由 (zt)
    从VB.Net到VB6.0要小心,关于使用IIF和log求对数函数(串联的小知识)
  • 原文地址:https://www.cnblogs.com/da-peng/p/5178380.html
Copyright © 2020-2023  润新知