--------------------------------------------------------------------------------------------------------
简介:
Oracle数据库:
一、oracle数据库的安装:
oracle官网下载数据库安装包,两个全下载......
解压:将下载的两个包一起同时解压到一个包中(否则安装不成功);
安装:steup.exe双击就可以安装
二、 安装成功之后需要解锁
1)开始----cmd窗口输入 sqlplus / as sysdba 出现一段文字 ,有连接到表示连接成功。
2)解锁----连接成功后 sql>alter user scott(用户) account unlock;
3)修改密码 --用户解锁成功后修改密码 alter user scott identified by 新密码
4)用客户端工具连接oracle数据库就可以使用。
oracle自带的客户端工具:DOS版的sql plus/ 界面版的叫sqldeveloper/第三方:PLSQLdeveloper
三、使用客户端连接oracle————下载客户端工具
解压后在bin目录找到sqldeveloper.conf去设置 SetJavahome ;
打开输入连接参数:
连接名:无所谓
用户名:别人给的
密码: 别人给的
主机名:本地localhost 其他机器就是其他机器的ip地址(注意这是需要设置的,设置oracle的监听)
端口:安装时有提示,一般不去改他。1521
sid:默认的orcl.
四、oracle的数据类型
1、 数字型:number(p,s); p表示总位数 s表示小数位
sal(变量名) number(8,2),表示整数位6位,小数位2位,若没有指定s或s为0,则表示整数
2、char(N):表示固定字节的字符型。比如 job(变量名) char(20)表示20个字节,占用的空间就20个。
虽然有时字节没有占到20个字节,但是在内存中的空间就是20 ,是固定的。
----------最大限度不超过2000
3、varchar2(N):表示可变长度的字符型。
例:job varchar2(20),表示最大长度是20,实际数据多少就占用多少空间
----------最大限度不超过4000
4、 long和clob
long可以认为是varchar的加长版,存变长,最大2G。
long的不足:(基本不用)
每一张表只能出现一个long类型的
不能是主键
不能建立索引
不能出现在查询条件中
clob存储可以是定长也可以是变长,最大4GB。一般用clob代替long
注意: char和varchar的区别
① char :定长,达不到定长长度空格补齐; 浪费空间换取查询效率。
varchar2:变长,实际数据多少就多少; 节约空间但是比char查询效率低。
② char可以不指定长度,默认一个字节。varchar必须指定长度。
③ 字符串的字符编码:
字符串存储长度都是按字节计算的。
每一个英文在数据库中占一个字节。
中文:GBK 2个 UTF-8:2-4个字节
4、date:定义日期时间格式的数据,长度默认7个字节 格式:默认格式是:DD(日)-MON(月)-RR(年)
例:heridate date 表示时间。
五、Oracle函数操作
1、字符串的函数操作
1.1、字符串拼接函数concat和 ||
concat 例句:select concat(concat(ename,':'),sal)from emp;
|| 例句:select ename||':'||sal||':'||mgr from emp;
注意:concat只能用于两个字符串的拼接,若要拼接第三个,则需要用到两个concat,如上例句
concat()用于字符串的拼接,但多个拼接比较繁琐,建议用字符串拼接符号||
1.2、length()返回字符串的长度,varchar返回实际长度,char返回的是定长。
例:select ename,length(ename)from emp;
注意:如果字符串中有中文,也将中文的字节长度返回。
1.3、将字符串中的字母进行转换(dual:伪表)
upper():将字符串所有字母转大写——select upper('hello world') from dual;
lower():将所有字符串转成小写——select lower('HELLO WORLD') from dual;
initcap():将所有的字符串单词的首字母转大写——select initcap('hello world') from dual;
注意:函数中间是单引号,不能写双引号
1.4、--trim()函数用于截去字符串,如果没有给定截去字符,则截去空格
select trim('e'from'eelitee')as t1 from dual;-----结果-----lit
--ltrim()函数用于截去左边的字符串,如果没有给定截去字符,则截去空格
select ltrim('eelitee','e')as t2 from dual;-----结果-----litee
--rtrim()函数用于截去右边的字符串,如果没有给定截去字符,则截去空格
select rtrim('eelietee','e')as t3 from dual;-----结果------eeliet
--将上面三个函数整合到一张表中,分别用别名显示在表中的字段
select trim('m'from'museum')as t1,ltrim('museum','m')as t2,rtrim('museum','m')as t3 from dual;
1.5、补位函数 pad 有左补位lpad()和右补位rpad();
select rpad(ename,10,' '),lpad(sal,6,'$') FROM emp;
1.6、截取字符串中字串函数substr()
将字符串从m位开始,截取n个字符串,注意字符串首位从1开始,空格也算上去截取的
m为0直接从字符串首位开始,m为负数从字符串尾部开始,n大于字符串长度,直接截取到字符串的尾部。
例:--截取字符串中的字串
select substr('doctor who travels tradis',0,24) from dual;-----结果-----doctor who travels tradis
--将字符串chinasofti中的softi截取出来
select substr('chinasofti',6,10)as s from dual;------结果------softi
1.7、instr()函数用来返回指定字符串在源字符串中的位置,注意字符串首位从1开始,空格也算上去截取的
例:select instr('doctor who travels tradis','who')as indext from dual;-----结果-----8
2、数值操作函数
2.1、number(p):表示数值类型,p表示整数位也表示数值的总位数,取值的范围是1-38.----用来存id 年龄等数字
number(p,s):p表示总位数(包括s),取值1-38,s表示小数后面的位数。---用来存金额。
注意:如果指定是s,没有指定p,p默认就是38位
2.2、round(n,m)对数值进行四舍五入操作
SELECT ROUND(46.768,2) FROM DUAL;--46.77
SELECT ROUND(46.768,1) FROM DUAL;--46.8
SELECT ROUND(46.768,0) FROM DUAL;--47
SELECT ROUND(46.768,-1) FROM DUAL;--50
m必须是整数,默认的是0.可以是负数也可以正数,表示小数点后第几位
2.3TRUNC()函数用于截取数字(舍弃)
SELECT TRUNC(46.768,2) FROM DUAL; --46.76
SELECT TRUNC(46.768,1) FROM DUAL; --46.7
SELECT TRUNC(46.768) FROM DUAL; --46 不写相当于默认就是0
SELECT TRUNC(46.768,-2) FROM DUAL; --0
2.4MOD()函数用于取模
SELECT ENAME,SAL,MOD(SAL,1000) AS RESULT FROM EMP;--表示m取模于n后的结果
SELECT ENAME,SAL,MOD(SAL,0)AS RESULT FROM EMP;--如果n为0,直接返回m
2.5CEIL()/FLOOR()取天花板或地板函数
SELECT CEIL(46.768)AS RESULT FROM DUAL;--47取比当前小数大的整数
SELECT FLOOR(46.768)AS RESULT FROM DUAL; --46取比当前小数小的整数
3、 Oracle日期操作
3.1、日期类型:date内部7个字节 分别表示 世纪 年 月 日 时 分 秒
timestamp 时间戳 最大精度达到11个字节,前7位于date相同,8-11表示纳秒,4个字节存储
日期关键字:sysdate 用于获取系统时间,精确到时分秒,但是只显示年月日
可以将sysdate作为某一列的默认值也可以作为新值插入到表中
systimestamp也是Oracle的内部日期函数,返回当前系统日期和时间,精确到毫秒。
3.2、日期转换函数
——字符串转为日期
查询2002以前入职的员工
TO_DATE()将给定的字符串以指定的格式进行转换
SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE<TO_DATE('2002-01-02','YYYY-MM-DD');
——日期转换为字符串
to_char()是将日期按照指定的格式转换成字符串
将此时的系统时间转换为 xxxx年xx月xx日 xx时xx分xx秒
SELECT TO_CHAR(SYSTIMESTAMP,'YYYY"年"mm"月"dd"日"hh24"点"mi"分"ss"秒"day')FROM DUAL;
3.3、日期常用函数
—— last_day();
返回当月的最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL;
指定返回15年2月份的最后一天是多少
SELECT LAST_DAY('01-2月-15')FROM DUAL;
——add_monthS(DATE ,I)
I可以正数也可以是负数也可以是小数,小数位自动舍弃,正数往后,负数往前
查询员工入职后的20周年纪念日。
SELECT ENAME,ADD_MONTHS(HIREDATE,20*12)AS A FROM EMP;
计算3个月后的今天是哪一天,星期几?
SELECT TO_CHAR((ADD_MONTHS(SYSDATE,-10*12)),'YYYY-MM-DD DAY')FROM DUAL;
——months_between()
返回两个日期之间间隔的月数, 如果间隔的月之间不为整数就返回小数,第二个参数比第一个参数时间
晚的话会返回一个负数
select ename, months_between(hiredate,sysdate)hiredate from emp;
——next_day()
查询下个礼拜几是哪一天, 中间参数在中文环境可以写中文,英文环境下要写英文的星期几,
嫌麻烦的可以采用数字来1-7代替,注意1表示的星期天,7表示的星期六
下个礼拜三是哪一天
SELECT TO_CHAR((NEXT_DAY(SYSDATE,'星期三')),'YYYY-MM-DD DAY')AS NEXTWEEK FROM DUAL;
下个礼拜四是哪一天
SELECT TO_CHAR((NEXT_DAY(SYSDATE,5)),'YYYY-MM-DD DAY')AS NEXTWEEK FROM DUAL;
注意:如果还未过本周的周四,那么显示的是本周周四
——比较函数:least()
*参数类型必须匹配,如果后面参数类型,不同于前面的参数的数据类型,会做自动转换,能转换就比较,
不能转换就报错。但自动转换要注意符合前面参数的格式
比较后,哪个小返回哪个。
SELECT LEAST(SYSDATE,'09-9月-16')FROM DUAL;
——extract():抽取或提取
从当前的系统时间中提取今年的数字
SELECT EXTRACT(YEAR FROM SYSDATE)AS YEAR FROM DUAL;
从指定的时间中获取hour
SELECT EXTRACT(HOUR FROM TIMESTAMP'2016-10-10 15:35:23)FROM DUAL;
4、空值操作
含义:表示未知或暂时不存在的 即null
4.1、向表中插入空值 ----不能违反非空约束
显示插入:null
隐式插入:不给值 (把其他字段插入值进去,该字段不给值,默认就是空值)
4.2、更新空值
注意:更新空值时,要加上条件限制, 否则会将数据库表中该列中所有的字段值更新为null,
在更新为null值的时候,也不能违反非空约束
4.3、非空条件查询 is null , is not null;
查询上司为null的记录
SELECT * FROM EMP WHERE MGR IS NULL;
查询上司不为null的记录。
SELECT * FROM EMP WHERE MGR IS NOT NULL;
4.4、非空约束
非空(NOT NULL)约束是约束条件的一种,
用于确保数据表中某个字段值不为空。
4.5、空值函数
NVL(E1,E2):如果e1字段的值为null,那就用e2去替换,但是确保e2和E1的数据类型的一致。
SELECT empno,ename,comm,sal+NVL(comm,0)as esal from emp WHERE ename='zhangsan';
NVL2(e1,e2,e3):判断e1是null还是非空,如果是null,返回e3,如果不是null返回e2
SELECT empno,ename,comm,nvl2(comm, comm+sal,sal)AS ESAL from emp where ename='zhangsan';