`

Oracle 多表查询

阅读更多

1.  SQL语句的执行顺序   

SELECT DNAME, MAX(SAL) -- 5 对列筛选(分组字段或聚集函数)    

  FROM EMP   

  LEFT OUTER JOIN DEPT -- 1 确定表    

 USING (DEPTNO)   

 WHERE DEPTNO > 0 -- 2 确定行(记录)    

 GROUP BY DNAME -- 3 将行分组      

HAVING MAX(COMM) IS NULL OR MAX(COMM) > 0 -- 4 对组筛选      

 ORDER BY DNAME -- 6 对结果集排序   

2.  等值查询:    

在存在主外键关系的表中,使用等号建立表之间的连接   

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A, DEPT B   

    WHERE A.DEPTNO = B.DEPTNO;   

  

   SQL99新标准:内连接(inner join)   

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A   

    INNER JOIN DEPT B -- inner可省略   

       ON A.DEPTNO = B.DEPTNO;   

3.  非等值查询:    

使用非等号关系运算符进行多表的连接    

   SELECT A.ENAME, A.SAL, B.GRADE   

     FROM EMP A, SALGRADE B   

    WHERE A.SAL BETWEEN B.LOSAL AND B.HISAL;   

4.  外连接(outer join):    

类似等值查询,使用特定的符号(+)   

   (+)符号如果出现在where子句等号的左边,叫左外连接,左外连接会显示右表的全部数据;   

   (+)符号如果出现在where子句等号的右边,叫右外连接,右外连接会显示左表的全部数据;   

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A, DEPT B   

    WHERE A.DEPTNO(+) = B.DEPTNO;   

      

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A, DEPT B   

    WHERE A.DEPTNO = B.DEPTNO(+);   

      

   SQL99新标准:   

   左外连接:   

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A   

     LEFT OUTER JOIN DEPT B -- outer可省略   

       ON A.DEPTNO = B.DEPTNO;   

  

   右外连接:   

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A   

    RIGHT OUTER JOIN DEPT B -- outer可省略   

       ON A.DEPTNO = B.DEPTNO;   

  

   全外连接:外连接是在等值(内)连接的基础上将左表和右表的未匹配数据都加上   

   SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME   

     FROM EMP A   

     FULL OUTER JOIN DEPT B -- outer可省略   

       ON A.DEPTNO = B.DEPTNO;   

5.  自连接:   

特殊的多表连接,连接的多个表来自于同一个表   

   SELECT A.EMPNO, A.ENAME, B.ENAME MANAGER   

     FROM EMP A, EMP B   

    WHERE A.MGR = B.EMPNO;   

6.  自然连接(natural join):   

基于多个表有一个或多个相同字段名,且这些字段的类型相同   

   由oracle自行决定哪些列作为连接的条件:将不同表中的那些具有相同名称和数据类型的字段用等值连接起来。   

   SELECT A.ENAME, B.DNAME FROM EMP A NATURAL JOIN DEPT B;   

7.  交叉查询(cross join): 笛卡尔集   

   SELECT A.ENAME, A.SAL, B.GRADE FROM EMP A, SALGRADE B;   

8.  join...using:    

   使用 USING 可以在natural join时有多个列满足条件,指定具体的字段做等值连接   

   如果列名相同但是数据类型不同,这时不能使用natural join 可以使用 using来连接。   

   当多列匹配时,using只能匹配一列。   

   在引用的列前面不能有表名或者表别名。   

   natural join和using 是相互排斥的   

      

   SELECT A.ENAME, B.DNAME FROM MYEMP A JOIN DEPT B USING (DEPTNO);   

9.  union[all]:    

取多个查询结果的并集,不要all表示重复的记录只保留一条   

   注意:union、minus、intersect做连接查询时,多个查询结果的字段和类型要一致   

      

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE JOB = 'CLERK'  

   UNION ALL -- ALL可以省略   

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE DEPTNO = 20   

    ORDER BY ENAME;   

10.  minus: 取多个查询结果的差集   

   注意:union、minus、intersect做连接查询时,多个查询结果的字段和类型要一致   

      

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE JOB = 'CLERK'  

   MINUS   

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE DEPTNO = 20   

    ORDER BY EMPNO;   

      

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE DEPTNO = 20   

   MINUS   

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE JOB = 'CLERK'  

    ORDER BY EMPNO;   

11.  intersect: 取多个查询结果的交集   

   注意:union、minus、intersect做连接查询时,多个查询结果的字段和类型要一致   

      

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE JOB = 'CLERK'  

   INTERSECT  

   SELECT EMPNO, ENAME, JOB, SAL, DEPTNO   

     FROM EMP   

    WHERE DEPTNO = 20   

    ORDER BY EMPNO;  

分享到:
评论

相关推荐

    ORACLE多表查询优化

    Oracle 多表查询优化 在 Oracle 数据库中,多表查询是一种常见的查询方式,但它也可能会对数据库性能产生影响。本文将讨论 Oracle 多表查询优化的几种方法,帮助开发者提高数据库性能。 1. 选择最有效率的表名顺序...

    Oracle 多表查询优化

    Oracle 多表查询优化 Oracle 多表查询优化是指在 Oracle 数据库管理系统中,为了提高多表查询的效率和性能采取的一些优化策略和技术。在 Oracle 中,多表查询是指从多个表中检索数据的操作。这种操作可能会占用大量...

    ORACLE 多表查询与数据修改

    ### ORACLE 多表查询与数据修改 #### 学习目标 - **熟悉三个或四个表的连接查询**:在实际应用中,我们往往需要从多个表中获取数据以完成复杂的业务逻辑。通过本节的学习,您将能够掌握如何利用Oracle数据库进行多...

    oracle多表查询PPT学习教案.pptx

    oracle多表查询PPT学习教案.pptx

    oracle查询表碎片

    ### Oracle查询表碎片知识点详解 在Oracle数据库管理与优化的过程中,了解并处理表碎片是非常重要的一个环节。本文将详细介绍如何通过SQL查询来检测Oracle表的碎片情况,并对给出的SQL查询语句进行深入解析。 ####...

    Oracle数据库中大型表查询优化的研究

    综上所述,Oracle数据库中大型表查询优化涉及多个方面,包括索引优化、查询设计、工具利用、分区技术和数据库配置。每个环节都需要根据具体情况进行细致分析和调整,以实现最佳的查询性能。在实际操作中,应结合实际...

    Oracle sql语句多表关联查询

    Oracle SQL 语句多表关联查询 Oracle SQL 语句多表关联查询是数据库管理系统中的一种常见查询方式,它可以从多个表中检索数据,满足业务需求。本文将详细介绍 Oracle SQL 语句多表关联查询的知识点,包括字符串和...

    oracle表空间查询命令

    ### Oracle表空间查询与管理命令详解 #### 一、Oracle表空间概述 在Oracle数据库中,表空间是逻辑存储单元,用于组织数据文件。每个Oracle数据库至少包含一个表空间,默认情况下,系统会在创建数据库时自动创建`...

    一些ORACLE多表连接查询

    一些ORACLE的表链接查询。求最高,最低,排序

    oracle SQL查询工具

    oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...

    关于Oracle多表连接,提高效率,性能优化操作

    这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...

    oracle查询表的所有列并用逗号隔开

    ### Oracle查询表的所有列并用逗号隔开 #### 核心概念解析 1. **表的元数据**:在Oracle中,可以通过查询特定的数据字典视图来获取表的元数据信息。对于用户所拥有的表,可以使用`USER_TAB_COLUMNS`视图。该视图...

    ORACLE数据库学习总结资料.pdf

    Oracle数据库学习总结资料.pdf 是一份关于 Oracle 数据库的学习总结资料,涵盖了 Oracle 数据库的各个方面,包括 Oracle 的简介、简单查询、标量函数和算数运算、多表查询、列函数和分组、子查询、表的更新操作、表...

    oracle4的表查询和基本函数.docx

    在Oracle中,查询多表通常涉及到联接操作。以示例中的雇员表(EMP)和部门表(DEPT)为例,我们可以使用JOIN语句来获取雇员及其所在部门的信息。例如,一个简单的INNER JOIN查询可能如下: ```sql SELECT e.EMPNO, ...

    ORACLE-select-query.rar_oracle_多表查询

    本压缩包“ORACLE-select-query.rar”专注于讲解Oracle数据库中的查询技术,特别是多表查询、子查询以及高级子查询。下面将详细探讨这些关键知识点。 首先,基础查询SQL语句是所有数据库操作的基础,它涵盖了SELECT...

    查询一个Oracle表所占的物理空间大小

    ### 查询一个Oracle表所占的物理空间大小 在Oracle数据库管理中,了解特定表占用的物理空间大小对于优化存储、规划磁盘空间以及提高数据库性能至关重要。本文将详细介绍如何查询一个Oracle表所占的物理空间大小,...

    Oracle查询指定表的所有字段名和数据类型SQL

    ### Oracle查询指定表的所有字段名和数据类型SQL 在Oracle数据库管理中,有时我们需要了解某个特定表的所有字段名称以及它们对应的数据类型等信息。这对于理解表结构、进行数据迁移或编写更为精确的SQL语句非常有...

    如何在oracle中查询所有用户表的表名、主键名称、索引、外键等

    根据提供的标题、描述以及部分代码内容,我们可以了解到这篇文章主要探讨的是如何在Oracle数据库中查询所有用户表的相关信息,包括表名、主键名称、索引、外键等元数据信息。接下来,我们将对这些知识点进行详细的...

    Oracle表删除大量数据(千万)后查询变慢问题(原因分析)

    Oracle 表删除大量数据后查询变慢问题分析 在 Oracle 数据库中,如果删除了大量数据(千万级别),可能会出现查询变慢的问题。下面我们将分析这个问题的原因,并提供解决方案。 问题的原因主要有两个方面: 1. 表...

    oracle 查询表空间使用情况

    查询oracle表空间使用情况,表空间文件详情,创建或者变更表空间大小

Global site tag (gtag.js) - Google Analytics