玩转oracle 实战教程oracle表查询3Word格式文档下载.docx

上传人:b****5 文档编号:20548509 上传时间:2023-01-24 格式:DOCX 页数:15 大小:22.70KB
下载 相关 举报
玩转oracle 实战教程oracle表查询3Word格式文档下载.docx_第1页
第1页 / 共15页
玩转oracle 实战教程oracle表查询3Word格式文档下载.docx_第2页
第2页 / 共15页
玩转oracle 实战教程oracle表查询3Word格式文档下载.docx_第3页
第3页 / 共15页
玩转oracle 实战教程oracle表查询3Word格式文档下载.docx_第4页
第4页 / 共15页
玩转oracle 实战教程oracle表查询3Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

玩转oracle 实战教程oracle表查询3Word格式文档下载.docx

《玩转oracle 实战教程oracle表查询3Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《玩转oracle 实战教程oracle表查询3Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

玩转oracle 实战教程oracle表查询3Word格式文档下载.docx

=6是不行的,

4.然后查出6-10条记录

SELECT*FROM(SELECTe.*,ROWNUMrnFROM(SELECT*FROMemp)eWHEREROWNUM<

=10)WHERErn>

=6;

5.几个查询变化

a.指定查询列,只需要修改最里层的子查询

只查询雇员的编号和工资

SELECT*FROM(SELECTe.*,ROWNUMrnFROM(SELECTename,salFROMemp)eWHEREROWNUM<

b.排序查询,只需要修改最里层的子查询

工资排序后查询6-10条数据

SELECT*FROM(SELECTe.*,ROWNUMrnFROM(SELECTename,salFROMempORDERbysal)eWHEREROWNUM<

用查询结果创建新表

这个命令是一种快捷的建表方式

CREATETABLEmytable(id,name,sal,job,deptno)asSELECTempno,ename,sal,job,deptnoFROMemp;

创建好之后,descmytable;

和select*frommytable;

看看结果如何?

合并查询

有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,unionall,intersect,minus

多用于数据量比较大的数据局库,运行速度快。

1).union

该操作符用于取得两个结果集的并集。

当使用该操作符时,会自动去掉结果集中重复行。

SELECTename,sal,jobFROMempWHEREsal>

2500

UNION

SELECTename,sal,jobFROMempWHEREjob=&

apos;

MANAGER&

;

2).unionall

该操作符与union相似,但是它不会取消重复行,而且不会排序。

UNIONALL

3).intersect

使用该操作符用于取得两个结果集的交集。

INTERSECT

4).minus

使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。

MINUS

(MINUS就是减法的意思)

#登录到sqlplus;

#用户名:

scott密码:

tiger

#或者在命令提示符下

sqlplussys/dysassysdba;

#管理员登录到sqlplus

alteruserscottaccountunlock;

#解开用户

#清空sqlplus屏幕中的记录

clearscr;

#查看表结构

descemp;

#select语句

selectename,sal*12fromemp;

#表字段的别名

selectename,sal*12asannual_salfromemp;

#在表中运用运算

select2*3fromemp;

#查出来的是14条记录,因为emp表中有14条记录

#查看虚表dual

descdual;

#在dual表中运算

select2*3fromdual;

#查看系统时间

selectsysdatefromdual;

#显示一条记录

#使用"

"

来保持原来的格式

selectename,sal*12as"

annualsal"

fromemp;

#查看表中的字段值为空的记录

selectename,commfromemp;

#因为任何含有空值的表达式最后显示结果仍是空值

#字符串连接,使用||

selectename||salfromemp;

#distinct查询,去除重复行

selectdistinctdeptnofromemp;

selectdistinctdeptno,jobfromemp;

#两个在一起的组合重复的去掉,distinct可以修饰一个或多个字段

#where过滤条件

#查询部门编号是10的员工信息

select*fromempwheredeptno=10;

#查询名称是CLARKR部门员工信息

select*fromempwhereename='

CLARK'

selectename,salfromempwheresal>

1500;

#比较每个字符的ascii码谁大谁小

selectename,salfromempwhereename>

'

CBA'

#查询工资在800和1500之间

selectename,salfromempwheresalbetween800and1500;

#或者

=800andsal<

=1500;

#空值处理

selectename,sal,commfromempwherecommisnull;

selectename,sal,commfromempwherecomm=null;

#这样写是错误的

selectename,sal,commfromempwherecommisnotnull;

#in查询

selectename,sal,commfromempwheresalin(800,1500,2000);

selectename,sal,commfromempwhereenamein('

SMITH'

'

KING'

ABC'

);

#表示查询符合在集合范围内的一个或者多个

selectename,salfromempwheresalnotin(800,1000);

#日期处理

selectename,sal,hiredatefromempwherehiredate>

20-2月-81'

selectename,sal,hiredatefromempwherehiredate>

20-2月-1981'

#and处理,or处理

selectename,salfromempwheredeptno=10andsal>

1000;

selectename,salfromempwheredeptno=10orsal>

#模糊查询

selectenamefromempwhereenamelike'

%ALL%'

#%百分号表示1个或者多个

#查出名称第二个是A的

_A%'

#如果是%,用转义字符

selectenamefromempwhereenamelike'

%/%%'

#用escape识别转义字符

%$%%'

escape'

$'

#按部门编号降序排列

select*fromdeptorderbydeptnodesc;

#按empno升序排列

selectempno,enamefromemporderbyempnoasc;

#默认是升序排列

#过滤后再排序

selectempno,enamefromempwheredeptno<

>

10orderbyempnoasc;

selectename,sal,deptnofromemporderbydeptnoasc;

#排序两个条件

selectename,sal,deptnofromemporderbydeptnoasc,sal;

#综合排序条件

selectename,sal*12annual_salfromempwhereenamenotlike'

