OracleSQL语句

问题描述

查询表空间

查询当前用户所有表名及其所属表空间

select table_name 表名 ,tablespace_name 所使用表空间 from user_tables;

创建表

-- Create table  创建表
create table MES.SYS_NAME
(
  emp              VARCHAR2(10),
  upload_time      DATE default sysdate, //系统默认时间
  id               VARCHAR2(20),
  model_name       VARCHAR2(20)
)
tablespace MESTBS   --表段MES.SYS_NAME放在表空间MESTBS中
  pctfree 10     --块保留10%的空间留给更新该块数据使用
  initrans 1    --初始化事务槽的个数
  maxtrans 255   --最大事务槽的个数
  storage   --存储参数
  (
    initial 64  --区段(extent)一次扩展64k
    next 8        --下一个8
    minextents 1    --最小区段数
    maxextents unlimited  --最大区段无限制 
  );
-- Add comments to the columns 给每个字段添加注释
comment on column MES.SYS_NAME.emp
  is '用户';
comment on column MES.SYS_NAME.upload_time
  is '上传时间';
comment on column MES.SYS_NAME.id
  is 'id';
comment on column MES.SYS_NAME.model_name
  is '名称';


分页查询

/*

* firstIndex:起始索引 30

* pageSize:每页显示的数量 10

* sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句

*/
 select * from(select a.*,ROWNUM rn from(sql) a where ROWNUM<=(firstIndex+pageSize)) where rn>firstIndex

多字段模糊查询及分页

 async selectehrdb() {
    const { ctx,app}=this;
    ctx.validate({   
        parkey: {  type: 'string', required: false,  range: { max: 30  }, desc: '关键字' },
        page:{ required: true, type: "int", defValue: 0,  desc: "页码" },
        limit:{  required: true, type: "int", defValue: 0, desc: "数量"}
    })
    let { parkey} = ctx.request.body;
    //不能用this
    let page = ctx.params.page ? parseInt(ctx.params.page) : 1;
    //这里params还是query看路由 改
    let limit = ctx.params.limit ? parseInt(ctx.params.limit) : 10;
    let offset = (page - 1) * limit;
    let pageSize=offset+limit
    let row={}
    let a,b
    if(parkey){
        b=  await this.service.tool.echo(`select count(*) cou from EHR.OP_EMP_OY 
        where EMPLOYEEID like '%${parkey}%' or NAME like '%${parkey}%' or UNITCODE like '%${parkey}%' or UNITNAME like '%${parkey}%' and LIZHI=0`);

        a=  await this.service.tool.echo(`select * from (select  g.*,rownum rn from (SELECT* FROM EHR.OP_EMP_OY 
        where EMPLOYEEID like '%${parkey}%' or NAME like '%${parkey}%' or UNITCODE like '%${parkey}%' or UNITNAME like '%${parkey}%' and LIZHI=0) g  
       where  rownum <= ${pageSize}) where rn > ${offset}`);
    }else{
           //多个字段模糊查询
    b=  await this.service.tool.echo(`select count(*) cou from EHR.OP_EMP_OY where LIZHI=0`);

    a=  await this.service.tool.echo(`select * from (select  g.*,rownum rn from (SELECT* FROM EHR.OP_EMP_OY where LIZHI=0) g  
       where  rownum <= ${pageSize}) where rn > ${offset}`);
    }
    row.count=b[0].COU   //汇总多少条数据
    row.rows=a
   ctx.apiSuccess(row);
  }

oracle两表关联查询
左连接(left join……on):包含左边表的全部行,不管右边表的是否存在与它们匹配的行
情景描述
查询学生表student,sname,sex,age信息及所在班级clazz表
使用左连接

select sname,sex,age,cname from student t1
left join clazz t2 on t1.cid=t2.cid

左连接的方式实现,学生作为主表,当学生表中的班级cid在班表中找不到时,班级名称cname填充内容为空;
限制显示的字段 第一个表全部显示 第二个表 就显示一个字段

select t1.*,t2.route_id,t2.route_name from sajet.sys_part t1
left join  sajet.sys_route t2 on t1.ROUTE_ID=t2.ROUTE_ID

oracle三表关联查询
表A 关联第一张表B 关联第二张表C

select t1.*,t2.route_id,t2.route_name,t3.EMP_NO from sajet.sys_part t1
left join  sajet.sys_route t2 on t1.ROUTE_ID=t2.ROUTE_ID
left join  sajet.sys_emp t3 on t1.UPDATE_USERID=t3.EMP_ID

内连接(inner join……on/join on):只连接匹配的行
两表关联查询 和 三表关联查询

select t1.*,t2.route_name from sajet.sys_part t1
inner join sajet.sys_route t2
on t1.ROUTE_ID=t2.ROUTE_ID;

select t1.*, t2.route_name, t3.emp_no
  from sajet.sys_part t1
 inner join sajet.sys_route t2
    on t1.ROUTE_ID = t2.ROUTE_ID
 inner join sajet.sys_emp t3
    on t1.update_userid = t3.emp_id ;

插入数据 修改 删除

-- 插入数据
INSERT into test.STUINFO(STUID, STUNAME, SEX, AGE, CLASSNO, STUADDRESS, GRADE, ENROLDATE, IDNUMBER)
values ('1', '龙七', '1', 26, 'C201801', '厦门市', '2018', to_date('01-09-2018', 'dd-mm-yyyy'),
 '35030219924546732');

-- 查询数据
select * from test.STUINFO;

-- 删除表
drop table test.STUINFO;

-- 删除数据
delete from test.STUINFO where STUID=2

-- 修改数据
update test.STUINFO set AGE=33 where STUID=1

oracle不区分大小写,建表语句中是否增加了双引号,如果不增加双引号,那么可以理解为不区分大小写,因为oracle或自动将不加双引号的转为大写。如果加双引号,需要看单个字段是否全为大写,如果该字段全为大写,那么该字段就不区分大小写

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)