zoukankan      html  css  js  c++  java
  • SELETE复杂查询——多表连接查询

        在SQL中,操作多个表的数据称为连接。在oracle中有两种连接格式,ANSI SQL连接格式和Oralce特有的连接格式。一般where子句中的连接条件是数据表中指定用于连接的字段。在一个表中指定外键,在另一个表中指定与其相关联的主键。

    一、内连接

    语法:select  table1.column,table2.column

             From  table1,table2

             Where  table.column1 = table2.column2;

         1、如:scott方案中emp中包含了deptno这个字段,为显示部门名称。可以使用连接查询从emp表和dept表中获取字段值。

    Select emp.empno, emp.ename, emp.job, emp.hiredate, emp.sal, dept.dname from emp,dept  where  emp.deptno = dept.deptno;

    在dept表中,deptno是主键列,emp中是deptno的外键列。两者建立了主外键的关联。

         2、如查询部门20的员工信息:

    Select emp.empno, emp.ename, emp.job, emp.hiredate, emp.sal, dept.dname from emp,dept  where  emp.deptno = dept.deptno  and emp.deptno = 20;

         3、设置表别名,简化SQL代码:

    Select  x.empno, x.ename, x.job, x.hiredate, x.sal, y.dname  from  emp x,dept y  where  emp.deptno = dept.deptno  and  emp.deptno = 20;

         4、使用内连接的ANSI SQL表示方式如下:

    Select  x.empno, x.ename, x.job, x.hiredate, x.sal, y.dname  from  emp x  inner join  dept y  on  emp.deptno = dept.deptno  where  emp.deptno = 20;

    Inner join连接左右两个表,on字句指定两个标的连接条件,where字句来指定条件字句。

     二、外连接

    1、外连接分为两类,分别是保存左侧表内容的左外连接和保存右侧表内容的右外连接。

    语法如下:

    -------左外连接:当(+)出现在等号左边时,将返回table2表的所有数据

    SELECT table1.column,table2.column

    FROM table1,table2

    WHERE table1.column(+)=tables2.column;

    -------右外连接:当(+)出现在等号右边时,将返回table1表的所有数据

    SELECT table1.column.table2.column

    FROM table1,table2

    WHERE table1.column=table2.column(+);

    如:为返回emp表中的所有数据,将使用右外连接来实现

    SELECT x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

    FROM emp x,dept y

    WHERE x.deptno = y.deptno(+);

    2.使用ANSI SQL的连接、右连接及全连接语法

    SELECT  table1.column,table2.column

    FROM  table1  LEFT/RIGHT/FULL  OUTER  JOIN  table2

    ON  table1.column_name = table2.column_name;

    如:左连接

    SELECT  x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

    FROM  emp x LEFT OUTER JOIN dept y ON x.depno=y.deptno;

    全连接中除了包含连接的数据外,还包含表中不符合连接条件的数据

    三、交叉连接

     

    交叉连接是A表中记录行和B表中的记录行数相乘得到的笛卡尔积,如果在进行连接查询时不指定任何连接条件,将产生交叉查询。

    如:

    SELECT x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

    FROM emp x,dept y;

    ANSI SQL标准用CROSS JOLN L来实现交叉查询

    SELECT  x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

    FROM  emp x CROSS JOIN dept y;

    四、自然连接

    如果两个表中有相同的名字和数据类型的列(必须同时满足),那么可以使用自然连接来自动匹配数据类型和列名。使用NATURAL JOIN满足

    SELECT  x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

    FROM  emp x  NATURAL JOIN  dept y;

     

     

  • 相关阅读:
    13-02 Java 数组高级算法,Arrays类
    从0移植uboot (二) _uboot启动流程分析
    Linux input子系统编程、分析与模板
    跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架
    Linux驱动技术(八) _并发控制技术
    Linux驱动技术(七) _内核定时器与延迟工作
    Linux驱动技术(六) _内核中断
    Linux驱动技术(五) _设备阻塞/非阻塞读写
    Linux驱动技术(四) _异步通知技术
    Linux驱动技术(三) _DMA编程
  • 原文地址:https://www.cnblogs.com/Metamorphosis/p/3494911.html
Copyright © 2011-2022 走看看