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;

     

     

  • 相关阅读:
    vsftpd被动模式配置
    CentOS 6.4 服务器版安装教程(超级详细图解)
    CentOS 5.4 安装和卸载桌面
    CentOS 删除桌面环境
    centos x64 vsftpd 530登陆错误问题
    [CentOS] CentOS for vsftpd with MySQL Virtual user
    vsftp 无法启动,500 OOPS: bad bool value in config file for: anonymous_enable
    第二章 创建对话框
    error: no matching function for call to 'Ui::GoToCellDialog::setupUi(QDialog*&)' ui.setupUi(dialog); ^
    第一章 Qt入门
  • 原文地址:https://www.cnblogs.com/Metamorphosis/p/3494911.html
Copyright © 2011-2022 走看看