Oracle_Day05
查询某一个表中的前几条数据
在mysql中:limit
1、查询第1000条到1005条
select * from tablename limit 999,6;
2、查询前10条数据
select * from tablename limit 10;
3、查询第三条到最后一条数据
select * from tablename limit 2,-1
在Oracle 中:rownum rownum伪列,Oracle8开始出现,是把每张表中的行数进行编号,始终从1开始,常见的用法为分页查询
问题:查询员工表的前十条数据
select ename from emp where rownum<=10;
问题:查询员工表中部门号为1的员工的前十条数据
select * from (select rownum,deptno,ename from emp where deptno =1) where rownum<=10;
问题:查询员工表中第五条到第十条数据 在没有实例化之前 rowname不可以使用大于等号
给伪列起别名实例化别名 可以使用大于等号
select rownum rn,ename from (select rowname rn ,ename from emp where rownum <=10) where rn >=5;
合并查询(合并多个select的结果):union查询并集
1、查询工资大于5000或者工种是java的员工
union并集,去掉重复行
select ename sal,job from emp where sal>5000 union select ename,sal,job,from emp where job ='java'; 无法去掉重复行
select ename sal,job from emp where sal>5000 union all select ename,sal,job,from emp where job ='java'; 去掉重复行
2、查询工资大于5000且工种是java的员工信息
select ename sal,job from emp where sal>5000 intersect select ename,sal,job,from emp where job ='java';
Oracle中的函数
函数的作用:
1、方便对数据的统计
2、处理查询的结果(通过身份证号得到生日)
--数值函数
四舍五入:round(n[,m]),n表示要四舍五入的数,m表示要四舍五入的位数,m不写为小数点后0位,若m>0则四舍五入小数点后保留m位,若m<0保留小数点前m位
取整函数:floor(n)向下取整,ceil(n)向上取整
select foor(123.45),floor(123.99) 123
select ceil(123.001),ceil(123.99) 124
常用的计算:
取绝对值:abs(n)、取余函数:mod(m,n) 除数可以为0、幂运算:power(m,n) 求m的n次幂、平方根运算:sqrt(n),求n的平方根 、三角函数:sin(n) asin(n)反三角函数 n为弧度制
--字符函数
lower():将字符串转成小写模式
upper():将字符串转成大写模式
initcap():将字符串首字母转成大写
length():获取字符串长度
substr(s,m,n):截取字符串 s为字符串 m为从哪里开始截取,n为字符串的长度
replace(a,b,c):替换字符串 a为字符串 b为替换前的字符,c为替换后的字符
综合案例:显示员工的姓名,首字母小写,其它字母大写
select lower(substr(ename(1,1))) || upper(substr(ename,2,length(ename)-1)) from emp;
--日期函数
sysdate 指代系统时间
add_months(m,n) 在m个时间的基础上添加n个月
问题:查询入职时间超过8个月的员工
select ename,startdate from emp where sysdate>add_months(stardate,8);
问题:查询入职时间满10年的员工信息
select ename,startdate from emp where sysdate>add_months(stardate,120);
next_day(m,n)
问题:找一下m时间后的周n是几号
select next_day(sysdate,'星期一') from dual;
months_between(m,n)
问题:m与n之间超过几个月
select nonths_between('m','n') from 表(dual)
last_day(m)当前日期最后一天是几号
问题:找出入职时间是入职当月的导数第三天入职的员工
select ename,startdate from emp where last_day(startdate)-2=stardate
--转化函数
日期转换字符串
to_char(m[,n,params]),m为日期,n为日期转换后的格式,params为指定语言编码
字符串转日期
to_date(s,[,n,params]),s为字符串,n为日期转换后的格式,params为指定语言编码
数字转字符串的转换
to_char(number[,params]),s为字符串,n为日期转换后的格式,params为转换方式,例如:S¥999,999,999,999.999
字符串转数字
to_number(char[,params])
约束:保证数据库有某些特定的商业逻辑,维护数据的完整性:约束、触发器、应用程序(过程,函数)
Oracle中,约束分为5中
1、非空约束:如果给某个字段定义了not null,name在插入数据的时候,就必须为给字段提供数据。
--创建表的时候添加非空约束
create tabe user_table(
username varchar2(20) not null,
password varchar2(20)
)
not null为非空约束
--修改表的时候添加非空约束
alart table table_name modify 字段名 字段类型 (限制)not null 修改时相关字段下没有值
主键约束(PK primary key):主键是定位表中单个行的方式,是可以唯一标识表中的数据,关系型数据库每一张表都应该有主键,主键可以是一个字段也可以是多个字段
1、主键列必须具有唯一性,且唯一
2、每张表只能有一个主键,不过这个主键可以由表中的多个字段共同组成
--在创建表时候添加主键约束
create table student_table(student_id number(10) primary key,student_name varchar(20)) 列级约束
create table student_table(student_id number(10) ,student_name varchar(20),constraint 约束的名字(pk_student_id) primary key(字段1,......)(student_id)); 更推崇这种方法,表级约束
修改表的时候添加主键约束
alter table table_name add constraint 约束的名字 primary key(......);
删除主键约束
alter table tablename drop constraint 约束的名字
alter table tablename drop primary key;
禁用 接触禁用主键约束
alter table tablename disable|enable constraint 约束的名字;
外键:
用于联系主表与从表之间的关系,外键定义在从表上,要求外键数据必须在主表的主键列中存在或者为空
--在创建表的时候设置外键约束
create table briup_dept( --主表
deptno number(2) primary key,
dname varchar2(20),
loc varchar2(20)
);
createtable briup_emp( --从表
ename varchar2(20) constraint 约束的名字 not null,
deptno number(2) references briup_dept(deptno)
);
表级约束
create table briup_emp( --从表
ename varchar2(20) not null,
deptno number(2),
constraint fk_emp_deptno_dept_deptno foreign key references
briup_dept(deptno)[on delete cascade];
);
--删除外键约束
alter table tablename drop constraint 约束的名字
alter table tablename disable|enable constraint 约束的名字;
4、唯一约束
unique
--创建表的时候 添加唯一约束
create table test(
username varchar2(20) unique
);
create table test(
username varchar2(20),
constraint 约束的名字 unique(字段);
);
唯一约束 只能有一行数据为空
--在修改的时候
alter table table_name add constraint 约束的名字 unique(.....);
--删除唯一约束
alter table tablename drop constraint 约束的名字
alter table tablename disable|enable constraint 约束的名字;
5、检查约束
--在创建的时候添加检查约束
create table emp(
sex varchar2(20) default '男' check(sex in ('男' ,'女')),
sal number(5) check(sal>0)
);
--修改
alter table table_name add constraint 约束的名字 check(条件);
--删除
alter table tablename drop constraint 约束的名字
alter table tablename disable|enable constraint 约束的名字;