查询表空间
查询当前用户所有表名及其所属表空间
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 举报,一经查实,本站将立刻删除。