`
jayghost
  • 浏览: 441796 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle SQL查询,各种 联接

 
阅读更多

具体参考《21天学通Oracle》的第16章 SQL查询

 

DROP TABLE t_employee;
DROP TABLE t_salary;
DROP TABLE t_manager;

CREATE TABLE t_employee(
 ID NUMBER(11) NOT NULL,
 NAME VARCHAR2(20) NOT NULL
);
CREATE TABLE t_salary(
 ID NUMBER(11) NOT NULL,
 money NUMBER(10) NOT NULL,
 employee_id NUMBER(11)
);
CREATE TABLE t_manager(
 ID NUMBER(11) NOT NULL,
 NAME VARCHAR2(20) NOT NULL
);

INSERT INTO t_employee VALUES(1,'user1');
INSERT INTO t_salary values(1,100,1);
INSERT INTO t_employee VALUES(2,'user2');
INSERT INTO t_salary values(2,200,2);
INSERT INTO t_employee VALUES(3,'user3');
INSERT INTO t_salary values(3,300,3);
INSERT INTO t_employee VALUES(4,'user4');
INSERT INTO t_salary values(4,400,4);
INSERT INTO t_salary values(5,500,4);
INSERT INTO t_employee VALUES(5,'user5');
INSERT INTO t_manager VALUES(1,'user1');

--笛卡尔积
SELECT * FROM t_employee e, t_salary s;
--WHERE
SELECT * FROM t_employee e, t_salary s WHERE e.id = s.employee_id;
--GROUP BY, ORDER BY
SELECT E.NAME, SUM(S.MONEY) AMOUNT
  FROM T_EMPLOYEE E, T_SALARY S
 WHERE E.ID = S.EMPLOYEE_ID
 GROUP BY E.NAME
 HAVING SUM(S.MONEY)>250
 ORDER BY AMOUNT DESC;
--IN
SELECT * FROM t_employee e WHERE e.id IN (SELECT DISTINCT s.employee_id FROM t_salary s);
--EXISTS
SELECT * FROM t_employee e WHERE EXISTS (SELECT 1 FROM t_salary s WHERE e.id = s.employee_id);
--UNION
SELECT 0 ID, '请选择' NAME FROM DUAL
UNION
SELECT E.ID, E.NAME FROM T_EMPLOYEE E
UNION
SELECT M.ID, M.NAME FROM T_MANAGER M;
--UNION ALL
SELECT 0 ID, '请选择' NAME FROM DUAL
UNION ALL
SELECT E.ID, E.NAME FROM T_EMPLOYEE E
UNION ALL
SELECT M.ID, M.NAME FROM T_MANAGER M;
--INTERSECT
SELECT 0 ID, '请选择' NAME FROM DUAL
UNION
(SELECT E.ID, E.NAME FROM T_EMPLOYEE E
INTERSECT
SELECT M.ID, M.NAME FROM T_MANAGER M);
--MINUS
SELECT 0 ID, '请选择' NAME FROM DUAL
UNION
(SELECT E.ID, E.NAME FROM T_EMPLOYEE E
MINUS
SELECT M.ID, M.NAME FROM T_MANAGER M);
--自然联接
SELECT * FROM t_employee e NATURAL JOIN t_salary s NATURAL JOIN t_manager m;
--内联接
SELECT * FROM t_employee e INNER JOIN t_salary s ON e.id = s.employee_id;
--内联接 可以 完全被WHERE替代,而且最好只是用WHERE子句,就不用ON了
SELECT * FROM t_employee e, t_salary s WHERE e.id = s.employee_id;
--左外联接
SELECT * FROM t_employee e LEFT OUTER JOIN t_salary s ON e.id = s.employee_id; 
--左外联接,+形式,有+的一侧,表示该表为附表,另一个表为基表
SELECT * FROM t_employee e, t_salary s WHERE e.id = s.employee_id(+); 
--右外联接
SELECT * FROM t_employee e RIGHT OUTER JOIN t_salary s ON e.id = s.employee_id; 
--右外联接,+形式
SELECT * FROM t_employee e, t_salary s WHERE e.id(+) = s.employee_id; 
--完全外联接,执行过程是:先执行左外联接,再执行右外联接,最后进行UNION操作。开销很大,尽量避免使用。
SELECT * FROM t_employee e FULL JOIN t_salary s ON e.id = s.employee_id; 
--完全外联结 等价于
SELECT * FROM t_employee e LEFT OUTER JOIN t_salary s ON e.id = s.employee_id
UNION 
SELECT * FROM t_employee e RIGHT OUTER JOIN t_salary s ON e.id = s.employee_id;

 connect by 层次化查询,用云树形数据结构

 oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:


select ... from <TableName>
where <Conditional-1>
start with <Conditional-2>
connect by <Conditional-3>
;

<Conditional-1>:过滤条件,用于对返回的所有记录进行过滤。
<Conditional-2>:查询结果重起始根结点的限定条件。
<Conditional-3>:连接条件

 

分享到:
评论

相关推荐

    SqlDbx连接oracle

    首先,连接Oracle数据库通常需要Oracle客户端软件,但这里提到的“Sqldbx连接oracle,不用安装client”,意味着SqlDbx可能通过一种无需完整Oracle客户端的方式来实现连接。这种连接方式通常依赖于Oracle的Instant ...

    oracle sqldeveloper连接mysql、SQLServer第三方dll

    解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...

    oracle sql developer数据库连接成功后打不開表

    ### Oracle SQL Developer数据库连接成功后无法打开表的问题分析与解决 #### 问题概述 在使用Oracle SQL Developer工具时,部分用户可能会遇到一个较为常见的问题:虽然已经成功连接到Oracle数据库,但是在左侧的...

    sql_server连接Oracle方法(最全)

    "SQL Server 连接 Oracle 方法" SQL Server 连接 Oracle 方法是数据库管理系统中的一个重要话题。本文将详细介绍如何在 SQL Server 中连接 Oracle 数据库,并解决在连接过程中可能出现的问题。 安装 Oracle 客户端...

    SQL SERVER连接oracle数据库几种方法

    SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...

    Oracle Sql语句转换成Mysql Sql语句

    3. **连接查询**:Oracle的JOIN语法允许在ON条件中使用子查询,而在MySQL中,子查询通常需要移到FROM或WHERE子句中。 4. **游标**:Oracle SQL支持游标,MySQL则不直接支持,需要使用存储过程或临时表来实现类似...

    oracle sql 多表连接和子查询

    oracle sql 多表连接和子查询 oracle sql 多表连接和子查询

    Oracle SQL 官方文档

    它详细解释了各种连接(JOIN)类型、子查询、集合操作、窗口函数、索引和视图等高级特性。此外,还涉及事务控制、并发控制和数据库权限管理。 4. **SQL快速参考**:此文档为快速查阅手册,提供了SQL常用命令和语法...

    实现 Oracle 连接 SQL Server

    4. **测试连接**:使用创建好的数据库链接查询 SQL Server 数据库中的表,例如: ``` SELECT * FROM jobs@pubs; ``` 如果连接成功,将返回 SQL Server 数据库中的数据。 #### 结论 通过以上步骤,可以成功...

    Oracle SQL高级编程

    2. 高级查询技术:使用Oracle SQL的高级特性,如分析函数、子查询、连接以及数据聚合等。 3. 事务处理:深入理解如何使用Oracle的事务控制语句,如COMMIT、ROLLBACK以及SAVEPOINT,进行有效的事务管理。 4. 锁机制:...

    Oracle Sql基础(beginning oracle sql中文版)

    Oracle SQL是数据库管理员和开发人员用来与Oracle数据库交互的语言,它是SQL标准的扩展,提供了许多特有的功能和优化。本资源“Oracle Sql基础(beginning oracle sql中文版)”旨在为初学者提供一个全面的Oracle ...

    oracle利用批处理文件执行SQL语句,bat连接oracle数据库并执行语句

    接下来,我们可以编写SQL语句来执行各种操作。例如,删除用户可以使用`DROP USER`语句: ```sql DROP USER 用户名 CASCADE; ``` `CASCADE`关键字确保与该用户相关的所有对象(如表、索引等)也将被删除。 创建用户...

    ORACLE_SQLDeveloper使用教程

    - 在 SQL Developer 中,可以轻松地浏览数据库中的各种对象,如表、视图、存储过程等。 - 对象列表通常显示在左侧的树状结构中。 2. **创建、导入导出 Oracle 数据库连接:** - SQL Developer 支持创建新的...

    Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)

    之前用PL/SQL DEVELOPER和SQLPLUS 登录数据库都没有问题,就是应用程序通过JDBC连接Oracle时无法成功连接,出现ORA-12505错误listener does not currently know of SID given in connect descriptor

    oracle连接查询SQL性能测试

    标题“Oracle连接查询SQL性能测试”涉及的是数据库管理和优化领域,特别是针对Oracle数据库系统的SQL查询性能分析。在Oracle中,连接查询(JOINs)是整合多个表数据的关键操作,其性能直接影响到数据库的整体效率。...

    Oracle SQL Developer 使用说明

    - 报表生成:使用报表功能,可以根据SQL查询结果生成各种类型的报表,如HTML、PDF或CSV格式。 - 图形化数据:对于数值型数据,SQL Developer支持生成柱状图、饼图等,直观展示数据分布。 7. **数据库维护** - ...

    OracleSQLDeveloper

    4. **数据库连接**:虽然Oracle SQL Developer不需要单独安装Oracle数据库,但它需要Java Development Kit (JDK)来运行。在启动时,用户需要指定本地JDK的路径,以确保工具的正常运行。 5. **数据迁移**:此工具...

    Oracle-SQL.rar_oracle_oracle sql_sql

    10. **数据库连接与管理工具**:如SQL*Plus、SQL Developer等,是与Oracle数据库交互的常用工具,它们能帮助我们执行SQL语句,管理数据库对象,以及监控数据库状态。 通过这份“Oracle SQL.ppt”,初学者可以逐步...

    sqlserver连接oracle

    在使用连接服务器时,需要在 SQL Server 的查询分析器中使用具体的 SQL 语句来实现表记录的查看。更详细的使用方法这里不再赘述。 通过配置 Windows 的 ODBC 数据源和 SQL Server 2000 中的连接服务器,可以实现 ...

    oracle SQL语法大全

    Oracle SQL,全称为结构化查询语言,是用于管理和操作Oracle数据库的强大工具。它允许用户查询、更新、插入和删除数据,以及创建和管理数据库对象。本资料“Oracle SQL语法大全”将全面涵盖Oracle SQL的基础概念、...

Global site tag (gtag.js) - Google Analytics