oracle初步学习总结
1.介绍
1.1.定义
一种高效率、可靠性好的、适应高吞吐量的关系数据库
1.2.特点
可移植性好、使用方便、功能强
1.3.组成
Oracle数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例则是管理数据库文件的内存结构。
1.4.和mysql的区别
区别 |oracle|mysql
区别 | oracle | mysql |
---|---|---|
收费 | 收费 | 免费 |
并发 | 高并发强 | 高并发弱 |
内存 | 占用内存大 | 占用内存小 |
支持事务 | 支持 | 默认不支持 |
事务隔离级别 | read commited(已提交读) | repeatable read(可重复读) |
提交方式 | 默认手动提交 | 默认自动提交 |
2.安装
oracle和其可视化操作工具PLSQL的安装方式:
百度云链接:
https://pan.baidu.com/s/1uIYvhAsLyHm_SoJlGWXajg
提取码:omck
3.创建表空间和用户
3.1.表空间
(1)创建表空间
create tablespace itheima
datafile 'e:\oracleCode\itheima.dbf'
size 100m
autoextend on
next 10m;
注意:从上往下分别代表名称,位置,大小(M),自动扩容每次扩展10M
(2)删除表空间
drop tablespace 表空间名
3.2.用户
(1)创建用户
create user itheima
identified by itheima
default tablespace itheima
注意:
user后边是用户名
identifiedby 后边是用户的密码
default tablespace 后边是表空间名称
(2)给用户授权(否则无法登陆)
grant dba to 用户名
注意:
oracle有以下三种权限:
CONNECT角色:–是授予最终用户的权利
RESOURCE角色:–是授予开发人员的
DBA角色:拥有全部特权,是系统最高权限
4.oracle数据类型
5.表的管理
5.1.建表
(1)语法:
create table 表名(
字段名1 数据类型 [default 默认值],
字段名2 数据类型 [default 默认值],
...
字段名3 数据类型 [default 默认值],
);
(2)例子:
create table person(
pid number(10),
name varchar2(10),
gender number(1) default 1,
birthday date
);
5.2.删除表
DROP TABLE 表名
5.3.修改表
在sql中使用alter可以修改表
(1) 添加语法:
ALTER TABLE 表名称 ADD(列名1 类型[DEFAULT 默认值],列名2 类型[DEFAULT 默认值]...)
范例:在person表中增加列address
alter table person add(address varchar2(10));
(2) 修改语法:
ALTER TABLE 表名称 MODIFY(列名1 类型[DEFAULT 默认值],列名2 类型[DEFAULT 默认值]...)
范例:把person表的address列的长度修改成20长度
alter table person modify(address varchar2(20));
(3)修改列名:
ALTER TABLE 表名称 RENAME COLUMN 老列名 TO 新列名
范例:将emp表的ename字段名修改为ename2
alter table emp rename column ename to ename2
5.4. 数据库表数据的crud
(1)增加:
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...)
(2)修改:
全部修改:
UPDATE 表名 SET 列名1=值1,列名2=值2,....
局部修改:
UPDATE 表名 SET 列名1=值1,列名2=值2,....WHERE 修改条件;
(3) 删除
局部删除:
DELETE FROM 表名WHERE删除条件
删除所有:
DELETE FROM 表名
注意:oracle的事务对数据库的变更的处理,我们必须做提交事务才能让数据真正的插入到数据库中,在同样在执行完数据库变更的操作后还可以把事务进行回滚,这样就不会插入到数据库。如果事务提交后则不可以再回滚。
提交:commit
回滚:rollback
(4)查询
①基本查询:
select 字段名1,字段名2,... from 表名
②查询所有:
select 1 from 表名
select * from 表名
从效率上来说,1>anycol>*,因为不用查字典表
③条件查询
select 字段名1,字段名2,... from 表名 where 条件
5.5.序列
(1)背景:oracle 中列完成自动增长的功能, 需要用户手工依靠序列完成
(2)创建:
create sequence seqpersonid
increment by 1
start with 1
maxvalue 999999999;
注意:
sequence后是序列名,by、with、maxvalue后面分别是每次增加值,起始值,最大值
(3)使用
在插入数据时需要自增的主键中可以这样使用
insert into emp(eid,ename,hiredate) values(seqpersonid.nextval,'田七',sysdate)
注意:nextval :取得序列的下一个内容,currval :取得序列的当前内容
6.单行函数
6.1.字符串函数
(1)把小写的字符转换成大小的字符upper
select upper('yes') from dual
(2) 把大写字符变成小写字符lower
select lower('YES') from dual
(3) 首字母大写函数initcap
select initcap('yes') from dual
(4) 字符串链接函数||和CONCAT
①方式1:||
特点:链接个数无限制
Eg;
select ENAME || HIREDATE from EMP
SELECT '姓名:' || ENAME FROM EMP
SELECT '姓名:' || ENAME || 'TEST' || 'LALALA' FROM EMP
②方式2:CONCAT
特点:只能连接两个参数,两个以上需要嵌套
SELECT CONCAT(ENAME,HIREDATE) FROM EMP
SELECT CONCAT('姓名:',ENAME) FROM EMP
SELECT CONCAT(CONCAT(CONCAT('姓名:',ENAME),'TEST'),'LALALA') FROM EMP
(5) 字符串截取函数substr
格式1.从str的a位置截取长度为b的字符串
select substr(str,a,b) from dual
格式2.substr(str,a),从string1的第a个字符开始截取后面所有字母
select substr(str,a) from dual
(6) 字符串替换函数replace和translate
① TRANSLATE(char, from, to)
作用:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
若from比to字符串长,那么在from中比to中多出的字符将会被删除
Eg:
select translate('abcdefga','abc','wo') from dual
结果:wodefgw
分析:该语句要将’abcdefga’中的’abc’转换为’wo’,
由于’abc’中’a’对应’wo’中的’w’,
故将’abcdefga’中的’a’全部转换成’w’;
而’abc’中’b’对应’wo’中的’o’,
故将’abcdefga’中的’b’全部转换成’o’;
'abc’中的’c’在’wo’中没有与之对应的字符,
故将’abcdefga’中的’c’全部删除;
② REPLACE(str, oldStr,newStr)
作用:将str字符串中oldStr全部转换为字符串newStr。
Eg:
select replace('abcdefga','abc','wo') from dual
(7) 获取字符串长度函数:LENGTH和LENGTHB
①返回字符串长度:
SELECT LENGTH('你好') FROM DUAL
②返回字符串的字节长度
SELECT LENGTHB('你好') FROM DUAL
6.2.数值函数
(1) 四舍五入函数ROUND()
select round(26.18,1) from dual
(2)取余函数mod
select mod(10,3) from dual
(3)向下取整函数
select trunc(56.16) from dual
6.3.日期函数
(1)sysdate:当前时间
eg:
查询雇员进入公司的天数(sysdate –入职日期)/7就是周数
select sysdate-e.hiredate from emp e
(2)MONTHS_BETWEEN(dateA,dateB):两个时间段之间的月份差
注意:在日期加减时有一些规律
日期–数字= 日期
日期+ 数字= 日期
日期–日期= 数字
6.4. 转换函数
(1)TO_CHAR:字符串转换函数, 可以将年月日分开
范例:查询所有的雇员将将年月日分开,此时可以使用TO_CHAR函数来拆分
拆分时需要使用通配符
年:y, 年是四位使用yyyy
月:m, 月是两位使用mm
日:d,日是两位使用dd
select ename,
to_char(hiredate,'yyyy') 年,
to_char(hiredate,'MM') 月,
to_char(hiredate,'dd') 日
from emp
(2) TO_DATE:日期转换函数,可以把字符串的数据转换成日期类型
insert into emp(ename,hiredate) values('田七',to_date('1996-12-04','yyyy-MM-dd'))
6.5. 通用函数
(1)空值处理nvl
nvl(comm,0):comm字段值为null的用0表示
(2)decode:类似if-else
语法:
DECODE(col/expression, [search1,result1],[search2, result2]....[default])
Col/expression:列名或表达式
Search1,search2…:用于比较的条件
Result1, result2…:返回值
如果col/expression和Searchi匹配就返回resulti,否则返回default的默认值
(3)case when类似if-else
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
7.多行函数(聚合函数)
7.1.统计记录数count()
eg:查询所有员工记录数
select count(*) from emp
注意:建议使用count(字段名),它比count(*)效率高
7.2.最小值查询min()
eg:查询出来员工最低工资
select min(sal) from emp
7.3.最大值查询max()
eg:查询出来员工最高工资
select max(sal) from emp
7.4.查询平均值avg()
eg:查询出来员工平均工资
select avg(sal) from emp
7.5.求和函数sum()
eg:查询出来员工工资总和
select sum(sal) from emp