文档章节

Oracle学习笔记(三)

weslie
 weslie
发布于 2015/06/29 13:57
字数 1796
阅读 22
收藏 0

一、子查询

        子查询分为单行子查询和多行子查询

        子查询(内查询)、主查询(外查询),子查询要包含在括号内

       1、单行子查询:只返回一条记录

              单行比较操作符

 

             

 

       2、多行子查询:返回多条记录

             

 

             IN:在集合中(在里面的都算)

             ANY:和集合中的任意一个值进行比较

 

                          (1)小于某集合中的任意一个值,就是小于集合中的最大值。
                          (2)大于某集合中的任意一个值,就是大于最小值。

             ALL:和集合中的所有值进行比较

                          (1)小于某集合中的所有值,就是小于最小值。
                          (2)大于某集合中的所有值,就是大于最大值。

       3、相关子查询:子查询中的条件要引用主查询的值

 

注意点:

      1、单行操作符对应单行子查询,多行操作符对应多行子查询

      2、在主查询的select, from, where, having 都可以放子查询,在select中放子查询时,要求只能是单行子查询。

 

<span style="font-family:Microsoft YaHei;">-- 找到薪水大于本部门平均薪水的员工。 
select * from emp e1 where sal > ( select avg(sal) from emp e2 where e2.deptno=e1.deptno ) 

-- 找到员工表中工资最高的前三名的员工信息 
select rownum, empno, ename, sal from (select empno, ename, sal from emp order by sal desc) where rownum<=3</span>

 

二、笛卡尔集

 

三、多表查询

        多表查询有:等值连接、不等值连接、外连接、自连接,下面按Oracle和SQL99标准来分别说明多表查询

       多表查询会先生成笛卡尔积条记录,再从这个记录中去取我们需要的,连接n个表至少需要n-1个连接条件

       主键:本表的主键

       外键:在本表中加入其他表的主键字段被称为外键

       内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

       外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接,没有匹配的行时,结果表中相应的列为空,外连接的where子句条件类似于内部连接,但连接条件中没有匹配行的表的列后面要加外连接运算符,即用圆括号括起来的加号(+)。

       左外连接:右边没有左边对应的数据则在右边写上(+)

       右外连接:左边没有右边对应的数据则在左边写上(+)

       总之那边数据少了,就在那边写(+)

 

       1、Oracle连接

       (1)内连接:等值连接和不等值连接

-- 等值连接:查询员工信息,要求显示员工的编号,姓名,月薪和部门名称
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;

-- 不等值连接:查询员工的工资级别:编号 姓名 月薪和级别
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal;

       (2)外连接

                  外连接的符号是(+)

                 左外连接的写法: where e.deptno=d.deptno(+),当左边存在记录,而右边无对应记录时,在右边补上“(+)”
                 右外连接的写法: where e.deptno(+)=d.deptno,当左边无对应记录,而右边有记录时,在左边不上“(+)”

                要理解“(+)”的位置:以左外连接为例,因为左边需要返回更多的记录,右表就需要“加上”更多的记录,所以在右表的链接条件上加上“(+)”

                 

                 

      (3)自连接

                  自连接:利用表的别名,将同一张表视为多张表

-- 查询员工信息:xxx的老板是yyy
select e.ename||'的老板是'||b.ename
from emp e, emp b
where e.mgr=b.empno;

       2、SQL1999连接

           (1)内连接:两边都有的才显示

--SQL99内连接实现,inner可省略
select e.*, d.*
from emp e
inner join dept d on e.deptno=d.deptno

          (2)左外连接:左边有值右边无值时左边的也全部显示

--SQL99左外连接实现,outer可省略
select e.*, d.*
from emp e
left outer join dept d on e.deptno=d.deptno

          (3)右外连接:右边有值左边无值时右边的也全部显示

--SQL99右外连接实现,outer可省略
select e.*, d.*
from emp e		
right outer join dept d on e.deptno=d.deptno

 

          (4)满外连接:任意一边有值就会显示

 

--SQL99满外连接,outer可省略
select e.*, d.*
from emp e
full outer join dept d on e.deptno=d.deptno

 

          (5)交叉连接:就是笛卡尔积

 

--SQL99交叉连接
select e.*, d.*
from emp e
cross join dept d

 

四、集合运算

 

        集合运算包括并集、交集、差集

       1、并集(Union / Union All)

             (1)Union:返回两个集合去掉重复元素后的所有记录

             (2)Union All:返回两个集合的所有记录,包括重复的记录(用的少)

--查询属于部门10与部门20的所有员工信息。
select * from emp where deptno=10
union
select * from emp where deptno=20

--查询工资在500~1500或在1000~2000范围的员工信息(这是两个工资级别)。
select * from emp where sal between 500 and 1500
union all
select * from emp where sal between 1000 and 2000

 

       2、交集(Intersect)

 

            Intersect返回同时属于两个集合的记录

<span style="font-family:Microsoft YaHei;">--查询工资在500~1500又在1000~2000范围的员工信息
select empno, ename, sal from emp where sal between 500 and 1500
Intersect
select empno, ename, sal from emp where sal between 1000 and 2000
order by empno</span>

 

      3、差集(Minus)
            Minus返回属于第一个集合,但不属于第二个集合的所有记录

 

