Oracle数据库

数据库

DBS(数据库系统) = DB(数据库)+DBMS(数据库管理系统)

注意:字符要使用’'单引号括起来

Oracle

数据库>数据文件>表空间>表>数据

类型

char(5)

定长字符串,如果输入位数不足,自动补空格

varchar2(10)

可变字符串,存储长度最大为10为得字符串

nchar和varchar使用Unicode字符集方式

number

number默认使用整数位最长为38为,没有小数位;

number(3)最大位数为3位得整数;

number(5,2)最大存储5位数,最多2位小数,最多3位整数

date

存放时间,年月份,时分秒

datestamp

时间戳

lob

大型数据

blob

存放大型二进制文件

clob

存放大型字符数据文件

完整性约束

完整性约束保证了数据的准确性

域完整性约束

检查约束

范围:列名>(>=)值

包含:like 列名 ‘%值%’

长度:length(列名)>值

默认值约束

设置默认值

非空约束

不能为空

实体完整性约束

主键约束

主键不能为空,主键要唯一

外键约束
标识列约束
唯一约束

引用完整性约束

主键所在的表为主表,外键所在的表为子表(从表)

自定义完整性约束

sql(Structured query language)组成

DML(Data Manipulation Language):数据操作语言

增加:insert into 表名 [(列名)] values (值)

多行增加:

第一种:insert into 表名1(列名) select 列名 from 表名2 (将表2中的部分列数据添加到表1中)

第二种:create table 表名1 as select 列名 from 表名2 (创建表1将表2中的部分数据添加到表1中)

第三种:insert all

into 表名 (列名) values (值)

into 表名 (列名) values (值)

select * from dual

第四种:insert into 表名 (列名)

select 值 from dual

union

select 值 from dual

union…

删除:

修改:update 表名 set 列名=值 while 布尔表达式(列名=值)

有些数据库未写字段数据为空字符串有些数据库未写字段数据为null(判断是否为null需要使用is null)

DQL(Data Query Language):数据查询语言

查询:select 列名 from 表名 [while等布尔表达式式]

查询顺序:from>where>group by>having>select>order by

DDL(Data Definition Language ):数据定义语言

创建:

删除:

DCL(Data Control Language):数据控制语言

获取权限:

释放权限:

逻辑运算符

and or not

算数运算符

+,-,*,/,mod

比较运算符

< , >, = , >= ,<= , <> ,

!=(不推荐使用)

关键字

where as union null is sysdate(获取当前时间),length(列名),mod(值1,值2),default,rownum,in,not in,between,on

as别名

列别名需要使用as,表起别名不用as

rownum

在查询结果完之后系统自动添加的行号

分组

对数据进行分组

group by

在分表之后需要查询使用having,在where后进行操作

排序

order by

在最后进行操作

模糊

like 可以查询数字或字符串

多表查询

inner join:内连接,两个都有的才有

left join:左连接,左表为主表

right join:右连接,右表为主表

full join:全连接,两个表的都要,不管是否两个表都有

高级查询

子查询

嵌套在select,insert,update,delete或其他子查询中的查询语句

子查询中可以使用父查询中的列名

查询效率低

任何可以使用表达式的部分都可以使用子查询

返回值为单列

常用函数

单行函数

字符函数

在这里插入图片描述

initcap(char)

首字母大写

initcap('hello')
lower(char)

转小写

lower('HELLO')
upper(char)

转大写

upper('')
ltrim(char,str)

从左边开始截取指定字符串中的字符

ltrim('heello','he')

hee会一起被截取

rtrim(char,str)

从左边开始截取指定字符串中的字符

rtrim('heello','lo')

llo会一起被截取

translate(char,from,to)

将指定的字符翻译成指定的字符

translate('jack','abcd','1234')

如果第一个字符串中存在第二个字符串中的字符,则将第一个字符串中的对应字符转换成第三个字符串中的对应字符

replace(char,old,new)

将第一个字符串中的所有old字符串转换成new字符串

replace('hello','he','**')
instr(char,s1,pos)

查找子字符串的位置

instr('hello',‘lo’,2)

