设为首页 收藏本站
查看: 1059|回复: 0

[经验分享] Java37: 数据库(Oracle)

[复制链接]

尚未签到

发表于 2018-9-8 06:24:57 | 显示全部楼层 |阅读模式
  DB2
  Oracle
  Infomix
  MySQL
  Sybase
  SQLServer
  1 什么是数据库
  数据需要持久保存
  (磁盘文件)
  数据库(数据库管理系统)是个软件
  安全,可靠,高效
  数据库服务器,数据中心
  关系型数据库
  用表来存储数据的数据库
  SQL 通用的关系型数据库的操作语言
  不同数据库之间SQL有一定的差异
  NoSQL Not only SQL
  芒果DB......
  T-SQL
  PLSQL
  SQL 中的分类
  DDL(Data Definition Language) 数据定义语言
  create;drop...
  DML(Data Maniplation Language)数据操作语言
  insert;delete;update...
  TCL(Transaction Control Language)事物控制语言
  begin transaction;commit;rollback....
  DQL(Data Query Language) 数据查询语言
  select...
  DCL(Data Control Language)数据控制语言
  grant;revoke...
  安装Oracle(DBA/OP)
  创建库(DBA/OP)
  创建用户(DBA/OP)
  登陆数据库(RD)
  访问数据库(RD)
  文档
  表名,
  字段名 ,类型 ,说明
  create 语句创建表, 指定表明 表有几列,列名,每个列的类型
  类型:
  数字 number(m) 不能超过m
  number(m,n) 一共m位,小数占n位
  字符串 varchar2(m) 不能超过m
  (可变长的字符串2版本)
  日期 date
  有默认格式 可以修改
  在插入日期时必须要符合这个格式
  对于日期可以使用to_date函数(但是保存在表中的数据还是系统设置的格式)
  第一个参数自己定义的格式
  to_date('2016-10-10','yyyy-mm-dd')
  第二个参数指明自定义格式
CREATE TABLE table_name  
    (column_name column_type);
  

  
//创建表
  
create table emp(id number(10),
  
          name varchar2(50),
  
          hire_date date,
  
          salary number(8,2));
  
//删除表
  
DROP TABLE tablename;
  
drop table emp;
  
//查看表的结构(只能看表的结构,不能看数据)
  
DESC tablename;
  
desc emp
  

  
//给表添加行
  
插入式可以指定为null
  
没有插入的列就为null 除非有默认值
  
INSERT INTO tablename(
  
    column_name,column_name,column_name)
  
    values
  
    (xxx,xxx,xxx,xxx);
  

  
insert into emp(id,name,hire_date,salary)values(101,'lmdtx',to_date('2016-10-10','yyyy-mm-dd'),123123.12);
  
OR
  
insert into emp values (101,'lmdtx',to_date('2016-10-10','yyyy-mm-dd'),123123.12);
  

  
//修改表中的某些行 where 是根据具体的条件来
  
UPDATE table_name SET field1=new-value1;
  
UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
  
update emp set salary=200 where id=101;
  

  
删除表中行
  
DELETE FROM tablename;
  
DELETE FROM table_name [WHERE Clause];
  
delete from emp where id=101;
  

  

  
SELECT * FROM tablename;
  
SELECT * FROM tablename [WHERE Clause];
  
select * from emp;
  
select * from emp where salary>100;
  
select name,salary from emp where salary>100;
  oracle 字符操作:
  varchar和varchar2 低版本还有区别高版本一样的
  char 和 varchar2的区别:
  char 是定长  char(20)  无论用多少都是20空间
  =》指的是存储空间
  varchar2是可变长 varchar2(20) 按照实际的给空间
  默认是存储20个英文字符的空间
  length()
  varchar2 中文:
  一个中文占用几个字符要看你使用的编码
  oracle 不是用的Unicode
  在设计表的时候要注意  一般是中文长度 *3
  查看oracle 的字符编码 userenv('language')
select userenv('language') from dual;  dual表 无实际意义,就是伪表给我们用一些函数使用的
  nvarchar2 类型  是几个字符就是几个字符 和编码无关
  char 和varchar2的最大长度
  char 2000个
  varchar2 4000个
  字符串的连接 ||  或者用 conncat(m,n)函数
  'aa'||'bb'
