oracle笔记入门Word文档下载推荐.docx
《oracle笔记入门Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《oracle笔记入门Word文档下载推荐.docx(58页珍藏版)》请在冰豆网上搜索。
DML语句包含Insert,Update,Delete等常用语句
3.DDL语句
DDL语句包含Create,Alter,Drop等常用语句
4.事务控制语句
包含Commit,Rollback等常用语句
还有一大类语句:
叫DCL语句(DataControlLanguage),grant、revock主要用于权限的分配与回收,由于与开发关系不是十分密切,不做重点讲解
最重要的就是select语句,任何select语句全部要背过,select语句必考,不会考其它的
Select语句就是从表里把数据选出来
首先熟悉试验中的数据
Selecttable_namefromuser_tables;
Setpagesize100;
Setlinesize500;
Run/r执行上一条命令
Edit/ed调出缓存数据方便修改sqlplus不支持光标移动
第一条语句:
descemp;
desc表名;
列出表头==字段==列
Varchar2(50)可变字符串支持国际化
NUMBER(7,2)7位的数字,2位的小数
每行显示的宽度setlinesize200;
显示的条数setpagesize30;
emp雇员信息表
EMPNO雇员编号NOTNULLNUMBER(4)
ENAME雇员姓名VARCHAR2(10)
JOB工作岗位VARCHAR2(9)
MGR该雇员经理人的编号NUMBER(4)
HIREDATE入职时间DATE
SAL薪水NUMBER(7,2)
COMM津贴NUMBER(7,2)
DEPTNO雇员所在部门编号NUMBER
(2)
表内容:
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7566JONESMANAGER783902-4月-81297520
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN769808-9月-811500030
7876ADAMSCLERK778823-5月-87110020
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
7934MILLERCLERK778223-1月-82130010
dept部门信息表
DEPTNO部门编号NOTNULLNUMBER
(2)
DNAME部门名字VARCHAR2(14)
LOC部门所在地VARCHAR2(13)
内容:
DEPTNODNAMELOC
------------------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
salgrade薪水等级表
GRADE薪水等级NUMBER
LOSAL该等级的最低薪水值NUMBER
HISAL该等级的最高薪水值NUMBER
GRADELOSALHISAL
-------------------------
17001200
212011400
314012000
420013000
530019999
熟悉表里面的数据:
第一个select语句:
select*from表名;
Select*fromemp;
1.简单select语句:
例子1:
取出一张表中所有的数据
Select*fromemp;
例子2:
取出某些字段的值
Selectempno,ename,deptnofromemp;
1.包含算术表达式的sql语句
取出emp中所有人的年薪及名字
Selectename,sal*12fromemp;
在emp表中取出2*3的结果
Select2*3fromemp;
例子3:
取出2*3的一条记录
Select2*3fromdual;
--当我们需要显示一个结果的时候就用系统提供的dual虚表
例子4:
取出当前系统时间
Selectsysdatefromdual;
--sysdate在Oracle中表示当前系统时间
3.含有别名的sql语句
selectename,sal*12asannual_salfromempast
但是注意:
所有的别名全都都会自动变成大写
如果想让别名强制大小写混合可以使用双引号
Selectename,sal*12“Annual_sal”fromemp;
举例:
selectyearfrom(
、selectename,sal*12as"
YeaR"
fromemp)
注意可以这样select"
YeaR"
from(selectename,sal*12as"
如果想让别名中有空格也使用双引号
Selectename,sal*12“Annualsal”fromemp;
5.处理含有空值的字符串
算某人一年的年薪含有任何null值的数学表达式最后的结果都为空值
Selectename,sal*12+commfromempnvl
含有任何null值的字符串表达式中,null被当作空字符串处理
selectempno,ename||'
andhismanagernumberis'
||mgrfromemp;
selectename||'
andhis'
'
smgris'
||mgrfromemp
字符串连接符:
||
Select语句中用单引号表示字符串
6.在select中使用单引号
用两个单引号表示一个单引号
selectempno,ename||'
'
smanageris'
||mgrfromemp;
7.、
例子1:
selectdistinctdeptnofromemp;
--用distinct消除结果集中的重复信息
用distinct修饰多个字段的时候,指的是消除后面所有字段的组合重复结果
Selectdistinctjob,deptnofromemp;
--指job和deptno都相同的删除
使用where对数据库设定条件限制,where过滤条件,过滤相关的数据
1.等值判断
显示部门编号为10的所有员工的详细信息
select*fromempwheredeptno=10;
显示名字为KING的员工的详细信息
判断字符串是否相等时,字符串要用单引号引起来,单引号中字符串内容是要区分大小写的
Select*fromempwhereename=‘KING’;
2.非等值判断(>
<
>
=<
>
)
取出薪水大于2000的所有员工的名字和薪水
Selectename,salfromempwheresal>
2000;
字符串大小比较:
是比较字符串ASCII码值的比较,先比较第一字母,依次……
Selectename,salfromempwhereename>
‘DBA’;
取出所有部门号不是10的雇员的名字和薪水
Selectename,salfromempwheredeptno<
10;
取出薪水位于800和1500之间的雇员名字和薪水
Selectename,salfromempwheresal>
=800andsal<
=1500;
Selectename,salfromempwheresalbetween800and1500;
注意:
使用betweenand的时候,包含了最大值和最小值
3.空值的处理
取出津贴值为空的所有雇员的名字
Selectenamefromempwherecommisnull;
取出津贴不为空的所有雇员的名字
Selectenamefromempwherecommisnotnull;
4.In语句:
用于刷选某一个值
把薪水是800,1250,1500,2000的雇员信息取出来
Selectename,salfromempwheresalin(800,1250,1500,2000);
Selectename,salfromempwheresalnotin(800,1250,1500,2000);
也可以用于字符串操作
把名字为SMITH,ALLEN,KING的雇员取出来
Selectename,salfromempwhereenamein(‘SMITH’,‘ALLEN’,‘KING’);
注意名字要大写与数据库数据一致否则查不到
5.日期处理
Oracle默认的日期格式为:
DD-MON-RR
查询在81年2月20号以后入职的员工
Selectename,hiredatefromempwherehiredate>
’20-2月-81’;
’20-2月-1981’;
如果想用自己定义的日期格式,可以使用to_charorto_date函数,
6.AND,OR,NOT
查询部门标号为10并且薪水>
1000的员工
Selectename,deptno,salfromempwheredeptno=10andsal>
1000;
查询部门编号为10或者工作岗位为CLERK的员工
Selectename,deptno,jobfromempwheredeptno=10orjob=‘CLEARK’;
查询薪水没有位于800,1500,2000之中的员工
Selectename,salfromempwheresalnotin(800,1500,2000);
7.模糊查询
使用like关键字,和通配符%表示0个或多个字符,_表示1个字符
查询名字中含有ALL的人员
Selectenamefromempwhereenamelike‘%ALL%’;
查询第二字母中含有A的雇员
Selectenamefromempwhereenamelike‘_A%’;
查询名字中含有%等通配符的数据时,使用转义字符\
Escape自定义转移字符,系统默认的转义字符是‘\’
Selectenamefromempwhereenamelike‘%\%%’escape‘\’;
Selectenamefromempwhereenamelike‘%¥%%’escape‘¥’;
使用它orderby对数据进行排序
按照名字的升序进行排序
Selectename,salfromemporderbyename;
Selectename,salfromemporderbyenameasc;
用asc关键字指出按升序排列
按照雇员编号的升序排序
Selectename,deptnofromemporderbydeptno;
Selectename,deptnofromemporderbydeptnoasc;
按照名字降序排列
Selectename,deptnofromemporderbyenamedesc;
按照部门编号降序排列
Selectename,deptnofromemporderbydeptnodesc,enameasc;
常用SQL函数
1.Lower()函数将字符串全部转换成小写
将雇员中名字还有’A’或’a’的人员全部显示出来
Selectenamefromempwhereenamelike‘%A%’orenamelike‘%a%’;
Selectenamefromempwherelower(ename)like‘%a%’;
2.Upper()函数讲字符串全部转换为大写
TcltcltcLTcL
Selectenamefromemp
Whereupper(ename)like‘%TCL%’
Wherelower(ename)like‘%tcl%’
Selectenamefromempwhereupper(ename)like‘%A%’;
3.substr()函数
Stringsubstring(1,6);
从第一子串开始共截3个子串
Selectsubstr(‘Hello’,1,3)fromdual;
Hel
Substr可以省略第三个参数
从第二个字符开始,截取到整个字符串结束
Selectsubstr(ename,2)fromemp;
4.Chr()函数
求一个与某个ASCII码值对应的字符
Selectchr(65)fromdual;
5.Ascii()函数
例子:
求一个字符的ASCII码值
Selectascii(‘A’)fromdual;
6.round()函数对参数值进行四舍五入的操作
对23.652进行四舍五入操作
Selectround(23.652)fromdual;
24
可以指定四舍五入到小数点后几位
对23.652四舍五入到小数点后2位
Selectround(23.655,2)fromdual;
23.65
可以用负数指定小数点前面几位
对23.652四舍五入到小数点前1位
Selectround(23.652,-1)fromdual;
20
*7.to_char()
用于将数字或日期转换成特定的字符串,
To_char()有两个参数:
第一个参数:
需要进行转换的日期或数字
第二个参数:
特定的转换格式,对于数字有一下几个格式可以指定:
9代表数字,若果该位没有数字则不进行显示,但对于小数点后面的部分仍会强制显示
0代表一位数字,如果该位没有数字则强制显示0
$显示美元符号
L显示本地货币符号
.显示小数点
显示千分位符号
selectto_char(sal,‘$99,999.9999’)salaryfromempwhereename=‘ALLEN’;
$1,600.0000
selectto_char(sal,‘$00,000.0000’)salaryfromempwhereename=‘ALLEN’;
$01,600.0000
对于日期:
to_char()可以指定为下面的常用格式:
格式控制符含义
YYYY、YY-----------------------------代表4位,2位数字的年份
MM-----------------------------用数字表示的月份
MON-----------------------------月份的缩写对中文月份来说就是全称
DD-----------------------------数字表示的日
DY-----------------------------星期的缩写,对中文的星期来说就是全称
HH24、HH12---------------------------12小时或者24小时进制下的时间
MI-----------------------------分钟数
SS-----------------------------秒数
有了这些格式,就可以把日期自定义为任何格式
selectto_char(sysdate,‘YYYY年MM月DD日HH24:
MI:
SS’)fromdual;
2008-04-04
selectto_char(sysdate,'
YYYY"
年"
-MM"
月"
-DD"
日"
HH24:
SS'
)fromdual;
*8.to_date()函数
将特定的字符串转换成日期格式,这个函数有两个参数
第一参数:
自定义的日子字符串
第二参数:
指定这个字符串的格式
将1981年3月2日中午以后入职的雇员信息取出:
Select*fromempwherehiredate>
to_date(‘1981-03-0212:
00:
00’,‘YYYY-MM-DDHH12:
SS’);
*9.to_number()函数
将指定的字符串转换成数字格式,这个函数有两个参数
自定义的数字字符串
求薪水大于1200的员工信息
*10.nvl()函数
用来处理空值,这个函数有两个参数:
字段名或表达式,如果这个参数值为null,就返回第二参数值,否则返回第一参数值
求每个员工每年的年收入(12个月的薪水+津贴)
因为comm的值为null,想要得到正确的结果,必须讲null值转换为0
Selectename,sal*12+nvl(comm,0)fromemp;
*11.组函数包括5个函数:
(1).avg(字段名):
求平均值
(2).max(字段名):
求最大值
(3).min():
求最小值
(4).sum():
求总和
(5).count():
求记录的数量selectcount(ename)fromemp;
求薪水的总和、平均值、最大值和最小值
Selectsum(sal),avg(sal),max(sal),min(sal)fromemp;
求emp表中记录的数量
Selectcount(*)fromemp;
Count()可以对单独字段使用,得到的是所有非空记录的数量
求comm字段中所有非空记录的数量
Selectcount(comm)fromemp;
Count()可以和distinct一起使用,得到所有唯一值记录的数量
求emp表中deptno唯一的数量
Selectcount(distinctdeptno)fromemp;
函数名不是在所有数据库中通用
对表中的数据进行分组
计算每个部门的平均工资
首先将现有数据按照部门进行分组,然后再计算每个组员工的平均薪水。
Selectdeptno,avg(sal)fromempgroupbydeptno;
计算每个部门的最大工资
Selectdeptno,max(sal)fromempgroupbydeptno;
按照部门,和职位的最大薪水进行分组
Selectdeptno,job,max(sal)fromempgroupbydeptno,job;
使用groupby的规律:
出现在select列表中的字段,如果没有出现在组函数中,则必须出现在groupby子句中
典型错