zoukankan      html  css  js  c++  java
  • ORACLE 第4节 多表查询

    学习目标:

    •使用等值不等值连接在SELECT语句中查询多个表中的数据。
    •使用自连接
    使用外连接查询不满足连接条件的数据


    Oracle连接


    等值连接:

    使用连接在多个表中查询数据。

    SELECT  table1.column, table2.column

    FROM  table1, table2

    WHERE  table1.column1table2.column2;

    WHERE 子句中写入连接条件。
    在表中有同样列时。在列名之前加上表名前缀

    两个表的连接
     select e.employee_id,e.last_name,d.department_id
     from employees e,departments d
    where e.department_id = d.department_id

    三个表的连接
     select e.employee_id,e.last_name,d.department_id,l.city
     from employees e,departments d,locations l
     where e.department_id = d.department_id and
    d.location_id = l.location_id


    连接 n个表,至少须要n-1个连接条件

    比如:连接三个表,至少须要两个连接条件。


    自连接:
    select emp.last_name,manager.last_name
    from employees emp,employees manager
    where emp.manager_id = manager.employee_id and emp.last_name = 'Chen'

    非等值连接:

    select e.last_name,e.salary,j.grade_level
    from employees e,job_grades j
    where e.salary between j.lowest_sal and j.highest_sal

    内连接和外连接:

    内连接: 合并具有同一列的两个以上的表的行, 结果集中不包括一个表与还有一个表不匹配的行
    外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这样的连接称为左(或右)外连接

    没有匹配的行时, 结果表中对应的列为空(NULL). 外连接的 WHERE子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符,即用圆括号括起来的加号(+)

    --左外连接
    select e.employee_id,e.last_name,d.department_name
    from employees e,departments d
    where e.department_id = d.department_id(+)

    --右外连接
    select e.employee_id,e.last_name,d.department_name
    from employees e,departments d
    where e.department_id(+) = d.department_id


    使用SQL: 1999语法连接:
    使用连接从多个表中查询数据:
    SELECT table1.column, table2.column
    FROM  table1
    [CROSS JOINtable2] |
    [NATURAL JOINtable2] |
    [JOINtable2 USING(column_name)] |
    [JOINtable2 ON(table1.column_name = table2.column_name)] |
    [LEFT|RIGHT|FULL OUTER JOINtable2 ON(table1.column_name =table2.column_name)];
    自然连接:
    •NATURALJOIN 子句,会以两个表中具有同样名字的列为条件创建等值连接。


    •在表中查询满足等值条件的数据。


    假设仅仅是列名同样而数据类型不同。则会产生错误。



    select e.employee_id,e.last_name,d.department_name
    from employees e natural join departments d


    使用USING子句创建连接:

    •在NATURAL JOIN 子句创建等值连接时,能够使用 USING子句指定等值连接中须要用到的列
    •使用USING 能够在有多个列满足条件时进行选择。

    JOINUSING子句常常同一时候使用

    select e.employee_id,e.last_name,d.department_name
    from employees e join departments d
    using(department_id)



    这样的方法有局限性:假设两个表中的列名(一个叫department_id,另外一个叫id)不一样,这种方法就失效了。

    使用ON子句创建连接(经常使用):

    •自然连接中是以具有同样名字的列为连接条件的。

    能够使用 ON子句指定额外的连接条件

    •这个连接条件是与其他条件分开的。
    ON子句使语句具有更高的易读性

    select e.employee_id,e.last_name,d.department_name
    from employees e 
    join departments d
    on e.department_id = d.department_id


    
    

    这个和等值连接是非常相似的

    左外连接

    select e.employee_id,e.last_name,d.department_name
    from employees e 
    left outer join departments d
    on e.department_id = d.department_id

    右外连接

    select e.employee_id,e.last_name,d.department_name
    from employees e 
    right outer join departments d
    on e.department_id = d.department_id

    满外连接

    select e.employee_id,e.last_name,d.department_name
    from employees e 
    full outer join departments d
    on e.department_id = d.department_id

  • 相关阅读:
    Python的命名空间及作用域
    STM32 RTC时钟的配置
    STM32 输入捕获配置
    stm32 看门狗配置
    led灯的驱动电流和电阻
    STM32中TIMx的映射及其通道
    STM32中断定时,控制LED灯
    STM32 用c语言控制4个LED灯从左向右无限流动
    SYSTEMsyssys.c:33:7: error: expected '(' before 'void' __ASM void MSR_MSP(u32 addr)
    STM32 PWM输出(映射)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7260269.html
Copyright © 2011-2022 走看看