ORACLE学习系列一

本学习笔记由本人整理而成,转载请注明出处

———————————————————————————

###创建表wenwen
create table wenwen(
id number(4),
name varchar2(20) not null,
gender char(1) default'M',
job varchar2(20),
salary number(6,2)
);
###查看表wenwen的结构
desc wenwen;
###修改表名wenwen为wenge
rename wenwen to wenge;
———————————————————————————
###【修改表】
###给表wenge添加列birth,类型是DATE,增加字段
alter table wenge add (birth DATE);
###删除表wenge的一列birth
alter table wenge drop(birth);
###修改表wenwen的列job的长度,并增加默认值clerk;修改列name的长度
alter table wenwen modify(job varchar2(40) default 'clerk',name varchar2(10));
###修改字段名
alter table emp rename column hirdate to hiredate;
———————————————————————————
【DML语句】
###给数据表wenwen插入一条记录
insert into wenwen (ID,NAME,GENDER)VALUES(1,'Flora','F')
###给数据表wenwen插入的列有日期字段,可用TO_DATE函数转换日期类型的数据
insert into wenwen (ID,NAME,GENDER,birth)VALUES(1,'Flora','F',TO_DATE('2017-09-01','YYYY-MM-DD'));
或:insert into wenwen (ID,NAME,GENDER,birth)VALUES(1,'Flora','F','01-9月-17');
———————————————————————————
###更改职员cloris的薪水为5000
update wenwen set salary=5000
where name = 'cloris';
###更改生日为2009-09-01的名字为Laura
update wenwen set name='Laura'
where birth=to_date('2009-09-01','yyyy-mm-dd');

###删除birth是null的员工记录
delete from wenwen where birth is null;
———————————————————————————

###创建表emp
create table emp(
empno number(4,0),
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hirdate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0)
);
###创建表dept
create table dept(
deptno number(2,0),
dname varchar2(14 byte),
loc varchar2(13 byte)
);
###为职员表emp插入数据
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7369,'SMITH','CLERK',7902,'17-12月-80',800,20);
insert into emp (empno,ename,job,mgr,hirdate,sal,comm,deptno)
values(7499,'ALLEN','SALESMAN',7698,'20-2月-81',1600,300.00,30);
insert into emp (empno,ename,job,mgr,hirdate,sal,comm,deptno)
values(7521,'WARD','SALESMAN',7698,'22-2月-81',1250,500.00,30);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7566,'JONES','MANAGER',7839,'02-4月-81',2975,20);
insert into emp (empno,ename,job,mgr,hirdate,sal,comm,deptno)
values(7654,'MARTIN','SALESMAN',7698,'28-9月-81',1250,1400.00,30);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7698,'BLAKE','MANAGER',7839,'1-5月-81',2850,30);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7782,'CLARK','MANAGER',7839,'9-6月-81',2450,10);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7788,'SCOTT','ANALYST',7566,'19-4月-87',3000,20);
insert into emp (empno,ename,job,hirdate,sal,deptno)
values(7839,'KING','PRESIDENT','17-11月-81',5000,10);
insert into emp (empno,ename,job,mgr,hirdate,sal,comm,deptno)
values(7844,'TURNER','SALESMAN',7698,'8-9月-81',1500,0.00,30);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7876,'ADAMS','CLERK',7788,'23-5月-87',1100,20);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7900,'JAMES','CLERK',7698,'3-12月-81',950,30);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7902,'FORM','ANALYST',7566,'3-12月-81',3000,20);
insert into emp (empno,ename,job,mgr,hirdate,sal,deptno)
values(7934,'MILLER','CLERK',7782,'23-1月-82',1300,10);
###为部门表dept插入数据
INSERT into dept (deptno,DNAME,LOC) VALUES (10,'ACCOUNTING','NEW YORK');
INSERT into dept (deptno,DNAME,LOC) VALUES (20,'RESEARCH','DALLAS');
INSERT into dept (deptno,DNAME,LOC) VALUES (30,'SALES','CHICAGO');
INSERT into dept (deptno,DNAME,LOC) VALUES (40,'OPERATIONS','BOSTON');
###创建账务账户表Account
create table Account(
ID NUMBER(9) NOT NULL,
RECOMMENDER_ID NUMBER(9),
LOGIN_NAME VARCHAR2(30) NOT NULL,
LOGIN_PASSWD VARCHAR2(8) NOT NULL,
STATUS CHAR(1) not null,
CREATE_DATE DATE DEFAULT SYSDATE,
PAUSE_DATE DATE,
CLOSE_DATE DATE,
REAL_NAME VARCHAR2(20) NOT NULL,
IDCARD_NO CHAR(18) NOT NULL,
BIRTHDATE DATE,
GENDER CHAR(1) not null,
OCCUPATION VARCHAR2(50),
TELEPHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(50),
MAILADDRESS VARCHAR2(50),
ZIPCODE CHAR(60),
QQ VARCHAR2(15),
LAST_LOGIN_TIME DATE,
LAST_LOGIN_IP VARCHAR2(15)
);
———————————————————————————
###char存放定长字符,即存不满补空格;varchar2存放变长字符,存多少占用多少。
【字符串函数】
###concat
##连接ename和sal 2个字符串
select concat(concat(ename,':'),sal) from emp;
##多个字符串连接concat(char1,char2)等价于||
select ename ||':'||sal || job from emp;
#查询职员表中的职员名字、职位、薪资,中间用逗号连接
select ename || ','|| job ||','||sal out_put from emp;

