zoukankan      html  css  js  c++  java
  • oracle USING 用法

    提问

    • using(xx)中可以接多个列吗?
    • using(xx)中的列可以接表名或别名吗?
    • 在使用using的语句中,select * 可以使用吗?
    • 如果表有别名t,select t.* from table1 t , table2 using(xx),t.* 可以使用吗?
    • left join, right join, inner join, full outer join 可以和using一起用吗?

    我们看下语法就能知道答案了。

    只看答案

    • using(xx)中可以接多个列,它是一种等值连接,可以转换为 join ... on (x=y and xx=y);
    • using(xx)中的列不可以接表名或别名等限定语,默认就是指共同列,不能指定表名;
    • 在使用using的语句中,select * 可以使用,* 被扩展的顺序为using中的列,左表中的其它列,右表中的其它列
    • 如果表有别名t,select t.* from table1 t , table2 using(xx),t.* 不可以使用,using中的列不能加限定词
    • left join, right join, inner join, full outer join 可以和using一起使用,它就是简单的等值连接

    inner join 就是 join, outer join有 left, right, full outer join 三种
    using的使用条件是两表中列名和类型相同;
    natural join更进一步,直接省掉了using,但作用和使用using相似;
    inner 和 outer 的区别:内连接只返回匹配行,外连接还返回不满足条件的行;


    Syntax

    USING ( Simple-column-Name [ , Simple-column-Name ]* )
    

    USING clause definition

    The USING clause specifies which columns to test for equality when two tables are joined. It can be used instead of an ON clause in the JOIN operations that have an explicit join clause.

    If a column in the USING clause is referenced without being qualified by a table name, the column reference points to the column in the first (left) table if the join is an INNER JOIN or a LEFT OUTER JOIN. If it is a RIGHT OUTER JOIN, unqualified references to a column in the USING clause point to the column in the second (right) table.

    When a USING clause is specified, an asterisk (*) in the select list of the query will be expanded to the following list of columns (in this order):

    • All the columns in the USING clause
    • All the columns of the first (left) table that are not specified in the USING clause
    • All the columns of the second (right) table that are not specified in the USING clause

    Examples

    
    SELECT * FROM COUNTRIES JOIN CITIES
         USING (COUNTRY);
         
    SELECT * FROM COUNTRIES JOIN CITIES
        USING (COUNTRY, COUNTRY_ISO_CODE);
     
     SELECT * FROM oe.order_items oi JOIN oe.orders o
      USING(order_id);
    
    select t.* from hr.employees t, hr.departments d
    where t.department_id = d.department_id;
    
    select * from hr.employees t inner join hr.departments d
    using(department_id);
    
    select * from hr.employees t left outer join hr.departments d
    using(department_id);
    
    select * from hr.employees t right outer join hr.departments d
    using(department_id);
    
    select * from hr.employees t full outer join hr.departments d
    using(department_id);
    
    
  • 相关阅读:
    UDP的坏处
    进程控制块(Process Control Block, PCB)
    分布式中一些关键概念的解释
    线程池的设计实现
    [原创] 同步、异步、阻塞、非阻塞详解
    常用场景对文件状态的影响
    echo使用说明,参数详解
    Linux下源码安装ffmpeg及ffmpeg的简单使用说明
    127.0.0.1、0.0.0.0和本机IP地址的区别和使用
    链路层的简介和MTU
  • 原文地址:https://www.cnblogs.com/hyang0/p/10597934.html
Copyright © 2011-2022 走看看