从第二个位置开始查找指定字符串

substr(char,pos,len)

从指定位置开始截取指定长度的字符串

substr('hello',,5)
concat(str1,str2)

将两个字符串进行拼接,可以使用||代替

concat('hello',' world')
数字函数

在这里插入图片描述

abs(n)
ceil(n)
floor(n)
round(n)
sqrt(m,n)
mod(m,n)
power(m,n)
日期函数

天数的加减可以直接将日期和数字进行运算,可以使用to_char()函数获取当天时间的信息(例如星期几,年份等)

在这里插入图片描述

sysdate
extract(year from sysdate)

获取指定的部分时间

months_between(日期1,日期2)
add_months(日期,数字)
next_day(日期,星期)

获取下一个星期的日期,星期需要使用英文

last_day(日期)

获取这个歌月的最后一天日期

转换函数

在这里插入图片描述

to_char(日期,格式)

将日期转换成指定格式的字符串,可以获取当前星期几

to_date(字符串,格式)

将字符串转换成日期

to_number(字符串)

将字符串转换成数字,数据库会自动转换,一般用不上

其他函数

在这里插入图片描述

nvl(值,s1)

判断值是不是为null,如果为空,则输出s1

nvl2(值,s1,s2)

判断值是不是为空,如果为空,则输出s1,否则输出s2

case when then end

判断范围或是指定值,相当于Java中的if

case when 判断 then 输出值1
when 判断 then 输出值2
else 输出值3
end as 列别名
decode(值,判断值1,输出值,判断值2,输出值,其他输出值)

将值和具体的值进行对比,相当于Java中的switch

聚合函数

聚合函数只能和分组的列一起查询

count(),max(),min(),sum(),avg()

使用语句块

declare

cat number;

begin:

select count(1) from user_tables where table_name=‘STUDENT’

if cnt > 1 then

execute immediate ‘drop table STUDENT’

dbms_output.put_line(‘表存在,删除成功!’);

end if;

end;

创建表