create table class(  
    xing nvarchar2(50),
  
    ming nvarchar2(50)
  
);
  

  
insert into class values('张','三');
  
insert into class vlaues('steve','steve')
  
select xing||ming from class;
  
select xing||'.'||ming from class;
  
select concat(xing,ming) from class;
  
select concat(concat(xing,'.'), ming) from class;
  trim 去掉前后空格trim(String);
  ltrim 左边空格
  rtrim 右边空格
  lpad 在左边填充字符到指定长度 lpad(String,50) 默认是空格
  rpad 在右边填充字符到指定长度rpad(String,50,'*')
  lower 小写lower(String)
  upper 大写
  initcap 首字母大写
  length 求长度
  substr 截取字符串 substr(String,起始位置)  取到结尾
  substr(String,起始位置,取多少个)
  substr(String,-20) 从后往前20个
  从1 开始
  instr 在一个字符串中查找字符串
  返回第一次找到的位置    instr(String1,String2) 在String1 中查找String2
  从1开始         instr(String1,String2,5) 在String1 中查找String2 从第5个开始找
  instr(String1,String,5,2)在String1 中查找String2从第5个开始找到的第2个
create table emp(id number(10),  
          name varchar2(50),
  
          hire_date date,
  
          salary number(8,2));
  
desc emp;
  

  
insert into emp(id,name,hire_date,salary)values(101,'lmdtx',to_date('2016-10-10','yyyy-mm-dd'),123123.12);
  

  
select *from emp;
  

  
select * from emp where id=102;
  

  
select name,salary from emp where salary>1000;
  

  
update emp set salary=100 where id=102;
  

  
update emp set salary=3000 where id=1011;
  

  
update emp set salary=99999 where id>2000;
  

  
update emp set salary=99999999999 where id=101;
  

  
delete  from emp where id = 010;
  

  
delete  from emp where id = 101;
  

  
drop table emp;
  

  
create table INFO_COST(
  
  ID number(11) primary key not null,
  
  COST_DESC VARCHAR2(200),
  
  BASE_DURATION number(11),
  
  BASE_COSR number(11,2),
  
  UNIT_COST number(11,2));
  

  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
  
)values(1,'包20小时',20,2.45,0.30);
  

  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
  
)values(2,'包40小时',40,3.45,0.30);
  

  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
  
)values(3,'包100小时',100,4.45,0.30);
  

  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
  
)values(4,'包200小时',200,5.45,0.30);
  

  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
  
)values(5,'普通资费',null,null,0.20);
  

  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
  
)values(6,'包月',null,10,null);
  

  
update INFO_COST set unit_cost= unit_cost+(unit_cost*10) where idsysdate;
  last_day 计算所在月的最后一天
  months_between 一个日期和另一个日期差几个月
  least 一个日期和给定日期那一个时间更早
  返回小的
  greatest一个日期和给定日期那一个时间更近
  返回大的
create table foo_6(birthday date);  
insert into foo_6 values(to_date('1990/09/09','yyyy/mm/hh'));
  
insert into foo_6 values(to_date('1890/09/09','yyyy/mm/hh'));
  
insert into foo_6 values(to_date('2016/10/10','yyyy/mm/hh'));
  
select to_char(last_day(to_date('2016/10/10','yyyy/mm/dd')),'dd') from dual;
  
select months_between(sysdate, birthday)/12 from foo_6;
  
select to_char(least(birthday,to_date('2016/08/08','yyyy-mm-dd')),'yyyy-mm-dd') from foo_6;
  
select least (1, 3 ) from dual
  
select to_char(greatest(birthday,to_date('2016/08/08','yyyy-mm-dd')),'yyyy-mm-dd') from foo_6;
  
select greatest (1, 3 ) from dual
  round  对时分秒进行舍入 24小时制 12点后 算明天
  trunc    对时分秒直接去掉
select to_char(round(sysdate),'yyyy/mm/dd') from dual;  
select to_char(trunc(sysdate),'yyyy/mm/dd') from dual;
  用于从一个date或者interval类型中截取到特定的部分
  extract(year from 日期)
  extract(MONTH from 日期)
  extract(DAY from 日期)
  extract(HOUR from 日期)
  extract(MINUTE from 日期)
  extract(SECOND from 日期)