###length 返回字符串的实际长度
select ename,LENGTH(ename)FROM emp;
####查找员工名字的长度为5个字符的员工信息
select *from emp where length(ename)=5;

###转换字符大小写UPPER(char)转化成大写形式,LOWER(char)转换成小写形式,INITCAP(char)将每个单词的首字母大写
select upper('hello world'),lower('HELLO WORLD'),initcap('hello world')  from dual;

###截去子串,TRIM(c2 from c1)从c1的前后截去c2;LTRIM(c1,c2),从c1左边截去c2;RTRIM(c1,c2),从c1右边截去c2,如果没有c2就去除空格
select TRIM ('e'from'elite')as "t1",
LTRIM('elite','e')as "t2",
RTRIM ('elite','e')as "t3"
from dual;
###从前面截去
select trim(leading'半'from'半月更二半')from dual;
###从后面截去
select trim(trailing月更二半')from dual;
###从两端截去
select trim(both'半'from'半月更二半')from dual;

###补位函数:LPAD(char1,n,char2)在字符串char1的左端用char2补足到n位;RPAD(char1,n,char2)在字符串char1的右端用char2补足到n位
select lpad('tardis',10,'*')from dual;---****tardis
select lpad('tardis',3,'*')from dual; ---tar
###在emp表中使用左补位,将sal用$补齐6位
select ename,lpad(sal,6,'$') salary from emp;

###截取字符串,SUBSTR(char,[m[,n]]),在char中从m位开始取n个字符。若m=0则从首字母开始,若m是负数则从尾部开始,若没有设置n或n超过了总长度则取到字符串末尾为止
select substr('DOCTOR WHO TRAVELS IN TARDIS',8,25) FROM DUAL;

###instr(char1,char2,n,m]):返回子串char2在源字符串char1中的位置,从n的位置开始搜索,第m次出现
select instr('DOCTOR WHO','WHO') words from dual;----8
———————————————————————————
———————————————————————————
【数值函数】
###round(n[,m]):用于四舍五入,将n四舍五入到小数点前后m位
select round(45.678,2) from dual; ---45.68
####查询月份间隔并取整
select ename,round(months_between(sysdate,hiredate))as "hiredate" from emp;
####计算各员工在公司工作的天数,用整数表示
select ENAME,hiredate,round(sysdate-hiredate) worktime from emp;

###截取数值45.678,保留两位小数
select trunc(45.678,2)from dual; ----45.67
###ceil(n)取大于或等于n的最小整数值,floor(n)取小于或等于n的最大整数值
select ceil(45.678)from dual; ----46
select floor(45.678)from dual; ----45
———————————————————————————
———————————————————————————
【日期转换函数】
###查询2002年以后入职的员工
select ename,hiredate from emp
where hiredate>to_date('2002-01-01','YYYY-MM-DD');
或:
select ename,hiredate from emp
where hiredate>'01-1月-2002';
###to_char将其他类型转换成字符类型
select ename,to_char(hiredate,'YYYY“年”MM“月”DD“日”') from emp;
####精确显示系统时间。sysdate返回当前系统时间精确到秒,yyyy表示4位年份,mm表示2位月份,dd表示2位数字的天,hh24表示24小时制的小时,mi表示分钟,ss表示秒:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;
####显示职员入职时间格式为"17 of November 2004".fm表示格式,dd表示2位数字的天,"of"为字符串,month表示全拼的月份,yyyy表示4位数字的年份
select to_char(hiredate,'fmdd "of" month yyyy') "date hired" from emp;
####列出生日在1987年的客户的全部信息
select *from customer where to_char(birthday,"yyyy")='1987';
####hiredate列显示格式为“1980-12-17”并将hiredate列以“1980年12月17日”格式显示,命名为review:
select ename,to_char(hiredate,'yyyy-mm-dd')hiredate,to_char(hiredate,'yyyy"年"mm"月"dd')review from emp;
###按照“2009年4月11日 20时35分10秒”格式显示系统时间
select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24"时"mi"分"ss"秒"')from dual;
———————————————————————————
———————————————————————————
【日期常用函数】
###返回日期date所在月的最后一天
select last_day(sysdate)from dual;
select last_day('20-2月-09')from dual;
###add_months(date,i) 返回date加上i个月后的日期值,计算职员入职20周年纪念日
select ename,add_months(hiredate,20*12)as "20周年" from emp;
###months_between(date1,date2)计算date1和date2两个日期值之间间隔了多少个月
select ename,months_between(sysdate,hiredate)as "hiredate" from emp;
###查询下周三是几号,1-7表示周日-周六
select next_day(sysdate,4) next_wedn from dual;
###greatest(a,b)  least(a,b)比较函数,返回参数列表中的最大或最小值
select greatest(sysdate,'10-10月-08')from dual;
select least(sysdate,'10-10月-08')from dual;
###extract(date from datetime)从参数datetime中提取参数date指定的数据、比如提取年月日
select extract(year from sysdate) current_year from dual;
select extract(hour from timestamp '2008-10-10 10:10:10') hour from dual;
———————————————————————————
———————————————————————————
【空值函数】
###nvl(a,b)将null转变为非null值,如果a是null,则取值b。计算员工月收入,月收入显示为”$12,345.67”这种形式:
select ename,sal,comm,
to_char(sal+nvl(comm,0),'$99,999.00') salary
from emp;
####列出customer表中每个客户的信息,若未提供生日信息,则该列值显示“not available”,若没有余额信息则显示“no account”
select cust_id,cname,nvl(to_char(birthday,"yyyy-mm-dd"),'not available'),nvl(account,'no account')from customer;
###列出customer数据表中生日未提供的客户记录
select *from customer where nvl(to_char(birthday,'yyyymmdd'),'not available') = 'not available';
###nvl2(a,b,c)将null转变为实际值,nvl2用来判断a是否为null,若不是null则返回b,若是null则返回c:
select ename,sal,comm,
nvl2(comm,comm+sal,sal) salary
from emp;

猜你喜欢

转载自blog.csdn.net/weixin_41038867/article/details/81703451
今日推荐