oracle学习笔记.docx
《oracle学习笔记.docx》由会员分享,可在线阅读,更多相关《oracle学习笔记.docx(57页珍藏版)》请在冰豆网上搜索。
oracle学习笔记
---TESTday01
--查看系统时间
SELECTSYSDATEFROMdual
--DDL语句数据定义语言
CREATETABLEGUOHUA(
NAMEVARCHAR2(21)NOTNULL,
basecNUMBER(3)DEFAULT60,--在赋值过程中体现
oopNUMBER(3),
jvavaSENUMBER(3)
)
---查看表结构查看表属性,及属性的值得类型
DESCGUOHUA
---删除表
DROPTABLEGUOHUA
INSERTINTOGUOHUA(NAME,OOP,jvavaSE)
VALUES('SDF',34,23)
--查看表中内容
SELECT*FROMGUOHUA
--修改内容
UPDATEGUOHUA
SETBASEC=80
WHERENAME='SDF'
--删除一行
DELETEFROMGUOHUA
WHEREBASEC=60
******************DAY02********************
VARCHAR2必须指定长度,char可以不指定字节,默认为1.
4000长度2000长度
long在oracle是字符串,内容长度2GB
CLOB:
存储定长,变长字符串,内容长度4GB
************SELECT语句查询的意思
SELECT(字段,多字段用逗号隔开)表明
WHERE条件
列:
SELECTJOB,ENAME,SALFROMEMP_GH--查看表中的job,ENAME,SAL
WHEREJOB='CLERK'--满足job=clerk,也可以是大于等于号
SELECT*FROMEMP_GH
WHERESAL>2000
****************函数
***CONCAT(CHAR,CHAR)函数,用于连接字符串,变成一个字符串
SELECTCONCAT(ENAME,JOB)FROMEMP_GH
**可以将字符连接
SELECTCONCAT(ENAME,'傻逼')FROMEMP_GH
**CONCAT可以进行嵌套,现将两个字符串连接成为一个字符,在使用concat将下一个进行连接
SELECTCONCAT(ENAME,CONCAT(':
',JOB))FROMemP_GH
***||可以进行字符串连接,与java中的+号一样,更常用!
!
!
SELECTENAME||':
'||jobfromEMP_GH
***字符串长度LENGTH(VARCHAR2)
SELECTENAME,LENGTH(ENAME)FROMEMP_GH
***UPPER,LOWER,INITCAP
全大写,全小写,首字母大写
DUAL是伪表,是用来测试函数的,能查询出一条记录,查询的东西与任何字段无关的使用伪表
SELECT
UPPER('nh'),
LOWER('HELLO'),
INITCAP('helloWORLK'),
INITCAP('HELLOWORLK'),
INITCAP('HELLOWORLK')
FROMDUAL
**实例运用查找emp_gh表中的scott的人的信息所有信息
SELECT*FROMEMP_GH
WHEREENAME=UPPER('scott')
***TRIM/LTRIM/RTRIM
去掉字符去掉左端的字符串去掉右端的字符串
**去掉两段相同的字符,只能是单个字符,不能出现字符串,
SELECTTRIM('l'FROM'llllldfsfdlllllll')FROMDUAL
**去掉左端的字符,只要在右边参数出现过得字符,都去掉,不分顺序
SELECTLTRIM('SDDSSDDSDSDSLITE','SD')FROMDUAL
**去掉右端的字符,只要在右边参数出现过得字符,都去掉,不分顺序
SELECTRTRIM('LITESDDSSSDDDSDSDD','SD')FROMDUAL
**LPAD,RPAD补位函数
SELECTLPAD(SAL,9,'s')FROMemp_gh
SELECTRPAD(SAL,9,'s')fromemp_gh
SELECTLPAD(SAL,5,'')FROMEMP_GH
***SUBSTR截取字符串,下标开始是1,且第二个函数是个数,取都是从左往右取.
若第2个参数超过了界限,则就代表将后面全部取完
**从第十个位置开始取2个,
SELECT
SUBSTR('thinkinginjava',10,2)
FROMDUAL
**从倒数第7个开始取2个,
SELECT
SUBSTR('thinkinginjava',-7,2)
FROMDUAL
SELECT
SUBSTR('thinkinginjava',-7,100)
FROMDUAL
****INSTR查找字符的位置
查找In在thinkinginjava中从第四个位置开始,出现2次后的位置,如果没有则返回0
SELECT
INSTR('THINKINGINJAVA','IN',4,2)
FROMDUAL
**ROUND函数,四舍五人
如果第二个参数是0,可以省略.参数为负表示小数点前
SELECT
ROUND(55.12545,2),
ROUND(55.12545,0),
ROUND(55.12545),
ROUND(55.12545,-1),
ROUND(55.12545,-2)
FROMDUAL
**TRUNC函数,数值得截取,不做四舍五人
SELECT
TRUNC(45.2552,2),
TRUNC(45.2552,0),
TRUNC(45.2552,-1),
TRUNC(45.2552,-2)
FROMDUAL
**MOD(M,N),求余数,m/n的余数
SELECT
ENAME,SAL,MOD(SAL,1000)
FROMEMP_GH
***CEIL(N),FLOOR(N),向上取整,向下取整
SELECTCEIL(45.2)FROMDUAL//46
SELECTFLOOR(45.2)FROMDUAL//45*
***时间戳TIMESTAMP11个字节
**SYSDATE:
返回一个当前时间date类型
**SYSTIMESTAMP:
返回一个当前时间戳
SELECTSYSDATE,SYSTIMESTAMPFROMDUAL
******转换函数
**TO_DATE()时间转换函数,日期格式字符串中除了字母数值和符号之外,其他的字符串都
要使用双引号括起来
SELECT
TO_DATE('2012-12-205:
45:
5','YYYY-MM-DDHH24:
MI:
SS')
FROMDUAL
SELECT
TO_DATE('2012年12月20日5:
45:
5','YYYY"年"MM"月"DD"日"HH24:
MI:
SS')
FROMDUAL
***TO_CHAR()将制定格式的时间变成字符串
SELECT
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:
MI:
SS')
FROMDUAL
***DATE可以进行计算,
对DATE加减一个数值,等同于加减天数,
两个DATE之间相减,相当于相差的天数
DATE也可以比较大小,越晚越大
查看明天日期
SELECT
SYSDATE+1
FROMDUAL
查看日值时间
SELECT
ENAME,TRUNC(SYSDATE-HIREDATE,0)
FROMEMP_GH
**输入自己生日看活了多少天
SELECT
TRUNC(SYSDATE-TO_DATE('1930-02-21','YYYY-MM-DD'))
FROMDUAL
****LAST_DAY(DATE)查看给定日期的月底是哪天
SELECT
LAST_DAY(SYSDATE)
FROMDUAL
***ADD_MONTHS(DATE,I)给定date加i个月,如果i为负就是减去月
查看员工转正日期,在入职日期上面加上一个3月.
SELECT
ENAME,HIREDATE,ADD_MONTHS(HIREDATE,3)
FROMEMP_GH
查看员工20周年的纪念日
SELECT
ename,ADD_MONTHS(HIREDATE,12*20)
FROMEMP_GH
***MONTHS_BETWEEN(DATE1,DATE2)
返回date1余date2之间相差多少个月
***查看入职多少个月了
SELECT
MONTHS_BETWEEN(SYSDATE,HIREDATE)
FROMEMP_GH
**NEXT_DAY(DATE,i)
查看指定日期之后一天开始的周(i-1),列,5代表周4
今天周六
SELECT
NEXT_DAY(SYSDATE,1)//明天
FROMDUAL
SELECT
NEXT_DAY(SYSDATE,7)//下周六
FROMDUAL
*****LEAST/GREATEST函数
最小值/最大值
SELECT
LEAST(SYSDATE,SYSDATE+5)--最小值
FROMDUAL
SELECT
GREATEST(SYSDATE,SYSDATE+5)--最大值
FROMDUAL
****EXTRACT()获取指定时间分量的值
查看满足1981年入职的员工
SELECT
ENAME,HIREDATE
FROMEMP_GH
WHEREEXTRACT(YEARFROMHIREDATE)=1981
*******************null的含义
**创建表student
CREATETABLESTUDENT_GH(
IDNUMBER(4),
NAMEVARCHAR2(20),
GENDERCHAR
(1)
)
**查看
DESCSTUDENT_GH
**插入
INSERTINTOSTUDENT_GH
VALUES(1000,'李莫愁','F');
INSERTINTOSTUDENT_GH
VALUES(1001,'林平之',NULL);--显示插入
INSERTINTOSTUDENT_GH(ID,NAME)--隐身插入
VALUES(1002,'张无忌');
**查看内容
SELECT*FROMSTUDENT_GH
**修改性别
UPDATESTUDENT_GH
SETGENDER=NULL
COMMIT
**删gender为null的
判定是否为null是使用isnull或isnotnull
DELETESTUDENT_GH
WHEREGENDERISNULL
***null的计算
null与字符串a拼接,结果是字符串a
null与数字运算,结果是null
**查看emp表中的工资加奖金
SELECT
ENAME,SAL,COMM,SAL+COMM
FROMEMP_GH
**空值函数
NVL(A1,A2)
若A1为null,则返回A2值,该函数作用就是将null值转变成非null值A2
**查看工资
SELECTENAME,SAL,COMM,SAL+NVL(COMM,0)FROMEMP_GH
**查看每个人的奖金情况,
有奖金就显示有奖金,没有奖金就显示没有奖金
NVL2(A1,A2,A3),如果A1不为null返回A2,为null返回A3
SELECT
ENAME,COMM,
NVL2(COMM,'有奖金','没有奖金')
FROMEMP_GH
***TEST*********************
1:
查询emp表中数据,列出一列,内容为名字与职位
显示格式:
ename:
JOB
SELECT
ename||':
'||JOB
FROMEMP_GH
SELECT
CONCAT(ENAME,CONCAT(':
',JOB))
FROMEMP_GH
2:
查看每个员工职位的字符个数
SELECT
JOB,LENGTH(JOB)
FROMEMP_GH
3:
将所有员工的名字以小写形式,与首字母大写形式
查询出来,第一列为小写形式,第二列为首字母大写
SELECT
ename
FROMEMP_GH
WHERELOWER(eNAME)='ward'
SELECT
ename
FROMEMP_GH
whereINITCAP(ENAME)='Scott'
4:
将字符串'aaaaaabaaaaa'中左右两边的a去除
SELECT
trim('a'FROM'aaaaaaabbaaaaaa')
FROMDUAL
5:
显示每个员工的名字,要求显示10位,第一列左对齐效果,第二列右对齐效果
SELECT
RPAD(ENAME,10,'')
FROMEMP_GH
SELECT
LPAD(ENAME,10,'')
FROMEMP_GH
6:
截取字符串'DOCTORWHO'中的'WHO'
SELECT
SUBSTR('DOCTORWHO',8,3)
FROMDUAL
7:
查看'DOCTORWHO'中'WHO'的位置
SELECT
INSTR('DOCTORWHO','WHO',4)
FROMDUAL
8:
分别查看55.789四舍五入保留小数点后2位,整数位,十位后的
数字,显示成三列。
SELECT
ROUND(55.78,2),
ROUND(55.78),
ROUND(55.78,-1)
FROMDUAL
9:
分别查看55.789截取后保留小数点后2位,整数位,十位后的
数字,显示成三列。
SELECT
TRUNC(55.789,2),
TRUNC(55.789),
TRUNC(55.789,-1)
FROMDUAL
10:
查看每名员工工资百位以下的数字?
SELECT
ENAME,SAL,MOD(SAL,100)
FROMEMP_GH
11:
查看每名员工从入职到今天一共多少天,若有小数则向上取整。
SELECT
ENAME,HIREDATE,
CEIL(SYSDATE-HIREDATE)
FROMEMP_GH
12:
查看从2008-08-08号到今天为止一共经历了多少天?
SELECT
TRUNC(SYSDATE-TO_DATE('2008-08-08','YYYY-MM-DD'))
FROMDUAL
13:
将每名员工入职时间以例如:
1981年12月3日
的形式显示
SELECT
ENAME,JOB,
TO_CHAR(HIREDATE,'YYYY-MM-DD')
FROMEMP_GH
14:
查看每个员工入职所在月的月底是哪天?
SELECT
LAST_DAY(HIREDATE)
FROMEMP_GH
15:
查看每名员工转正日期(入职后3个月)
SELECT
ADD_MONTHS(HIREDATE,3)
FROMEMP_GH
16:
查看每名员工入职至今共多少个月?
SELECT
MONTHS_BETWEEN(SYSDATE,HIREDATE)
FROMEMP_GH
17:
查看从明天开始一周内的周日是哪天?
SELECT
NEXT_DAY(SYSDATE,1)
FROMDUAL
18:
查看82年以后入职的员工的入职日期,82年以前的按照
1982年01月01号显示。
格式都是DD-MON-RR(默认格式)
SELECT
ENAME,HIREDATE,
GREATEST(HIREDATE,TO_DATE('1982-01-01','YYYY-MM-DD'))
FROMEMP_GH
19:
查看每名员工的入职年份?
SELECT
ENAME,HIREDATE,
EXTRACT(YEARFROMHIREDATE)
FROMEMP_GH
20:
显示每个员工的总收入(工资加奖金),奖金为NULL的只看工资
SELECT
ENAME,SAL,COMM,
SAL+NVL(COMM,0)
FROMEMP_GH
21:
使用NVL2实现20题的需求
SELECT
ENAME,SAL,COMM,
NVL2(COMM,SAL+COMM,SAL)
FROMEMP_GH
*************************day03***********查询语句********************************
字句就是关键字+xx列SELECTenama
SELECT字段,表达式,函数
****别名
在使用表达式或函数时,字段变长,可以使用除关键字以外的作为别名
添加方式,1.AS别名SELECTTO_CHAR(HIREDATE,'YYYY-MM-DD')ASHIERDATE
2.在表达式后空格加别名,别名不能有空格SELECTTO_CHAR(HIREDATE,'YYYY-MM-DD')HIERDATE
3.要求区分大小写,使用双引号,且别名中间可以用空格SELECTTO_CHAR(HIREDATE,'YYYY-MM-DD')"HIERDATE"
SELECTENAME,SAL*12ASSAL,TO_CHAR(HIREDATE,'YYYY-MM-DD')ASHIREDATE
FROMEMP_GH
SELECTENAME,SAL*12SAL,TO_CHAR(HIREDATE,'YYYY-MM-DD')HIREDATE
FROMEMP_GH
SELECTENAME,SAL*12"sal",TO_CHAR(HIREDATE,'YYYY-MM-DD')"HIREDATE"
FROMEMP_GH
***WHERE条件语句>,<,>=,<=,<>(不等于),=
查找10号员工的信息,
SELECT*FROMEMP_GH
WHEREDEPTNO=10;
查找销售人员的信息
SELECTENAME,SAL,JOBFROMEMP_GH
WHEREJOB='SALESMAN'
查工资高于2000
SELECTENAME,SAL,JOBFROMEMP_GH
WHERESAL>2000
查部门不是10的信息
SELECTENAME,SAL,JOB,DEPTNOFROMEMP_GH
WHEREDEPTNO<>10
查找入职时间在1982-1-1之后的人员信息
SELECTENAME,SAL,JOBFROMEMP_GH
WHEREHIREDATE****ANDOR关键字,and的优先级高于or,及先计算and在计算or
满足条件SAL>1000或DEPTNO<>10
SELECTENAME,SAL,DEPTNOFROMEMP_GH
WHERESAL>1000ORDEPTNO<>10
满足条件SAL>1000且DEPTNO<>10
SELECTENAME,SAL,DEPTNOFROMEMP_GH
WHERESAL>1000ANDDEPTNO<>10
工资大于1000,job是salesman和
SELECTENAME,SAL,JOBFROMEMP_GH
WHERESAL>1000AND(JOB='SALESMAN'ORJOB='CLERK')
****LIKE条件
可以进行模糊匹配字符串,支持两个通用符
%:
0-多个字符串;_:
单一的字符
查看第二个字符为A的
SELECTENAME,SAL,JOBFROMEMP_GH
WHEREENAMELIKE'_A%'
***IN和NOTIN
IN(LIST),NOTIN(LIST)
JOB中包含'MANAGER'和'CLERK'的所有员工信息
SELECTENAME,JOB,SALFROMEMP_GH
WHEREJOBIN('MANAGER','CLERK')
JOB中不包含'MANAGER'和'CLERK'的所有员工信息
SELECTENAME,JOB,SALFROMEMP_GH
WHEREJOBNOTIN('MANAGER','CLERK')
***BETWEENAND在两者之间,小的在前,大的在后(包含上下线的一个范围[1500,3000],如果
大的在前,就会出现无结果)
SELECTENAME,SAL,JOBFROMEMP_GH
WHEREsalBETWEEN1500AND3000--[1500,3000]
***ISNULLISNOTNULL
***ANY和ALL条件
ANY(LIST):
大于列表其中之一即可
ALL(LIST):
大于列表所有
不能单独使用,要配合>,<,=等使用,一般在子查询中使用
SELECTENAME,SALFROMEMP_GH
WHERESAL>ANY(800,900,1500)--后期再列表中是,表达式,不是直接写结果.
***函数,表达式条件
SELECTENAME,JOB,SALFROMEMP_GH
WHERESAL*12>50000
SELECTENAME,SAL,JOBFROMEMP_GH
WHEREUPPER(ENAME)=UPPER('SCOTT')
***DISTINCT去除重复
查看公司中有哪些职位,单字段去重
SELECTDISTINCTJOBFROMEMP_GH
多字段去重,保证,多字段的组合没有重复的
SELECTDISTINCTJOB,DEPTNOFROMEMP_GH
*******排序ORDERBY语句
排序,ASC为升序,