<span style="font-family:Microsoft YaHei;">--查询属于500~1500但不属于1000~2000范围的员工信息。
select empno, ename, sal from emp where sal between 500 and 1500
Minus
select empno, ename, sal from emp where sal between 1000 and 2000
order by empno

--查询属于1000~2000但不属于500~1500范围的员工信息。
select empno, ename, sal from emp where sal between 1000 and 2000
Minus
select empno, ename, sal from emp where sal between 500 and 1500
order by empno</span>


      注意:
          1、在两个Select语句中参数类型和个数要一致,如果不一致,需要想办法补齐。

 

                例如要补个字符串,不能写个'a'、'b'等,要不影响结果,应补一个null,还要指定类型。如果是字符串,可以写 to_char(null); 如果要补数字

 

                类型,则写 to_number(null)

          2、结果集采用第一个select的表头作为表头。在第一个select上起别名才有用。在后面的select上起别名就没有用。
          3、如果有order by子句,必须放到最后一句查询语句后。

<span style="font-family:Microsoft YaHei;">--第一个SELECT语句中参数类型的别名与第二个的不一致,但结果采用的是第一个
select empno, ename, sal 薪水 from emp where sal between 500 and 1500
union
select empno, ename, sal 工资 from emp where sal between 1000 and 2000
order by 1

--查询结果
     EMPNO ENAME            薪水
---------- ---------- ----------
      7369 SMITH             800
      7499 ALLEN            1600


--两个SELECT的参数个数不一致,少的需要手动补齐
select empno, ename, sal from emp where sal between 500 and 1500
union
select deptno, dname, to_number(null) from dept

--查询结果
     EMPNO ENAME            SAL
---------- -------------- -----
        30 SALES
        40 OPERATIONS
      7369 SMITH            800
      7521 WARD             1250</span>

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

weslie
粉丝 1
博文 51
码字总数 80088
作品 0
虹口
程序员
私信 提问
Oracle笔记 目录索引

Oracle笔记 一、oracle的安装、sqlplus的使用 Oracle笔记 二、常用dba命令行 Oracle笔记 三、function 、selectOracle笔记 四、增删改、事务 Oracle笔记 五、创建表、约束、视图、索引、序列...

ibm_hoojo
2011/05/03
0
0
dbaplus丛书丨《MySQL DBA工作笔记》限量签名版来了!

MySQL是开源数据库的典型代表,也是当下企业数字化转型中用于管理数据的排头兵。DT时代暴增的数据量,以及业务上云趋势,对MySQL DBA提出了越来越高的要求,而随着自动化、智能化平台的落地开...

社群丛书
08/17
0
0
2018年度数据库技术特辑 | 文末有彩蛋

点击上方“老叶茶馆”可以订阅哦 沃趣科技2018年度技术特辑大放送! 沃趣科技2018年度技术特辑大放送! 沃趣科技2018年度技术特辑大放送! 重要的事情说三遍,够吗? 明显不够。 在这个信息爆...

老叶茶馆_
2018/12/12
0
0
java 获取指定目录下的所有文件

java ,如何获取指定目录下的所有文件呢? 看代码: 说明:上述方法采用了递归,所以包含子目录下的子目录中的文件。。。 测试代码: 输出结果: d:Tempaadividedmergedoracle学习笔记.doc ...

zh119893
2014/05/10
325
0
怎样成长为一个真正的Oracle DBA (转载)

Oracle分两大块,一块是开发,一块是管理。 开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比...

y862318
2014/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

观点 | 用 MySQL 数据库,到底会不会被“卡脖子”?

>作者:明溪源 **用 MySQL 数据库,到底会不会被“卡脖子”?** 在近期不明朗的贸易形势下,一些正在规划数据库选型、迁移的用户,纷纷询问我们对 MySQL 未来前景的看法。那么使用 MySQL 数据...

爱可生
17分钟前
3
0
千万级流量架构下的负载均衡解析

一、负载均衡 负载均衡算法 转发实现 二、集群下的 Session 管理 Sticky Session Session Replication Session Server 一、负载均衡 集群中的应用服务器(节点)通常被设计成无状态,用户可以...

李红欧巴
21分钟前
62
0
一元建站-基于函数计算 + wordpress 构建 serverless 网站

前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS, 一键部署等能力, 展现函...

阿里云官方博客
23分钟前
1
0
Spring Security 整合JWT(四)

一、前言 本篇文章将讲述Spring Security 简单整合JWT 处理认证授权 基本环境 spring-boot 2.1.8 mybatis-plus 2.2.0 mysql 数据库 maven项目 Spring Security入门学习可参考之前文章: Spri...

郑清
24分钟前
3
0
零基础怎么玩转可视化大屏?这个工具只需5步!

大屏可视化怎么这么火?领导天天要,业务人员、开发人员、IT页面师就得一块熬夜加班,要是不会做大屏,都不好意思说自己做报表、做IT。 也许有人会告诉你,可视化大屏可以用JS+Ecahrts编程实...

朕想上头条
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部