函数
字符相关函数
--字符相关的函数
-- length(str):返回str中所包含的字符个数
select length('杨晓冬') from dual --3个字符
select length('yang') from dual
-- lengthb(str):返回str中所包含的字节数
select lengthb('杨晓冬') from dual;--6, 在Oracle中一个中占两个字节
select lengthb('yang') from dual
--查询姓名是由4个字符组成的员工
select * from emp where length(ename)=4
--lower(str),upper(str):lower:返回str全小写形式,upper返回str全大写形式
select lower('Yxd') from dual --Yxd
select upper('Yxd') from dual --YXD
--比较两个字段的内容是否一致,不区分大写小写 upper('yxD') upper(Yxd)
--substr(str,begin[,length]):对字符串str进行截取返回从begin之后的length个字符,如果省略length则表示截取到最后一位
--从yangxiaodong中截取出xiao
select substr('yangxiaodong',5,4) from dual
--查询员工姓名中第4个字母为E员工信息
select * from emp where ename like '___E%'
select * from emp where substr(ename,4,1) = 'E';-- 从姓名中截取出第4个字符进行比较
--concat(column,column):将两列值拼接成字符串
select concat(ename,sal) from emp
--Oracle中通过||表示两列的拼接
select '员工名:'||ename||'工资是:'||sal from emp
--trim(str):返回去掉str两侧空格的字符串
select length(trim(' y x d ')) from dual
/**
replace(str,old[,new]):
返回将str中old部分替换成new之后的字符串,如果没有new则表示剔除
*/
--返回将'yangxiaodong'中的xiao 替换成DA
select replace('yangxiaodong','xiao','DA') from dual
--返回剔除'yangxiaodong'中小之后的字符串
select replace('yangxiaodong','xiao') from dual
数字相关的函数
--数字相关的函数
--abs(num):返回num的绝对值
select abs(-5) from dual
select abs(months_between(to_date('2013-04-16','yyyy-mm-dd'),sysdate)) from dual
--ceil(num):向上取整,返回比num大的最小整数 floor(num):向下取整 ,返回比num小的最大整数
select ceil(9.2) from dual
select ceil(-9.2) from dual -- -9
select floor(9.6) from dual
select floor(-9.6) from dual
select ceil(abs(months_between(to_date('2013-04-16','yyyy-mm-dd'),sysdate))) from dual
--power(x,y):返回x的y次方
select power(2,3) from dual
--round(num[,x]):对num进行四舍五入并返回计算结果,x表示保留小数的位数,如果省略x则表示保留整数部分
select round(100.66,1) from dual --返回对100.66进行四舍五入并保留小数点后一位
select round(100.62,1) from dual
select round(100.66) from dual --四舍五入保留整数
--trunc(date):返回对时间进行截取保留年月日部分
select trunc(sysdate) from dual
--trunc(num[,x]):对数字进行截取,保留小数点后x位,如省略x则保留整数部分
select trunc(100.66,1) from dual
select trunc(100.66) from dual
--mod(x,y):返回x/y的其余数
select mod(5,3) from dual
--找到工资是300的倍数的员工
select * from emp where mod(sal,300)=0
约束
非空、唯一约束
/*约束:约束是定义在表中指定列上的校验规则,
如果一个列定义了约束,
那么对于该列的操作就必须要满足这个校验规则
否则不允许操作
*/
--非空约束:由非空约束约束的列,不能为null必须有值
--创建book表,对于 bookname和price添加非空约束 ,确保这个两个字段必须有值
drop table book;
create table book
(
bookid number(4),
bookname varchar2(20) not null,--添加非空约束,约束该列必须有值不能为null
price number(4,1) not null
);
insert into book(bookid,bookname,price) values(1,'平凡的世界',75.6)
--唯一约束,由唯一约束约束的字段,如果填写则必须唯一,不能重复
drop table book;
create table book
(
bookid number(4),
bookname varchar2(20) unique,--表示添加唯一约束,约束该列的内容不能重复
price number(4,1) not null
);
select * from book;
insert into book(bookid,bookname,price) values(1,'平凡的世界',75.6)
insert into book(bookid,bookname,price) values(1,'平凡的世界',80)
--可以添加null, null表示一个字段没有被赋值时的状态
insert into book(bookid,bookname,price) values(4,null,80)
--一个列可以同时添加多个约束
create table book
(
bookid number(4) not null unique,
bookname varchar2(20) not null unique,--非空而且唯一
price number(4,1) not null
);
insert into book(bookid,bookname,price) values(1,'高数',80)
insert into book(bookid,bookname,price) values(2,'高数2',5)
主外键约束
/*主键约束:由主键约束约束的列,必须填写而且内容唯一
(约束效果上相当于not null +unique),但是一个表
只能有一个主键约束,却可以有多个列由not null +unique修饰
主键约束的意义,在于可能根据主键列唯一定位一条记录
*/
drop table book;
create table book
(
bookid number(4) primary key,
bookname varchar2(20) not null unique ,--表示添加唯一约束,约束该列的内容不能重复
price number(4,1) not null unique,
typeid varchar2(20) not null references booktype(typeno) --被外键约束关联的表中字段必须是唯一约束列
);
insert into book values(2,'高数2',12)
--主键的意义在于根据主键唯一定位一条记录
select * from book where bookid = 2
/*
外键:由外键约束约束的字段,所赋的值必须与对照表中相应的列对应。
即对于外键字段所赋的值必须要确保已经在对应表中相应的对照字段已经存在了*/
create table booktype
(
typeno varchar2(20) primary key,
typename varchar2(20) not null unique
)
select * from booktype
--给book表添加一列用于保存对应的图书类型编号
alter table book add typeid varchar2(20)
select * from booktype;
select * from book