andsal

800orderbydeptno;

#SQL函数

selectlower(ename)fromemp;

#转换成小写

#第二个字母是a的

selectenamefromempwherelower(ename)like'

_a%'

#或者

orenamelike'

#截取字符串

selectsubstr(ename,2,3)fromemp;

#从第二个字符串开始,截取3个字符串

selectascii('

A'

)fromdual;

#查出ascii码

selectround(23.652)fromdual;

#四舍五入

#四舍五入,保留小数点两位

selectround(23.652,2)fromdual;

selectround(23.652,1)fromdual;

selectround(23.652,-1)fromdual;

#把数字或者日期转换为某种形式

selectto_char(sal,'

$99,999.9999'

)fromemp;

#9代表一位数字

#人民币

selectto_char(sal,'

L99,999.9999'

#对日期进行转换

selecthiredatefromemp;

selectto_char(hiredate,'

YYYY-MM-DDHH:

MI:

SS'

selectto_char(sysdate,'

YYYY-MM-DD'

selectename,hiredatefromempwherehiredate>

to_date('

1981-2-2012:

34:

36

YYYY-MM-DDHH24:

Mi:

selectsalfromempwheresal>

to_number('

$1,250.00'

$9,999.99'

#计算年薪,如果comm是为null的话,则让其显示0

selectename,sal*12+nvl(comm,0)fromemp;

#max函数

selectmax(sal)fromemp;

#min函数

selectmin(sal)fromemp;

#avg函数

selectavg(sal)fromemp;

#avg函数,将其转换成to_char形式

selectto_char(avg(sal),'

99,999.9999'

#保留两位小数

selectround(avg(sal),2)fromemp;

selectsum(sal)fromemp;

selectcount(*)fromemp;

selectcount(*)fromempwheredeptno=10;

selectcount(ename)fromemp;

#14条记录

selectcount(distinct(deptno))fromemp;

#3条记录

#groupby语句

selectavg(sal)fromempgroupbydeptno;

selectmax(sal)fromempgroupbydeptno,job;

selectenamefromempwheresal=(selectmax(sal)fromemp);

selectdeptno,max(sal)fromempgroupbydeptno;

#having子句,使用having对分组进行限制

selectavg(sal),deptnofromempgroupbydeptno;

selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)>

2000;

selectavg(sal)fromempwheresal>

1200groupbydeptnohavingavg(sal)>

15

00orderbyavg(sal)desc;

#子查询

selectename,salfromempwheresal=(selectmax(sal)fromemp);

(selectavg(sal)fromemp);

#下面这么写法是错误的

selectename,sal,deptnofromempwheresal=(selectmax(sal)fromempgroupby

deptno);

#第1行出现错误:

#RA-01427:

单行子查询返回多个行

selectename,salfromempjoin(selectmax(sal)max_sal,deptnofromempgr

oupbydeptno)ton(emp.sal=t.max_salandemp.deptno=t.deptno);

#理解子查询的关键是把其当成一张表

#求出每个员工的上司是谁

selecte1.ename,e2.enamefromempe1,empe2wheree1.mgr=e2.empno;

selectename,dname,gradefromempe,deptd,salgradeswheree.deptno=

d.deptnoande.salbetweens.losalands.hisalandjob<

CLEAK'

#没有表连接,默认是笛卡儿积

selectename,dnamefromemp,dept;

selectename,dnamefromempcrossjoindept;

#有连接条件

selectename,dnamefromemp,deptwhereemp.deptno=dept.deptno;

selectename,dnamefromempjoindepton(emp.deptno=dept.deptno);

selectename,dnamefromempjoindeptusing(deptno);

#使用using的条件是两个表中有相同的字段

#1.PL/SQL

#PL/SQL是Oracle内部使用的编程语言,ProcedureLanguage过程语言,其语言格式比较固定

begin

dbms_output.put_line('

HelloWorld'

end;

#/表示执行

setserveroutputon;

#执行输出命令,默认是off(关闭)

declare 

#声明变量

v_namevarchar2(20);

begin

 

v_name:

='

myname'

#给变量赋值

dbms_output.putline(v_name);

end;

#打印:

myname,输出myname

#PL/SQL过程已成功完成 

declare

v_namenumber:

=0;

begin

=2/v_name;

dbms_output.put_line(v_name);

exception

whenothersthen

dbms_output.put_line('

error'

/

#去掉exception语句块

#则会出现如下错误:

除数为0在line4

#2.变量声明

#变量名不能使用保留字,如from,select等

#第一个字符必须是字母

#变量名最多包含30个字符

#不要与数据库的表或者列同名

#每一行只能声明一个变量

#3.常用变量类型

#binary_integer:

整数,主要用来计数而不是用来表示字段类型 

#number:

数字类型

#char:

定长字符串

#varchar2:

变长字符串

#date:

日期

#long:

长字符串,最长2GB

#boolean:

布尔类型,可以取值为true,false和null值.

declare

v_tempnumber

(1);

v_countbinary_integer:

--binary_integer是用来记数的,效率比较高一点.

v_salnumber(7,2):

=4000.00;

v_datedate:

=sysdate;

v_piconstantnumber(3,2):

=3.14;

v_validboolean:

=false;

v_namevarchar2(20)notnull:

MyName'

v_tempvalue:

'

||v_date);

#4.变量声明,使用%type属性

declare

v_empnonumber(4);

v_empno2emp.empno%type;

--表示emp表中empno的类型

v_empno3v_empno2%type;

Test'

--Table变量类型

typetype_table_emp_empnoistableofemp.empno%typeindexbybinary_integer;

v_empnostype_table_emp_empno;

v_empnos(0):

=7369;

v_empnos

(2):

=7839;

v_empnos(-1):

=9999;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1