Oracle基本知识点总结
目录
第一章
认识下相关数据库概念
1.数据库(DB):存放数据的仓库,按一定的格式存放在计算机中,可以共享
2.数据库管理系统(DBMS):位于用户和操作系统之间的一层数据管理软件,它为用户或用户程序提供了访问DB的方法。
3.数据系统(DBS):方便多用户访问计算机硬件,软件和数据资源组成的系统。
4.数据库管理员(DBA):数据库管理者的操作者
5.用户:数据库应用程序的使用者
常见数据库及数据库存储结构
1. 数据库管理系统
- oracle 大型数据库
- mysql 中小型
- sql server 大型
- DB2 中小型
- Acess 小型
2. 数据库存储结构
- 网状结构
- 层次结构
- 二维表结构:可以清晰的将数据与数据之间的关系表述清楚
注意:单纯的存储数据会比较简单,但是存储好数据又要将数据之间的关系描述清楚就会比较困难,所以采用二维表结构存储数据的方式比较合理
第二章
sql语言的学习
相关表
**所有例题的表我放这里,你们可以参考下**
员工表(emp)
部门表(dept)
部门地址表(city)
工资等级表(salgrade)
单表查询
- 查询表的全部数据
select * from 表名 *代表所有
例:select * from emp
- 查询表中指定字段的值
select 字段名,字段名,… from 表名
例:select ename,job,from emp
- 给查询结果中的字段使用别名
select 字段名 as ”别名“ from 表名
例 select ename as “员工姓名” from emp
注意:as 可以省略不写,当别名中没有特殊字符也可以省略不写
- 去除重复(按照行进行去除)
例:select distinct 字段名,… from 表名
select distinct ename from emp
- 排序( 默认的是升序的)
select * from 表名 order by 需要排序的字段名 desc –降序 --asc升序
例:select * from emp order by desc
select empno,ename,job from emp order by ename asc
多字段排序:
例: select * from 表名 order by 字段名1,字段名2…(依次排序)
select * from emp order by empno,ename
where子句查询
1.使用where条件进行筛选
语法:select * from 表名 where 筛选条件
注意:条件中字段值区分大写,字段名不区分,字段值需要使用单引号括起来
使用: 条件中常用的算术表达式 >,<, =,<=,>=,<>
使用order by语句需要写在where的后面
下面那些属性名和结果你们先别看,主要注意他们的语法就行
例:查看公司等于1250员工的信息
select * from emp where sal=‘1250’–筛选条件是个数字也可以使用单引号
例: 查看工作等于CLERK的员工信息
select * from emp where job=‘CLERK’–在筛选条件中字段值如果是字符需要加上单引号例:查看入职日期在81年后的员工信息
select * from emp where hiredate>‘1981年12月31号’
2.where子句使用关键字(常用的关键字有 and,or,in,like,is not null ,is noll)
1、and 用于多条件的与筛选:select * from 表名 where 条件 and 条件 and 条件....
2、or 用于多条件的或筛选: select * from 表名 where 条件 or 条件 or 条件....
3、in 用于多条件的或筛选: select * from 表名 where 字段名 in(值,值,值....)
4、like用于模糊查询: select * from 表名 where 字段名 like '%值%' 包含
5、is null 和is not null 用来判断字段是否为空 select * from 表名 where 字段名 is null
注意: % _和它们的位置有关、
例如“%A”:表示查询以A结尾字符的信息,“A%”表示查询以A开头字符的信息, “%A%”表示查询包含A字符的信息
> 使用like关键字时 % 表示查询一个或多个字符
> _表示查询一个字符
函数学习
单行函数
特点:1.不改变真实的数据,只是在对数据进一步的修饰或者处理结果
2.可以个字段混合使用
1.字符函数:LOWER(把字符转小写)、UPPER(把字符转大写)、以及INITCAP(首字母大写)
查询所有的员工信息,员工姓名首字母大写,工作属性列的值转小写。
例:select initcap(ename),lower(job),from emp
2.数值函数:对数值类型的数据进行运算
- abs:取绝对值
- ceil:向上取整
- floor:向下取整
例:select abs(-4),ceil(2.2),floor(3.3),power(2,3)as m的n次幂,mod(10,3)as 取余数,round(4.55),trunc(10/3,2) from dual
3.日期函数
select months_between(‘01-8月-2020’,‘01-3月-2020’) from dual–返回两个日期间的月份数
select add_months(‘01-8月-2020’,4) from dual–返回指定月数后的日期
select next_day(‘01-8月-2020’,‘星期二’)from dual–查询最近的星期的日期
select last_day(‘01-8月-2020’)from dual–返回当月的最后一天的日期
select round(to_date(‘01-8月-2020’),‘DAY’)from dual–按照星期进行四舍五入
多行函数(avg,count,max,min,sum)很重要
作用:对查询的数据进行统计
使用:select 多行函数(字段名),多行函数(字段名) from 表名
注意:多行函数不能和普通字段以及单行函数混用,除非分组
–max(字段名) 返回该字段的最大值
–min(字段名) 返回该字段的最小值
–sum(字段名) 返回该字段的和
–avg(字段名) 返回该字段的平均值
–count
–count(*) 返回表的记录数
–count(字段名) 返回非空值的数量
–count(distinct 字段名) 去除重复后的字段值的数量
例:查看员工的最高工资
select max(sal) from emp --多行函数不能和字段直接混用,除非分组。
查询公司有多少员工
select count(*) from emp–查询表的记录数
查看员工的平均工资
select avg(sal) from emp
转换函数
- to_number(数值类型的字符)
- to_number(数值类型的字符):将字符转换为数值
- to_char(数值或者是日期):将数值或者日期转换为字符
- to_date(日期格式的字符):将字符转换为日期
- LAST_DAY()返回指定日期对应月份的最后一天
1.数值和字符的互转
- 字符转换为数字char---->number
select to_number(‘123’)+2 from dual
- 数字转换字符number—>char
指定显示格式: 9表示位置占位,例如999,999,999会将数字按照三个一组使用逗号隔开。 L表示人民币符号,$表示美元符号 0可以进行占位分组,但是如果真实数据位数不足,会使用0进行补位
select to_char(12345,’$999,999,999’) from dual
select to_char(12345,‘L999,999,999’) from dual
select to_char(12345678,‘000,000,000,000.000’) from dual
2.日期和字符的互转
一般使用方式:新增数据使用to_date(),查询数据使用to_char()
- 字符转化为日期:char–>date
使用to_date(‘要转换的字符’,‘日期格式’)函数将字符转化为日期
注意1:字符必须符合日期格式
注意2: oralce默认的转换格式为日月年,例如’01-1月-2018’ oracle认为是一个日期
常用日期格式:
yyyy-mm-dd
yyyy/mm/dd
查询员工入职日期在82年后的信息
select * from emp where hiredate>to_date(‘1982-01-01’,‘yyyy-mm-dd’)
select * from emp where hiredate>to_date(‘1982/01/01’,‘yyyy/mm/dd’)
- 日期转换为字符 date—>char
使用to_char(‘要转换的日期’,转换格式) 注意1:如果不指名转换格式,则使用默认格式,日月年例如:‘01-1月-81’
常用转换格式:
yyyy-mm-dd
yyyy/mm/dd
‘yyyy"年"mm"月"dd"日"’
select to_char(hiredate)from emp–使用默认格式将日期转换为字符
select to_char(hiredate,‘yyyy-mm-dd’)from emp
select to_char(hiredate,‘yyyy/mm/dd’) from emp
select to_char(hiredate,‘yyyy"年"mm"月"dd"日"’) from emp
其他函数
nvl()(字段名,新的值)
如果字段不为null,则返回该字段的值,如果null则返回新的值
nvl2():nvl(字段名,处理一,处理二)
如果字段不为null,则执行处理1,为null执行结果2
decode():decode(字段名,值1,处理1,值2,处理2,值3,处理三,...,公共处理)
查询员工的工资信息
select ename,job,sal from emp
查询员工的薪水信息
select ename,job,sal+nvl(comm,0) from emp
select ename,job,sal+nvl2(comm,sal+comm,sal) from emp
显示员工的职称
select ename,job,decode(job,‘SALESMAN’,‘经理’,‘PRESIDENT’,‘董事长’,‘普通员工’) from
emp
group by分组
1.SQL查询语句的结构
select 子句 要查询的数据(oracle函数,别名,连接符,去除重复,逻辑运算)
from语句 决定要查询的表(表名)
where子句 筛选数据(筛选条件,关键字)
group by子句 分组 (分组字段)
having子句 分组筛选 (多行函数筛选条件)
order by子句 排序 (排序)
运行循序:from-->where--->group by-->select--->having--->order by
2.group by分组后使用having关键字
使用关键字:having
作用:针对分组进行分组后的数据筛选,允许使用多行函数。
注意:having关键必须和分组结合使用。不允许单独使用,并且having关键字必须得在group by关键字的后面
注意:
1.使用了分组后,在select语句中只允许出现分组字段和多行函数
2.如果是多字段分组,则先按照第一字段分组,然后每个小组继续按照第二个字段继续分组,以此类推。
3.在where子句中不允许出现多行函数。
3.where和having关键字不同
- where子句中不允许出现多行函数,having允许出现多行函数
- where子句和having都可以使用普通字段进行筛选,但where效率高于having
- where执行顺序:from–>where–>