一、单表查询

语法: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的更多相关文章

  1. oracle(5)--DQL查询语句

    DQL 数据查询语句(data query language) 1.查询条件符号: < ,  > ,  = ,    <= ,  >= ,    != ,  < > ...

  2. Oracle查询DQL脚本记录

    --查询列 Select t.sname,t.ssex,t.class from student t --t 别名; Select *from student t; --* 代表查询表内所有数据 '; ...

  3. Oracle的DQL

    基本查询: 链接语句: sqlplus scott/tiger@192.168.56.101:1521/orcl SQL> --清屏 SQL> host cls (host clear) ...

  4. oracle学习笔记(四) DQL数据查询语言和TCL 事务控制语言

    DML 数据管理语言 Data manage language insert, update, delete以及select语句,不过,有人也把select单独出来,作为DQL 数据查询语言 data ...

  5. Oracle——DQL、DML、DDL、DCL

    1.DQL:数据查询语言 基本结构:由select.from.where组成 子句组成的查询块:    SELECT <字段名表>    FROM <表或视图名>    WHE ...

  6. Oracle数据库基本操作(三) —— DQL相关内容说明及应用

    本文所使用的查询表来源于oracle数据中scott用户中的emp员工表和dept部门表. 一.基本语法 SQL语句的编写顺序: select 输出的列 from 表名 where 条件 group ...

  7. Oracle DQL查询语言整理

    select * from t_hq_ryxx; select nianl, xingm from t_hq_ryxx; select nianl as 年龄, xingm as 姓名 from t_ ...

  8. [原创]关于ORACLE的使用入门

    Oracle===============================数据库:Oracle------>甲骨文(Oracle) 49+%DB2---------->IBM 49+%Sq ...

  9. Oracle的SQL基础

    1.了解SQL的种类 (1)DDL 数据定义语言:定义数据库中数据要如何存储的,包括对数据库对象的创建(create)修改(alter)删除(drop)的操作,这些对象主要有数据库,数据表,视图,索引 ...

随机推荐

  1. JavaScript中callee,caller,argument的理解

    argument代表当前函数的参数数组: 1.callee的用法: argument.callee表示谁引用的这个函数 其他解释:(arguments.callee表示引用当前正在执行的函数,或者说是 ...

  2. Django—Cookie and Session

    一.Cookie Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密). 1. 应用 服务器可以利用Co ...

  3. Perl学习笔记(1)----入门

    在UNIX/Linux 系统上,打开命令终端,输入 'rpm -q perl' 查看系统是否安装了 perl ---- 在自己的CentOS7 系统上,默认自带了 perl 软件: root@javi ...

  4. Codeforces(Round #93) 126 B. Password

    B. Password time limit per test  2 seconds memory limit per test  256 megabytes   Asterix, Obelix an ...

  5. TE7下的创建组件AxHost失败

    问题比较诡异.时好时坏的.网上的办法试过了,没用. 最后的解决办法是,把项目属性切换到Any CPU,然后勾选 32位优先,切换到界面设计状态,拖放控件,OK:运行,会出现红色提示:再次切换到项目属性 ...

  6. 139.00.003 Git学习-Git时光机之Inbox体系(三)

    一.Git时光机之Inbox 体系 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有G ...

  7. HighChart利用servlet导出中文PNG图片乱码问题解决

    最近用到HighChart作图,在图片导出时,出现了图片中中文乱码的问题,在网络上找了很多资料,但都没有解决,最后才发现了最容易被忽略的问题.具体见下. 由于之前有同事使用过HighChart,所以毫 ...

  8. restful知识点之一CBV

    urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^FBVTEST/', views.FBV_Test.as_view()), ] url ...

  9. Netty相关面试题

    1.BIO.NIO和AIO的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大. 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源. N ...

  10. nlinfit非线性回归拟合

    % % 使用指定函数对下述两变量进行曲线拟合  % % y=a+k1*exp(m*t)+k2*exp(-m*t);  % % 离散点: t=[0,4,8,40],  % % y=[20.09,64.5 ...