Oracle_Day05

2019-03-07  本文已影响0人  姜茶无糖

查询某一个表中的前几条数据

在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 约束的名字;

上一篇下一篇

猜你喜欢

热点阅读