oracle之DQL
一、单表查询
语法:select * from table where 条件 group by 分组 having 过滤分组 order by 排序
--查询平均工资低于2000的部门的最大工资和平均工资
select deptno, max(sal), avg(sal)
from emp
group by deptno
having avg(sal) < 2000
order by deptno asc;
模糊查询,_表示占位一个字节,%填充剩下的位数
--查询员工姓名以A开头,并且第三个字母为L的员工信息
select * from emp where ename like 'A_L%';
分页查询
--查询员工表中第三条到第五条数据
select *
from (select emp.*, rownum as rn from emp where rownum <= 5)
where rn > 2;
二、嵌套子查询
单行子查询
子查询返回的值是单行单列的
--查询薪资高于平均工资的员工信息
select * from emp where sal > (select avg(sal) from emp);
多列子查询
多列子查询中的条件与查询结果必须依次对应,否则会报错
--查询与smith部门和岗位完全相同的员工
select *
from emp
where (deptno, job) = (select deptno, job from emp where ename = 'SMITH');
多行子查询
多行子查询就是嵌套在其他sql语句中返回多行数据,常用的条件是in,not in,any,all等,any和all必须和比较运算符一起使用
>all = >max | >any = >min | <all = <min | <any = <max
--查询比部门30所有员工的工资都要高的员工信息
select * from emp where sal > all (select sal from emp where deptno = 30); --查询比部门10中员工的工资高的员工信息
select * from emp where sal > any (select sal from emp where deptno = 10); --查询部门10和部门20的员工信息
select * from emp where deptno in (10,20);
in和exists,在9i时代,exists适合用于字表查询量大的情况,in适用于父表查询量大的时候,在9i之后,ORACLE优化器有个查询转换器,很多SQL虽然写法不同,但是ORACLE优化器会根据既定规则进行查询重写,重写为优化器觉得效率最高的SQL,所以可能SQL写法不同,但是执行计划却是完全一样的。
相关子查询
相关子查询依赖于外部的条件,不能单独执行,而非相关子查询可以单独执行
--查询在dept表中存在的部门员工信息
select ename,sal,deptno from emp where exists (select 1 from dept
where dept.deptno = emp.deptno)
三、多表查询
内连接
内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
--内连接的两种写法,只返回符合条件的结果
select * from emp inner join dept on emp.deptno = dept.deptno;
select * from emp, dept where emp.deptno = dept.deptno;
内连接只要写上连接条件就不会产生笛卡尔积
外连接
左外连接、右外连接、满外连接
左外连接以左边的表的为基础,右表分别与左表中的数据进行匹配,右表中的数据可能有空值;
而右外连接正好相反,左表中可能有空值;
满外连接左右两边都可能有空值。
--左外连接的两种写法:
select * from emp, dept where emp.deptno = dept.deptno(+);
select * from emp left outer join dept on emp.deptno = dept.deptno;

--右外连接的两种写法
select * from emp ,dept where emp.deptno(+) = dept.deptno;
select * from emp right join dept on emp.deptno = dept.deptno;

--满外连接的写法
select * from emp full outer join dept on emp.deptno = dept.deptno;
重点关注:WHERE子句中的连接顺序.
重点关注 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
--列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级
select a.ename, a.sal, dname, b.ename, grade
from emp a, emp b, dept d, salgrade s
where a.deptno = d.deptno(+)
and a.mgr = b.empno
and a.sal between losal and hisal
and a.sal > (select avg(sal) from emp);
oracle之DQL的更多相关文章
- oracle(5)--DQL查询语句
DQL 数据查询语句(data query language) 1.查询条件符号: < , > , = , <= , >= , != , < > ...
- Oracle查询DQL脚本记录
--查询列 Select t.sname,t.ssex,t.class from student t --t 别名; Select *from student t; --* 代表查询表内所有数据 '; ...
- Oracle的DQL
基本查询: 链接语句: sqlplus scott/tiger@192.168.56.101:1521/orcl SQL> --清屏 SQL> host cls (host clear) ...
- oracle学习笔记(四) DQL数据查询语言和TCL 事务控制语言
DML 数据管理语言 Data manage language insert, update, delete以及select语句,不过,有人也把select单独出来,作为DQL 数据查询语言 data ...
- Oracle——DQL、DML、DDL、DCL
1.DQL:数据查询语言 基本结构:由select.from.where组成 子句组成的查询块: SELECT <字段名表> FROM <表或视图名> WHE ...
- Oracle数据库基本操作(三) —— DQL相关内容说明及应用
本文所使用的查询表来源于oracle数据中scott用户中的emp员工表和dept部门表. 一.基本语法 SQL语句的编写顺序: select 输出的列 from 表名 where 条件 group ...
- Oracle DQL查询语言整理
select * from t_hq_ryxx; select nianl, xingm from t_hq_ryxx; select nianl as 年龄, xingm as 姓名 from t_ ...
- [原创]关于ORACLE的使用入门
Oracle===============================数据库:Oracle------>甲骨文(Oracle) 49+%DB2---------->IBM 49+%Sq ...
- Oracle的SQL基础
1.了解SQL的种类 (1)DDL 数据定义语言:定义数据库中数据要如何存储的,包括对数据库对象的创建(create)修改(alter)删除(drop)的操作,这些对象主要有数据库,数据表,视图,索引 ...
随机推荐
- AngularJs动态添加元素和删除元素
动态添加元素和删除元素 //通过$compile动态编译html var html="<div ng-click='test()'>我是后添加的</div>" ...
- npm属性笔记
scripts属性,运行脚本命令的npm命令行缩写,常见如下npm run devnpm run startnpm run build dependencies属性,项目运行时配置模块依赖的模块列表, ...
- Activiti 配置Oracle不能自动创建表解决方法
使用配置文件创建工作流表 <bean id="processEngineConfiguration" class="org.activiti.engine.impl ...
- OpenLayers中的图层(转载)
作者:田念明出处:http://www.cnblogs.com/nianming/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法 ...
- DUANG~ 万网轻云服务器,大促狂欢,不仅仅免单!
DUANG~ 万网轻云服务器,大促狂欢,不仅仅免单! 当老板第一次知道我们要做活动的时候,其实是拒绝的.DUANG~ 打折.降价.挥泪甩卖…太俗套.客户看到一定骂我们,根本没有诚意. 所以轻云大促 ...
- Java链接 Oracle11g R2
菜鸟学习Oracle数据库,使用Java代码链接数据库. 首先要配置Eclipse,在新建的工程中,Package Explorer->工程名->Build path->Add ex ...
- Java在Web开发语言上败给了PHP(转)
PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...
- 微信公众号 报token验证失败
最近两天一直碰到token验证失败的问题,如下图所示 然后上网疯狂的搜索答案,碰到的人还真不少,原因大概有这几个: 1)服务器URL未实名认证 2)token重名(基本不可能) 3)服务器部署的项目 ...
- sqlserver中循环生成记录
declare @i int set @i=1 while(@i<=10) begin INSERT INTO [BMData].[dbo].[QueryBlackListLogs] ([ID] ...
- MySQL案例01:Last_SQL_Errno: 1755 Cannot execute the current event group in the parallel mode
周五同事监控报警,有个MySQL从库复制状态异常,让我帮忙排查下,经过排查发现是MySQL5.6并行复制的一个Bug所致,具体处理过程如下: 一.错误信息 登录mysql从库服务器,检查复制状态 my ...