Oracle知识点总结
1.数据库是什么
数据库是以一定的方式存储在一起,有组织的管理,能为多个用户共享具有尽可能小的数据冗余的特点,与应用程序彼此独立的数据集合
2.什么是数据库管理系统
1)是一种管理数据库的软件,数据库管理系统是为数据库的建立,使用和维护而配置的软件。它建立在操作系统的基础上,对数据库进行统一的管理和控制。用户使用的各种数据库命令以及应用程序的执行,都要通过数据库管理系统。还担任数据库的维护工作。
2)在Oracle数据库中,数据库仅仅是指文件集合,这些文件用来存储的管理相关数据,包含数据文件,控制文件以及重做日志文件
3.关系型数据库
(1)数据模型的是三个层次
概念模型,逻辑模型,物理模型
(2)关系模型的组成
1)关系数据结构
就是一张由列和行组成的二维数据表
2)关系操作集合
选择,投影,连接,增加,删除,修改
3)关系完整性约束
实体完整性,参照完整性,用户自定义的完整性
4 .结构化查询语言
(1)结构化查询语言分类
1)数据查询语言
也就是select语句 从表中检索数据
2)数据操作语言
增,删,改语句 用于对数据的操作
3)事务处理语言
COMMIT 和ROLLBACK 用于提交和回滚
4)数据控制语言
GRANT和REVOKE用于对权限的授予和收回
5)数据定义语言
CREATE,DROP,ALTER 用于对表的创建,删除和修改
5.SQL语句的概念
关键字,语句,字句
6.算术运算符
1)+,-,*,/ 优先级用数学运算一样
2)null 是一种无效的,为赋值的,未知的或不可用的值,不同于零和空格
任何包含空值的算术表达式运算后的结果都是空值 (可以用NVL来进行计算)
3)列别名的两种写法 1.列名 列别名
2.列名 as 列别名
4)连接运算符 || 用于连接列与列,列和字符
例如:SELECT FIRST_NAME||LAST_NAME FROM EMPLOYEES
5)原义运算符
– 原义字符串是包含在SELECT列表中的一个字符、一个数
字或一个日期。
– 日期和字符字面值必须用单引号引起来。
– 每个原义字符串都会在每个数据行输出中出现。
SELECT FIRST_NAME||'的工资是'||SALARY 工资 FROM EMPLOYEES
结果:
Steven的工资是24000
6)消除重复行 DISTINCT
7 .比较操作符
1)比较运算符>,<,<=,>=,=
注意下不等于的这样的 <>
2)特殊比较运算符
between… and… 在范围之内,in 比较的值和集合列表的任何一个之相等,like 是否满足部分匹配(%代表零个或者更多的字符,_代表一个字符),is null 是否为空
3)逻辑运算符
AND OR NOT也就是逻辑与,或,非
8.运算符优先级
算术(+,-,*,/)>连接(||)>比较(>,<,>=,<=,<>)>特殊比较(BETWEEN..AND..,IN,LIKE,IS NULL)>逻辑非(NOT)>逻辑与(AND)>逻辑或(OR)
当然括号里面的才是优先的
9.字符函数
1)大小写转换
LOWER 字符全部转换为小写,
UPPER 字符全部转化为大写
INITCAP 每个单词的首字母大写,其余转小写
SELECT INITCAP('hello world') from dual
结果:
Hello World
2)字符处理函数
①INSTR (s1,s2,n1,n2) 子串s2 从 n1 开始第n2次出现的位置 ,n1,n2默认值都是1 例如:
SELECT INSTR('l love you','o',1,1) FROM dual
结果:
4
结果为‘o’在字符串‘i love you’中第一个字符开始位置,第一次出现的位置
②LPAD(s1,n1,s2) 返回s1 从被s2从左边填充至n1长度后的字符串。例:LPAD(sal 10 '*') ******5000
③RPAD(s1,n1,s2) 返回s1被s2从右面填充到n1长度后的字符串。
例:RPAD(sal,10,'*')5000******
④TRIM 去除字符串头部或尾部(头尾)的字符
例:TRIM('S' FROM 'SSMITH') MITH
REPLACE(’abc’,’b’,’d’) adc
⑤REPLACE(s1,s2,s3) 把s1中的s2用s3替换。
例:
CONCAT(‘Good’, ‘String’) GoodString
⑥CONCAT连接两个值等同于||
SUBSTR(‘String’,1,3)
⑦SUBSTR(str,n1,n2) 截取字符 从n1开始长度为n2的字符Str
SELECT LENGTH(‘i love you’) from dual `10
⑧LENGTH 取字符长度
10.数值函数
1)ROUND:将列或表达式所表示的数值四舍五入到小数点后的第n位。ROUND(45.926, 2) -> 45.93
2)TRUNC:将列或表达式所表示的数值截取到小数点后的第n位。TRUNC(45.926, 2) -> 45.92
3)MOD:取模MOD(1600, 300) ->100
11.日期函数
1) SYSDATE:返回系统当前日期
2)MONTHS_BETWEEN:返回两个日期类型数据之间间隔的自然月数
–MONTHS_BETWEEN 函数演示——查询所有员工服务的月数。
SELECT ename, sal, MONTHS_BETWEEN(SYSDATE,hiredate) months
FROM emp
ORDER BY months;
3) ADD_MONTHS:返回指定日期加上相应的月数后的日期
–ADD_MONTHS 函数演示——查询82年后入职的员工转正日期,
按照3个月试用期考虑
SELECT ename, sal, hiredate, ADD_MONTHS(hiredate,3) new_date
FROM emp
WHERE hiredate>'01-1月-82';
4)NEXT_DAY:返回某一日期的下一个指定日期
NEXT_DAY 函数演示——返回在02-2月-06之后的下一个周
一是什么日期。
SELECT NEXT_DAY('02-2月-06','星期一') NEXT_DAY
FROM DUAL;
5)LAST_DAY:返回指定日期当月最后一天的日期
– LAST_DAY 函数演示——返回06年2月2日所在月份的最后一
天。
SELECT LAST_DAY('02-2月-06') "LAST DAY"
FROM DUAL;
6) ROUND(date[,‘fmt’])将date按照fmt指定的格式进行四舍五入,
fmt为可选项,如果没有指定fmt,则默认为DD,将date四舍五入为最
近的天。
格式码:世纪CC,年YY,月MM,日DD,小时HH24,分MI,秒SS
–ROUND函数演示——查询81年入职的员工姓名,入职日
期按月四舍五入的日期。
SELECT empno, hiredate,
ROUND(hiredate, 'MONTH')
FROM emp
WHERE SUBSTR(hiredate,-2,2)=‘81';
7)TRUNC(date[,‘fmt’])将date按照fmt指定的格式进行截断,fmt为
可选项,如果没有指定fmt,则默认为‘DD’,将date截取为最近的
天。
TRUNC 函数演示——查询81年入职的员工姓名,入职日
期按月截断的日期。
SELECT empno, hiredate, TRUNC(hiredate, 'MONTH')
FROM emp
WHERE SUBSTR(hiredate,-2,2)=‘81';
8)EXTRACT:返回日期类型数据中的年份月份或者日
EXTRACT ([YEAR] [MONTH][DAY]
FROM [日期类型表达式])
12.转换函数
TO_CHAR,TO_DATE,TO_NUMBER
举例
SQL> SELECT TO_CHAR(sal,'$99,999') SALARY
2 FROM emp
3 WHERE ename = 'SCOTT';
SALARY
--------
$3,000
13.通用函数
1)NVL函数
– 语法:NVL (expr1,expr2)
– 如果expr1不是null,返回expr1,否则返回expr2
2)NVL2函数
–语法:NVL2(expr1,expr2,expr3)
–如果expr1不是null,返回expr2,否则返回expr3
3)NULLIF函数
–语法: NULLIF(expr1,expr2)
–比较两个表达式,如果相等,返回null,否则,返回第
一个表达式
4)CASE语句用法示例
--求员工的税额
SELECT SALARY,
(CASE
WHEN SALARY BETWEEN 0 AND 5000 THEN 0
WHEN SALARY BETWEEN 5000 AND 8000 THEN SALARY*0.10
WHEN SALARY BETWEEN 8000 AND 15000 THEN SALARY*0.15
WHEN SALARY BETWEEN 15000 AND 50000 THEN SALARY*0.2
ELSE SALARY*0.25
END) 应交税额 FROM EMPLOYEES