Oracle学习第三讲
关联查询
笛卡尔积
指做关联操作的每个表的每一行都和其他表的每一行组合,假设两个表的记录条数分别为x和y,笛卡尔积将返回x*y条记录
例如:select count(*) from emp;
select count(*) from dept;
select emp.ename,dept.dname from emp,dept;
等值连接
连接查询中最常见的一种,通常是在有主外键关联关系的表之间建立,并将连接条件设定为有关系的列,使用“=”连接相关的表
例如:查询职员的姓名、职位以及所在部门的名字和所在城市
select e.ename,e.job,d.dname,d.loc
from emp e,dept d
where e.deptno=d.deptno;
内连接
返回所有满足条件的记录
例如:查询职员的姓名、职位以及所在部门的名字和所在城市
select e.ename,e.job,d.dname,d.loc
from emp e,dept d
where e.deptno=d.deptno;
或者(如果要写内练接,就用下面这个)
select e.ename,e.job,d.dname,d.loc
from emp e join dept d
on (e.deptno=d.deptno);
外连接
不仅返回满足条件的记录,还将返回不满足条件的记录
select table1.column,table2.column
from table1 left|right|full[outer] join tanle2
on table1.column=table2.column;
例如:查询职员的姓名、职位以及所在部门的名字和所在城市
左外连接
select e.ename,e.job,d.dname,d.loc
from emp e left outer join dept d
on e.deptno=d.deptno;
右外连接
select e.ename,e.job,d.dname,d.loc
from emp e right outer join dept d
on e.deptno=d.deptno;
全外连接
select e.ename,e.job,d.dname,d.loc
from emp e full outer join dept d
on e.deptno=d.deptno;
自连接
是一种特殊的连接查询,数据的来源是同一个表,也就是说关联关系来自于单表中的多个列
表中的列参照同一个表中的其它列的情况称作自参照表
自连接是通过将表用别名虚拟成两个表的方式实现,可以是等值或不等值连接
例如:查询出每个职员的经理的名字以及他们的职员编号
select worker.empno w_empno, worker.ename w_ename,manager.ename m_ename,manager.empno m_empno
from emp worker join emp manager
on worker.mgr=manager.empno;
----------------------------------------------------------------------------------------
子查询
子查询在where子句中
在select查询中,在where查询条件中的限制条件不是一个确定的值,而是来自于另一个查询的结果
为了给查询提供数据而首先执行的查询语句叫子查询
子查询是嵌入在其他SQL语句中的select语句,大部分出现在where子句中
子查询嵌入的语句称作主查询或者父查询
主查询可以是select语句,也可以是其他sql语句中
根据返回结果的不同,子查询可以分为单行子查询、多行子查询和多列子查询
例如:查询和Scott同职位的员工
select ename from emp where job=(select job from emp where ename='SCOTT');
rownum
被称作为伪列,用于返回标识行数据顺序的数字
select rownum,empno,ename,sal from emp;
例如:查询出emp表第三条以后的数据
select * from (select rownum rm,e.* from emp e) where rm>3;
查询出emp表第三条到第七条数据
select * from (select rownum rm,e.* from emp e) where rm between 3 and 7;
使用子查询进行分页
分页策略:每次只取一页的数据,每次换页,取下一页的数据
在oracle中利用rownum的功能可用来进行分页,假设结果集共有105条数据,每页20条数据,那么
page1:1-20
page2:21-40
...
pageN:pagesize*(currentpage-1)+1 pagesize*currentpage
例如:按照薪水倒序排列,去除结果集中第8-10条记录
select * from (select rownum rm,sal from (select * from emp order by sal desc) ) where rm between 8 and 10;
查询emp表,根据职员的职位计算奖金额,管理者1.2倍工资、办事员1.1倍工资、销售员1.05倍工资,如果不是这三个职位的就取工资值。
decode函数解决此类问题
decode(column,search1,result1,search2,result2... ,result)
select ename,job,sal, decode(job,'MANAGER',sal*1.2,'ANALYST',sal*1.1,'SALESMAN',sal*1.05,sal) bonus from emp;
等同于
select ename,job,sal,case job when 'MANAGER' then sal*1.2
when 'ANALYST' then sal*1.1
when 'SALESMAN' then sal*1.05
else sal end bonus
from emp;
根据年薪算
select ename,job,sal,comm,decode(
job,
'MANAGER',(sal+nvl(comm,0))*12*0.5,
'ANALYST',(sal+nvl(comm,0))*12*0.4,
'SALESMAN',(sal+nvl(comm,0))*12*0.3,
(sal+nvl(comm,0))*12*0.1
) bonus from emp;
多列子查询
exists操作符
检查子查询中是否满足条件的行
1--如果在子查询中存在满足条件的行,返回true,就不再子查询继续查找
2--如果子查询中不存在满足条件的行,就返回false,继续在子查询中查找
Oracle学习第三讲的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习线路
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验) 作为oracle的基本功,需要大家对sql和 ...
- Oracle学习指南
Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Oracle学习系列7
Oracle学习系列7 ************************************************************************************ 关联表 ...
- Oracle学习系列6
Oracle学习系列6 ************************************************************************************ 删除约 ...
- Oracle学习系列5
Oracle学习系列5 ************************************************************************************ ,掌握 ...
- Oracle学习系列4
Oracle学习系列4 ************************************************************************************ 数据库 ...
- Oracle学习系列3
Oracle学习系列3 ************************************************************************************ 多表查 ...
随机推荐
- CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1)
终于上手as了,感觉很爽 但是感觉也特闹心啊 还好有stackoverflow(这特么才是一个神奇的网站好吗) 废话少说 记录一下: 前面历经的磨难暂时不说了,就这个CPU acceleration ...
- 初次运行 Git 前的配置
初次运行 Git 前的配置 一般在新的系统上,我们都需要先配置下自己的 Git 工作环境.配置工作只需一次,以后升级时还会沿用现在的配置.当然,如果需要,你随时可以用相同的命令修改已有的配置. Git ...
- bat处理打开关门exe
@echo off rem rem 注释 tastkill /f /im a.exe cd %CD% %CD:~0,1%: cd %Cd%b start %CD%a.exe cd .. %CD:~0 ...
- android 更新uI主线程
http://www.cnblogs.com/wenjiang/p/3180324.html handleMessage 好用
- bzoj 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集)
Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的 时候有一个独一无二的位置坐标Xi,Yi( ...
- uvaLA4255 Guess BFS+拓扑排序
算法指南白书 思路:“连续和转化成前缀和之差” #include <stdio.h> #include <string.h> #include <iostream> ...
- 《使用wxWidgets进行跨平台程序开发》chap09——布局一个对话框
///////////////////////////////////////////////////////////////////////////// // Name: personalrecor ...
- 让你的Ubuntu也能像Windows那样显示网速和CPU温度
致力于Linux桌面操作系统的平民化,一直强迫自己完全在Ubuntu系统下进行日常的电脑使用,但是用长了时间的Windows,还是有些习惯改不过来,比如只要在下载或者看在线视频的时候就会不自觉关注网速 ...
- Yii AR Model CRUD数据库操作
Yii AR很好很强大,但刚开始不知道怎么使用,可以先看下官方文档 官方文档:http://www.yiichina.com/guide/database.ar 下面是我对AR的一些理解 对于一个Mo ...
- 【ImageMagick】Unix Windows 源码安装
[ Unix 源码安装 | Windows 源码安装 ] 首先检查一下电脑里已经安装的ImageMagick版本,输入: convert -version 除非你想要把对另外的图像格式的支持或升级 ...