Java37: 数据库(Oracle)

2024-09-03 22:32
文章标签 java oracle 数据库 37

本文主要是介绍Java37: 数据库(Oracle),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 id<5;delet from INFO_COST WHERE id=5;select COST_DESC,unit_cost from INFO_COST;create table foo_1(c1 char(5),c2 varchar2(5));
insert into foo_1 values('abc','abc');
select length(c1),length(c2) from foo_1;create table foo_2(c1 varchar(6));
drop table foo_2;
insert into foo_2 values('你好');
select * from foo_2;
select userenv('language') from dual;
desc dual;create table foo_3(c1 nvarchar2(2));
insert into foo_3 values('你好');create table class(xing nvarchar2(50),ming nvarchar2(50)
);insert into class values('张','三');
select xing||ming from class;
insert into class values('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;create table foo_4(c1 varchar(500));
drop table foo_4;
insert into foo_4 values('     the fortification in your pole. It is like a peek your wallet as the thief, 
when you are thinking how to spend several hard-won lepta, when you are wondering whether new money, it has laid background.Because of you, then at the heart of the most lax, alert, and most low     of    ');select trim(c1) from foo_4;
select ltrim(c1) from foo_4;
select rtrim(c1) from foo_4;
select lower(c1) from foo_4;
select upper(c1) from foo_4;
select initcap(c1) from foo_4;
select lpad(c1,600) from foo_4;
select lpad(c1,600,'@') from foo_4;
select substr(c1,100) from foo_4;
select substr(c1,100,120) from foo_4;
select substr(c1,-20) from foo_4;
select instr(c1,'of') from foo_4;
select instr(c1,'of',224) from foo_4;
select instr(c1,'of',224,2) from foo_4;



Oracle 日期操作

1日期类型

date 年月日时分秒(基本都是人输入)

timestamp 年月日时分秒(秒带小数点)(系统来 时间戳)

sysdate 系统时间

systimestamp 系统时间戳

select sysdate from dual;
select systimestamp from dual;


to_date 把一个字符串转换为日期

select todate('201610-10','yyyy-mm-dd') from dual;

to_char 把时间转换为指定的格式

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
create table foo_5(d1 date);
insert into foo_5 values(to_date('2016/10/10 09:00:00','yyyy/mm/dd hh:mi:ss'));
insert into foo_5 values(sysdate);
select to_char(d1,'yyyy~mm~dd hh24:mi:ss') from foo_5;
select to_char(d1,'yyyy~mm~dd hh24:mi:ss') from foo_5 where d1>sysdate;

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;




>= 

<= 

<> 不等于

AND 

OR

select * from emp2 where ename=''a' or 'b'='b
注入***
select * from emp2 where ename='a' OR 'b'='b';

like 模糊查询

 % 任意个字符

    M% 开头是M的

    %M% 有M的

 _ 一个字符


select * from emp2 where ename like 'M%';
select * from emp2 where ename like '%A%';
select * from emp2 where ename like '_A%';



where 子句中的between ** and **


select salary from emp2 where salary between 1500 and 3000;


where 子句 中的 in 和 not in

select salary from emp2 where salary in (100,200,300);select * from emp2 where ename='WARD' or ename='JAMES';select * from emp2 where ename in ('WARD','JAMES');select * from emp2 where ename not in ('WARD','JAMES');


where 子句判断空值 is null 和 is not null

select * from emp2 where ename is null;
select * from emp2 where ename is not null;


where 中 子查询

select * from emp2 where SAL=(select salary from emp2 where ename='WARD');
select *  from emp2 where ename in (select ename from emp2 where sal<1000 );


where 中 可以使用函数

select * from emp2 where length(ename)>4;


select 列的别名

    select 查询的结果可以看成是一个逻辑上的一张表

select ename name from emp2;列名别名select ename 姓名 from emp2;


去重 distinct

select distinct salary from emp2;


select 中可以使用函数

select ename||job from emp2;
select  ename||'='||job namejob from emp2;//在加上一个别名




聚合函数(聚集函数)


count// null的不计数  统计 主键可以查有多行

select count(ename) from emp2;

min

select max(salary) from emp2;

max

select max(salary) from emp2;

sum

select sum(salary) from emp2;

avg

select avg(salary) from emp2;



排序

order by 对查询的结果 可以根据某个或者几个列进行排序

    默认 asc 升序  

       desc 降序

  order by 后面也可以使用函数

    多个列

        先按照一个排序 再按照另一个拍 用

select ename,salary from emp2 where salary>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);


















































这篇关于Java37: 数据库(Oracle)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134230

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听