nuOracle数据库学习资料课件qyd.docx
- 文档编号:23694690
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:49
- 大小:265.51KB
nuOracle数据库学习资料课件qyd.docx
《nuOracle数据库学习资料课件qyd.docx》由会员分享,可在线阅读,更多相关《nuOracle数据库学习资料课件qyd.docx(49页珍藏版)》请在冰豆网上搜索。
nuOracle数据库学习资料课件qyd
Oracle的历史
•Oracle公司(甲骨文)创始人:
LarryEllison32岁,公司提供数据库服务.
•公司成立于1977年,83年公司更名为Oracle,原名为”软件开发实验室”.
•Oracle数据库适用于大型企业
•竞争对手
–微软的SQLServer
–IBM的DB2
•目前的版本
–2.0~7.0,8.0,8i,9i,10g
Oracle的服务:
我的电脑右键选择管理--服务和应用程序—服务
OracleServer
数据库服务,进程为ORACLE.exe
Oracle
监听器服务,进程TNSLSNR.exe默认端口1521、1526
OracleDBConsole
对应用于OEM
Oracle
对于于iSQL*Plus
这几个服务之间的关系:
启动顺序:
1、Oracle
2、OracleServer
3、OracleDBConsole
SqlPlus
SqlPlus是Oracle任何版本都自带的数据库操作工具,使用它可以完成大部分的数据库操作。
SqlPlus可以“开始程序Oracle”启动,也可以命令行启动(互动)
1.命令行启动sqlPlus
sqlplus用户名/密码@orcl
或
sqlplus用户名@orcl
如果用户是管理员要在sqlplus用户名/密码@主机字符串assysdba
“/”是用户名和密码分隔符号
“@”是密码和数据库的分隔符号
“orcl”是数据库的名称,在安装时指定
常用命令(互动)
connect切换用户
showuser显示当前用户
setlinesize1000设置行显示长度
setpagesize1000设置分页长度
descdept查看表结构
selecttable_namefromuser_tables
查询当前用户的表
/运行上一条SQL语句
clearscreen清除屏幕
edit编辑
spoold:
/a保存输出结果到某个位置
spooloff保存结束
quit退出
list查看最后一条语句
@文件名.sql运行外部文件中的SQL语句
Sql*plus的常用命令
是一个oracle提供的工具,使用此工具可以完成数据库的操作和管理。
SQL*Plus有两种工作方式:
1、基于图形界面的---sqlplusw
2、基于命令行的---sqlplus
Sql*plus中可以执行3种类型的命令:
1、SQL语句
SELECT*FROMtab;
2、PL/SQL语句
CREATETABLEtest(xnumber,infovarchar(20));
Commit;
编写一个存储过程,向test表中插入20条记录。
DECLARE
xnumber:
=10;
BEGIN
FORIIN1..20LOOP
INSERTINTOtestVALUES(x,’测试数据’);
x=x+i;
ENDLOOP;
END;
3、SQL*Plus内部命令
这些命令用于设置SQL*Plus的环境或格式化输出结果。
例如:
改变EMP表里SAL列的输出格式
COLUMNSALFORMAT$99,99HEADING‘薪水’;
使用SQL*Plus可以执行操作系统本身的命令:
例如:
在windows下的记事本notepad.exe
HOSTnotepad.exe;
退出SQL*Plus返回操作系统:
EXIT(QUIT)
帮助提示:
HELPSET ;
HELP@ ;
HELPED ;
清除屏幕:
CLEARSRC ;
SQL*Plus编辑命令
命令
缩写
作用
APPENDtext
A text
将text加到当前行末端
CHANGE/old/new
C/old/new
将当前行中的old改为new
CHANGE/text
C/text
从当前行中删除text
CLEARBUFFER
CLBUFF
清除全部行
DEL
删除当前行
INPUT
I
加入一行或多行
INPUTtext
Itext
加入由text组成的行
LIST
L
列出缓冲区中的全部行
LISTn
Ln或n
列出n行
LISTlast
Llast
列出最后一行
LISTmn
Lmn
列出m到n行
运行缓冲区的命令:
RUN或/
保存缓冲区中的内容为.sql文件:
SAVEf :
test ;
编辑或者读取命令文件.sql:
EDIT文件名;
在SQL文件中的注释有3种方法:
使用SQL*Plus的REMARK命令;
使用SQL注释分界符/*......*/
使用ANSI/SQL的“--”型注释
读取命令文件在SQL*PLUS中:
GETf:
\test.sql ;
运行.sql文件中的指令:
START或@,@使用更多
建议:
尽量使用记事本编写代码,这样有利于修改。
所需要的表
在所有的讲解中所要使用到的表全部都是scott用户下的表,所以必须了解在此用户下有那几张表,以及每张表的作用是什么。
避免出现汉字,因为实际开发中容易出现乱码问题。
雇员表(emp)
雇员表中记录的是一个个的雇员的基本信息。
雇员表(EMP)
No.
字段
类型
描述
1
EMPNO
NUMBER(4)
表示雇员编号,是唯一编号
2
ENAME
VARCHAR2(10)
表示雇员姓名
3
JOB
VARCHAR2(9)
表示工作职位
4
MGR
NUMBER(4)
表示一个雇员的领导编号
5
HIREDATE
DATE
表示雇佣日期
6
SAL
NUMBER(7,2)
表示月薪,工资
7
COMM
NUMBER(7,2)
表示奖金,或者称为佣金
8
DEPTNO
NUMBER
(2)
部门编号
部门表(dept)
表示一个个具体的部门信息部门表(dept)
No.
字段
类型
描述
1
DEPTNO
NUMBER
(2)
部门编号,是唯一编号
2
DNAME
VARCHAR2(14)
部门名称
3
LOC
VARCHAR2(13)
部门位置
工资等级表(SALGRADE)
一个公司工资是有等级制度,那么用此表表示一个工资的等级
工资等级表(SALGRADE)
No.
字段
类型
描述
1
GRADE
NUMBER
等级名称
2
LOSAL
NUMBER
此等级的最低工资
3
HISAL
NUMBER
此等级的最高工资
奖金表(BONUS)
表示的是一个雇员的工资及奖金
奖金表(BONUS)
No.
字段
类型
描述
1
ENAME
VARCHAR2(10)
雇员姓名
2
JOB
VARCHAR2(9)
雇员工作
3
SAL
NUMBER
雇员工资
4
COMM
NUMBER
雇员奖金(佣金)
范例:
查询每月可以得到奖金的雇员信息
·奖金是comm字段
·只要字段中存在内容,则表示此内容不为空(null),如果存在内容,则会显示具体的值。
·不为空的表示:
字段ISNOTNULL
SELECT*FROMempWHEREcommISNOTNULL;
范例:
查询没有奖金的雇员
·没有奖金则comm字段的内容肯定是null,格式:
字段ISNULL
SELECT*FROMempWHEREcommISNULL;
范例:
要求查询出,基本工资大于1500,同时可以领取奖金的雇员信息。
·此时应该是两个条件,而且两个条件必须同时满足
·既然要求两个条件全部满足,则必须使用AND操作符进行条件的连接。
SELECT*FROMempWHEREsal>1500ANDcommISNOTNULL;
同时指定了两个条件,两个条件必须同时满足才可以查询出结果。
范例:
要求查询出,基本工资大于1500,或者可以领取奖金的雇员信息。
·如果要表现出或者的概念使用OR进行连接,表示两个条件有一个满足即可。
SELECT*FROMempWHEREsal>1500ORcommISNOTNULL;
之前使用NOT可以取反,把真的条件变为假的,假的变为真的。
范例:
要求查询出,基本工资不大于1500,同时不可以领取奖金的雇员信息。
·此时相当于是整体的条件取反。
SELECT*FROMempWHERENOT(sal>1500ORcommISNOTNULL);
等价于
SELECT*FROMempWHEREsal<=1500andcommisnull;
从程序中可以发现,通过括号表示一组的条件。
范例:
查询基本工资大于1500,但是小于3000的全部雇员信息。
·满足两个:
sal>1500,sal<3000
SELECT*FROMempWHEREsal>1500ANDsal<3000;
在SQL语法中,提供了一个专门的指定范围查询的过滤语句:
BETWEEN…AND…
语法格式:
字段BETWEEN最小值AND最大值
例:
使用BETWEEN…AND修改之前的操作
SELECT*FROMempWHEREsal BETWEEN 1500AND3000;
实际上BETWEEN…AND操作等价:
sal>=1500ANDsal<=3000,包含了等于的功能。
范例:
查询出在1981年雇佣的全部雇员信息
·1981年1月1日~1981年12月31日之间雇佣的雇员
·日期表示的时候要加“'”
SELECT*FROMemp
WHEREhiredateBETWEEN'1-1月-81'AND'31-12月-81';
结论:
BETWEEN…AND查询除了可以支持数字之外,也可以支持日期的查询
·随着深入的学习会发现,日期实际上也是以数字的形式表示出来。
范例:
要求查询出姓名是smith的雇员信息
·此时告诉了要查询的名字,条件:
ename='smith'
SELECT*FROMempWHEREename='smith';
执行以上的查询语句之后,并不会返回查询结果,再次查询数据库表的信息,发现smith是采用大写的形式表示的,在Oracle中是对大小写敏感的,所以此时在查询的时候必须以大写的形式进行条件的编写。
代码修改如下:
SELECT*FROMempWHEREename='SMITH';
范例:
要求查询出雇员编号是7369、7499、7521的雇员的具体信息
·如果此时按照之前的做法,则设置条件要使用OR连接:
empno=7369ORempno=7499ORempno=7521
SELECT*FROMemp
WHEREempno=7369ORempno=7499ORempno=7521;
实际上,此时是指定了查询的范围,那么既然有范围了在SQL语法中就可以使用IN操作符完成。
语法格式:
字段IN(值1,值2,…..,值n)
如果现在要求查询的内容不在此范围之中,则可以使用NOTIN,语法如下:
字段NOTIN(值1,值2,…..,值n)
范例:
使用以上的格式进行修改
SELECT*FROMemp
WHEREempnoIN(7369,7499,7521);
范例:
要求查询出雇员编号不是7369、7499、7521的雇员的具体信息
SELECT*FROMemp
WHEREempnoNOTIN(7369,7499,7521);
另外,需要说明的是,使用IN操作符不光可以用在数字上,也可以用在字符串的信息上。
范例:
要求查询出姓名是SMITH、ALLEN、KING的雇员信息
SELECT*FROMemp
WHEREenameIN('SMITH','ALLEN','KING');
提示:
如果在指定的查询范围中指定了额外的内容,则不影响程序运行。
SELECT*FROMemp
WHEREenameIN('SMITH','ALLEN','KING','$#VC');
在一般的日常见到的站点中经常发现有模糊查找功能,即:
输入一个指定的关键字,把符合的内容全部查询出来,在SQL中使用LIKE语句完成。
在使用LIKE语句的时候要注意通配符的问题,在LIKE语句中主要使用以下两种通配符:
·“%”:
可以匹配任意长度的内容
·“_”:
可以匹配一个长度的内容
范例:
查询出所有雇员姓名中第二个字母包含“M”的雇员信息
SELECT*FROMemp
WHEREenameLIKE'_M%';
范例:
查询出雇员姓名中包含字母M的雇员信息
·此时,表示可以在任意的位置上出现字母M
SELECT*FROMempWHEREenameLIKE'%M%';
但是,要提醒大家的是:
“如果在使用LIKE的时候没有指定查询的关键字,则表示查询全部”
SELECT*FROMemp
WHEREenameLIKE'%%';
使用LIKE还可以方便的进行日期的查找功能。
范例:
要求查询出在1981年雇佣的雇员信息
SELECT*FROMemp
WHEREhiredateLIKE'%81%';
范例:
查询工资中包含6的雇员信息
SELECT*FROMemp
WHEREsalLIKE'%6%';
在操作条件中还可以使用:
>、>=、=、<、<=等计算符号
不等于符号:
在SQL中如果要想使用不等于符号,可以有两种形式:
“<>”、“!
=”
范例:
查询雇员编号不是7369的雇员信息
·使用“<>”完成
SELECT*FROMempWHEREempno<>7369;
·使用“!
=”完成
SELECT*FROMempWHEREempno!
=7369;
对结果进行排序(ORDERBY子句)(重点)
在SQL中可以使用ORDERBY子句对查询的结果进行排序,例如,现在使用查询全部的语句:
SELECT*FROMemp;
此时,从查询结果可以发现,是按照雇员的编号进行排序的,那么此时如果要对使用指定的列进行排序,则就必须使用ORDERBY语句,语法格式如下:
SELECT{DISTINCT}*|具体的列别名
FROM表名称
{WHERE条件(s)}
{ORDERBY排序的字段1,排序的字段2ASC|DESC}
ASC表示升序、DESC表示降序
范例:
要求按照工资由低到高排序
SELECT*FROMempORDERBYsal;
之前是按照由低到高的顺序完成,是采用的升序的形式,现在要求使用降序的形式完成。
实际上如果在排序的时候没有指定排序规则,则默认的排序规则是升序排列。
SELECT*FROMempORDERBYsalASC;
要想使用降序的方式完成,则使用DESC即可。
SELECT*FROMempORDERBYsalDESC;
范例:
要求查询出10部门的所有雇员信息,查询的信息按照工资由高到低排序,如果工资相等,则按照雇佣日期由早到晚排序。
·此时存在两个排序条件,第一个是降序,第二个升序
SELECT*FROMemp
WHEREdeptno=10ORDERBYsalDESC,hiredateASC;
排序的操作肯定是放在整个SQL语句的最后执行。
单行函数(重点)
数据库系统中,每个数据库之间唯一不同的最大区别点就在与函数的支持上,使用函数可以完成一系列的操作功能。
单行函数语法:
function_name(column|expression,[arg1,arg2,…])
参数说明:
·function_name:
函数名称
·column:
数据库列名
·expression:
字符串或计算表达式
·arg1,arg2:
在函数中使用参数
单行函数分类:
·字符函数:
接受字符输入并且返回字符或数值
·数值函数:
接受数值输入并返回数值
·日期函数:
对日期型数据进行操作
·转换函数:
从一种数据类型转换为另一种数据类型
·通用函数:
NVL函数、DECODE函数
字符函数
Oracle中的dual表
Dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。
这是因为ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.当然这写内部操作是不可见的.
以下是dual的一些使用方法:
1、查看当前用户,可以在SQLPlus中执行下面语句
selectuserfromdual;
2、用来调用系统函数
selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual;--获得当前系统时间
selectSYS_CONTEXT('USERENV','TERMINAL')fromdual;--获得主机名
selectSYS_CONTEXT('USERENV','language')fromdual;--获得当前locale
selectdbms_random.randomfromdual;--获得一个随机数
3、可以用做计算器
select7*9fromdual;
1.ACII(x)返回字符x的ASCII码
selectascii('a')fromdual;
2.求ACSII(‘a’),ASCII(‘A”),ASCII(‘0’),ASCII(‘XYZ)’的值
3.CHR(X)返回ASCII码为X的字符
4.CONCAT(x,y)字符串拼接函数
selectconcat(concat(ename,'isa'),job)fromemp;
5.INITCAP(x)首字母大写
selectinitcap(ename)fromemp;
6.INSTR(x,y[,n][,m])确定y在x中的位置。
n是起始查找的位置,m第几次出现的位置。
selectinstr('HelloWorld!
','l',2)fromdual;
selectinstr('HelloWorld!
','l',2,3)fromdual;
7.LENGTH(x)字符串长度
selectename,length(ename)fromempwhereempno=7698;
8.LOWER(x)转换小写
selectlower(ename)fromemp;
9.UPPER(x)转换大写
10.LPAD(x,n[,y])在字符串x的左边补充字符串y,得到总长为n个字符的字符串。
可选参数y用于指定在x左边补充的字符串;省略参数y,默认值为空串。
selectlpad(ename,15,'$#@')fromemp;
11.RPAD(x,n[,y])
selectrpad(ename,15,'@#$')fromemp;
12.LTRIM(x[,y])从字符串x的左边截去包含在字符串y中的字符。
如果不指定参数y,则默认截去空格。
selectltrim('abcdab','a')fromdual;
13.RTIME(x[,y])
14.trim(x)去除左右空格
15.SUNSTR(x,n[,m])返回字符串x中的一个子串,这个子串从字符串x的第n字符开始,截取参数m个字符。
selectsubstr('abcsdfsdwfg',3,4)fromdual;
16.replace(x,y,z)将字符串x中所具有的子串y用子串z替换
selectreplace('jackandjue','j','bl')fromdual;
19.TRANSLATE(string,if,then)根据“if”中字符的位置,并检查“then”的相同位置,然后用该位置的字符替换“string”中的字符。
selecttranslate(ename,'AE','12')fromemp;
是专门处理字符的,例如,可以将大写字符变为小,还能求出字符的长度。
范例:
将小写字母变为大写字母
SELECTUPPER('smith')FROMDUAL;
范例:
一般用户在查询一个人姓名的时候有可能考虑到这个人的姓名是大写字母存的还是小写字母保存的呢?
·那么此时,为了方便用户的使用就可以使用upper函数完成。
SELECT*FROMempWHEREename=UPPER('Smith');
还可以使用lower()函数将一个字符串变为小写字母表示。
SELECTLOWER('HELLOWORLD')FROMdual;
还可以使用initcap()函数将单词的第一个字母大写
SELECTINITCAP('HELLOWORLD')FROMdual;
范例;使用此函数将雇员表中的雇员姓名变为开头字母大写
SELECTINITCAP(ename)FROMemp;
字符串除了可以使用“||”连接之外,还可以使用CONCAT()函数进行连接操作。
SELECTCONCAT('hello','world')FROMDUAL;
此时已经完成了连接,但是此种方式肯定不如“||”好使。
在字符函数中可以进行字符串的截取、求出字符串的长度、进行指定内容的替换
·字符串截取:
substr()
·字符串长度:
length()
·内容替换:
replace()
SELECTsubstr('hello',1,3)--截取字符串,
length('he
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nuOracle 数据库 学习 资料 课件 qyd