select extract(year from sysdate) from dual;  
select extract(month from sysdate) from dual;
  
select extract(day from sysdate) from dual;
  
select extract(hour from systimestamp) from dual;
  
select extract(minute from systimestamp) from dual;
  
select extract(second from systimestamp) from dual;
  create
  drop (很少用,必须少用)
  alter (很少用,必须少用,在 create 的时候要考虑好)
create table foo_11(  
    n1 number(20);
  
    c1 varchar(50);
  

  
);
  
insert into foo_11 values(1,'abc');
  
insert into foo_11 values(null,'bcd');
  
insert into foo_11 values(3,null);
  
select * from foo_11 where c1 is null;
  null 相关:
  nvl
  nvl(arg1,arg2)
  如果arg1 为null 返回arg2
  如果arg1不为null 返回arg1
  nvl2(arg1,arg2,arg3)
  如果arg1为null 返回arg3;
  如果arg1不为null 返回arg2;
select nvl(c1,'空')from foo_11;  
select nvl2(c1,'非空','空') from foo_11;
  not null 约束
  指定某些列不能为null
create table foo_12(  
    n1 number(20) not null;
  
    c1 varchar(20) not null;
  
);
  number的舍入(先舍入,在看长度  )
create  table  foo_13(  
    n1 number(5),
  
    n2 number(5,2), //对多的小数位直接舍弃,整数位多报错
  
    n3 number(5,-1),//  倒数 变 0  抹掉零头..先舍入,在看长度  最后一个0不算
  
);
  主键
  数据的唯一性
  1创建主键
  主键也是列(多列,联合主键)
  一般没有业务含义
  唯一标识数据表中的某一行
  必须有主键
  类型组好是number
  主键不为null
  主键不能重复
  constraint 主键约束名 primary key(主键列)
create table stu(  
  stu_id number(11),
  
  stu_no number(8),
  
  stu_name varchar2(50),
  
  constraint stu_pk primary key(stu_id)
  
);
  

  
insert into stu values(123,100001,'张三');
  修改表
  删除:
  drop 删除表
drop table stu;  delete删除数据 可以恢复,速度慢
delete table stu;  
delete table str where stu_id=123;
  truncate删除表内容不能恢复,速度快
truncate table stu;  alter
  添加列
  如何增加not null列
  增加一个可以为空的列
  update设置值
  将该列改为not null
  设置为主键
  更麻烦
  修改列的属性
  删除列
create table foo_22  
  ( name varchar2(50)
  
  );
  
insert into foo_22 values('张三');
  
insert into foo_22 values('李四');
  
insert into foo_22 values('王五');
  
insert into foo_22 values('赵六');
  
insert into foo_22 values('齐七');
  

  
alter table foo_22 add
  
(
  
  salary number(8,2)
  
);
  

  
desc foo_22;
  

  
select * from foo_22;
  

  
alter table foo_22 modify(
  
  name varchar2(55) not null
  
);
  

  
desc foo_22;
  

  
alter table foo_22 add(
  
  s_id number(8)
  
);
  

  
desc foo_22;
  

  
update foo_22 set s_id=3 where name='张三';
  
update foo_22 set s_id=4 where name='李四';
  
update foo_22 set s_id=5 where name='王五';
  
update foo_22 set s_id=6 where name='赵六';
  
update foo_22 set s_id=7 where name='齐七';
  

  
select * from foo_22;
  

  
alter table foo_22 drop column s_id;
  

  
desc foo_22;
  
select * from foo_22;
  拷贝数据
  但是不能复制约束
  
create table emp2
  
as select empno, ename, job,sal
  
from emp;
  

  
create table emp2
  
as select empno, ename, job,sal
  
from emp where ename='lmdtx';
  拷贝表结构(在where 子句中 加上一个不成立的条件)但是不能复制约束
create table emp3  
as select * from emp
  
where 1=2;
  >
  <
  >=
  1200 order by salary;  

  
select ename,salary from emp2 where salary>1500 order by salary desc;
  

  
select ename,salary from emp2 where salary>1500 order by length(ename);
  

  
select ename,salary from emp2 orderby salary,length(ename);



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-567194-1-1.html 上篇帖子: centos6.6_X64安装oracle10G 下篇帖子: oracle lock基础知识(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表