具体参考《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>:连接条件
相关推荐
解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...
Sqldbx连接oracle,不用安装client http://www.cnblogs.com/ycdx2001/p/5441405.html
oracle sql 多表连接和子查询 oracle sql 多表连接和子查询
SQL SERVER连接oracle数据库几种方法 查询oracle数据库中的表 在master数据库中查看已经存在的链接服务器 要在企业管理器内指定登录帐号
sql_server连接Oracle方法(最全)
oracle sql developer数据库连接成功后无关权限问题打不开左边树桩内容解决方法
通过ORACLE通用连接访问SQLServer数据库的方法
Oracle SQL 内置函数大全 SQL中的单记录函数 给出整数,返回对应的字符 连接两个字符串 增加或减去月份 用于对查询到的结果进行排序输出
这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...
之前用PL/SQL DEVELOPER和SQLPLUS 登录数据库都没有问题,就是应用程序通过JDBC连接Oracle时无法成功连接,出现ORA-12505错误listener does not currently know of SID given in connect descriptor
Oracle通过透明网关连接SQL SERVER的实战记录,包括一些错误解决方法。
实现 Oracle 连接 SQL Server 实现 Oracle 连接 SQL Server
Oracle SQL连接查询总结 缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表,Table A 是左边的表。Table ...
在网上看了很多资料,感觉不是很仔细,很多同学遇到这个问题,就详细说明一下在局域网环境下Navicat连接SQL Server和Oracle 19c的方法,PL/SQL Developer连接Oracle
ORACLE透明网关连接SQLSERVER操作 操作过程有截图,内容清晰。 目录 一、 ORACLE透明网关的安装步骤: 二、 配置透明网关文件inittg4msql.ora 三、 配置透明网关的监听器文件LISTENER.ORA 四、 配置透明网关的TNS...
Oracle SQL Handler 是一款是专为 Oracle 数据库开发人员及操作人员精心打造的一款 Oracle 开发工具(客户端工具)。 它是超智能的SQL编辑器,超方便的表格操作(象操作Excel表格一样方便地选择行/列/单元格数据;...
NULL 博文链接:https://heisetoufa.iteye.com/blog/287301
Oracle连接SQL Server需要安装插件(Gateways),下载的时候,要选择与Oracle数据库对应的版本,否则不能被Oracle数据库使用,另外对Oracle数据库的版本也有所要求,最好选用企业版,简化版不容易安装插件。...
shell连接oracle数据库工具脚本:支持select/insert/update/delete 部署位置:/root/sysmonitor db:数据库文件夹 dbconfig.properties:数据库配置文件, dbConnectTest.sh:连接测试文件 dbExecurteSQL.sh:...
实现对mongodb oracle sqlserver 的连接操作