create table 表名 (

列名1 类型,

列名2 类型

添加约束

添加实体约束

alter table 表名

add constraint 约束名 约束类型 列名

添加域约束

添加检查约束

alter table 表名

add constraint 约束名 check(约束语句)

非空约束

alter table 表名

modify 列名 not null

默认约束

alter table 表名

modify 列名 default 默认值

添加外键约束

默认级联删除为no action

aiter table 表名

add constraint 约束名称 约束类型 (列名) referents 表名 (列名) [on delete (其他级联删除[cascade,set null])]

删除约束

alter table student

drop constraint 约束名称

只能通过约束名称来删除或是检查约束,其他约束通过修改约束**(列约束)**来达到约束的删除

索引

创建索引

create index 索引名称 on 表名 列名

删除索引

drop index 索引名称

PL/SQL

一种过程化语言,通过增加编程语言的特点,形成对sql的扩展

流程控制

所有流程控制语句结束都是end加上流程语句名再加";"号

流程控制结构
declare
--变量声明
 变量名 [constant] 类型 [not null] [:= 值]
begin
  语句块
end;
case

如果是在sql中写end后面跟的是别名

两种写法,

一、再case后面跟变量名比较具体值

case 变量
 when 具体值 then 语句;
 when 具体值 then 语句;
else 语句;
end case;

二、在case后面跟判断条件,可以比较范围值

case when 判断表达式 then 语句;
when 判断表达式 then 语句;
else 语句;
end case;
if

不是elseif是elsif

if 判断条件 then
 语句块;
elsif 判断条件 then
 语句块;
else 语句块;
end if;
loop

有三种循环方式(loop、while loop、for loop),所有流程控制语句中,唯一不需要使用then的流程语句

loop

loop
 语句块
end loop;

while loop

while 判断条件 loop
 语句块
end loop;

for loop

for 变量 in 集合 loop
 语句块
end loop;

游标(cursor)

DML和DQL语句中得到的结果集,DML只返回受影响的行数

显式游标

使用前需要先打开游标,后关闭游标(如果使用for访问游标,会自动开启和关闭游标)

需要声明游标

cursor 游标名称 is sql语句

游标的四个属性

在这里插入图片描述

%found

查询本索引处是否有数据

%isopen

查看此游标是否被打开

%notfound

和found相反

%rowcount

返回第几条记录(如果是隐式游标,显示值(受影响的行数))

打开游标

open 游标名称

for访问游标

会自动开启和关闭游标,以及访问吓一条记录

for 变量名 in 游标 loop
 语句块
end loop

关闭游标

close 游标
隐式游标

使用DML时系统自动生成一个游标,名称为sql,只有一条记录,受影响的行数

数据库对象

视图

基于一个或多个表或视图创建的逻辑表,不包含数据,可以对数据进行查询和修改,基于基本表创建的视图,基本表为基表(就是sql语句的返回结果表)

语法:

create [or replace] view view_name as subquery

创建一个以只包含学生姓名的试图

create or replace view stu_name as select studentname from student
优点

1、可以展示表的部分数据

2、可以简单查询查询到复杂查询

3、增强了表的独立性,多表进行检索

4、相同数据可以创建不同视图

简单试图和复杂视图

简单视图为基于单个表创建的视图

复杂视图时基于多个表创建的视图

过程

将sql或PL/SQL代码快进行完成特定功能的集合

语法:

create [or replace] procedure pro_name [(参数 in/out/in out) type]

[is/as]

变量声明

begin

代码快;

end;

根据学生的学号返回学生的姓名

create or replace procedure stu
(parameter1 in varchar2,parameter2 out varchar2)
is
aa number;
begin
 select studentname into parameter2 from student where studentn0=parameter1;
end;

调用过程

在pl/sql中调用过程

begin

end;

declare
studentname varchar2(20);
begin
stu('1001',studentname);//调用函数,返回学生姓名
dbms_output.put_line(studentname);//输出姓名
end;
注意:

如果在调用过程时没有参数可以直接使用过程名调用,入参和返回值都在()中传入或传出

定义参数可以不需要指定长度,但是定义变量需要指定长度

函数

函数和过程类似,都是一组sql或PL/SQL语句块的集合,但是函数一定有返回值(可以在sql中使用)

创建函数

可以不写参数的in\out\in out

create [or replace] function fun_name

[(parameter type)]

return trturn_type

is/as

begin

语句块;

return 变量;

end;

根据课程id返回课程名称

create or replace function getname
(id number)
return varchar2
is
name varchar2(10);
begin
 select cname into name from course where cid=id;
 return name;
end;

触发器

触发器是一种特殊的过程,但是用户不能直接调用触发器(通过:new和:old查询记录的MDL操作前后数据)

语法

create [or replace] trigger tri_name

触发时间 触发事件

on 表名

begin

语句块;

end;

插入数据时打印记录

create or replace trigger tri_aa_id
before insert
on aa
begin
  dbms_output.put_line('增加了,'||:new.id||:new.name);
end;
注意

触发时间只与处理时间有关

序列

一组用来自增且保持唯一的数字(序列不可以使用or replace)

语法:

create sequence seq_name

minvalue min_value

maxvalue max_value

start with start_value

increment by add_value

cache value;

创建一个aa的id自增序列

create sequence sen_aa_id
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
cache 50;

用户

创建用户

grant connect,resource,dba to 用户名

收回权限

revoke resource,dba from 用户名

java连接数据库

1、加载配置文件

使用反射和类加载器加载配置文件的Io流

InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream();
Properties pro = new Properties();
pro.load(is);
pro.getString("键值")

2、连接数据库

使用DriverManager获取数据库连接
Connection conn = DriverManager.getConnection();

3、获取PreparedStatement对象

获取预处理对象,预处理先将sql语句编译好,之后再填充值,提高了安全性,防止sql注入

String sql = "sqlect * from student";
PreparedStatement pstmt = conn.prepareStatement(sql);

4、获取结果集

使用executeQuery或executeUpdate运行sql语句,获取结果

ResultSet rs = pstmt.executeQuery();

5、释放资源

使用close方法关闭连接,释放资源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值