oracle数据库的笔记

数据类型
int :整数型 
number(m,n)  : m :总长度,n小数点后面的位数 
number(m) :整数位 ,没有小数 
number :默认是最大值 。

字符串类型 
char (m) :m  :长度 ,字节  一个汉字两个字节 。
2000  
varchar2(m)
4000 

日期类型 
date :日 月  年 。


添加
insert into 表名 (列名,列名) values  (值,值) ;


删除
delete from 表名 where 条件 ; 


修改

update 表名 set 列名 = 值 where 条件 ; 

查询 
select * from 表名 ; 


SQL :数据结构查询语言 
1.DDL:数据定义语言 
以create  alter drop 开头的 
修改表 
alter table 表名  add 列名  数据类型 ; 
alter table 表名  drop column 列名  ;


2.DML :数据操作语言
以 insert  delete  update 开头的语句 。


3.DCL:数据控制语言 
grant revoke 
4.DQL :数据查询语言   select 

5.事务性控制命令 
commit  rollback 

编写规则:
1.表名  列名 关键字 不区分大小写
2.where后面条件的值需要区分大小写 。


运算符 
算数运算符 
比较运算符
逻辑运算符 
any :一些 
> any 大于最小的。
< any 小于最大的。 

> all :大于最大的。
< all :小于最小的。

between and 在什么  之间 。  数字,日期 。
in  在列表里面  。in('a','b','c') ;
like :模糊查询 
% :任意长度的任意字符串
_ :一个长度的任意字符串。
not  取反 

distinct 过滤重复数据 
distinct * 表示的是所有列都重复才进行过滤 。


as :别名  给列起别名  可以省略

单行函数 
upper :小写转大写 
lower :大写转小写。
ltrim :去掉字符串左右两边空格
rtrim
trim
concat :连接两个字符串 
abs :取绝对值 。
floor :向下取整
ceil :向上取整 
sysdate :数据库系统当前时间 
to_char :日期和字符串之间进行互相转换 。转换的时候需要指定格式 。
to_date 

聚合函数 
count :统计有效数据的数量 
count(*) :统计这个表的行数 
count(列名) :统计这一列的有效数据,不包含空值 。
max :求最大值 
min :求最小值
avg :求平均值,但是只能用在数字列。
sum :求和 只能用在数字列上 

group by  分组 。把内容相同的分为一组 。
当查询中出现了group by 分组的时候,select 显示额列,要么是group by 分组列,要么是聚合函数列。

对分组之后的数据进行二次过滤,需要使用having 

where 后面不能跟聚合函数 。

select deptno ,count(*) from emp group by deptno 

多表查询 
1.from后面跟上多个表名 ,用逗号隔开 。
2.需要多个表之间有相同意义的字段。

select * from emp , dept where emp.depnto = dept.d_id ; 
在emp表中有的,在dept表中也存在的才查询出来 。
两个表中都存在的才查询出来,称之为内连接 。

外连接 :需要以一张表基表 ,基表的数据会全部显示 ,并且显示与另外一张表匹配的内容 ,若存在不匹配的内容,用空格填充 。
1.左外连接
left join on  

2.右外连接
right join  on

左外连接写的sql ,也可以使用右外连接来改写 。

表名换一下,将left 换成right 就可以了 


在oracle中针对外连接有一种特有的写法 。使用(+) 
(+ )在哪个表后面表示哪个表是匹配表 。


3.全外连接 
其实就是现实两表匹配的内容,还有两表不匹配的内容 。
full  join 


表约束 :其实就是对表的一种限制性的行为,当不满足表的约束,那么对表的dml操作 (insert delete update) ,将不能成功 。

6类 
default 默认约束 
not null非空约束
unique  唯一约束 :不能重复,可以为空 
primary key  主键约束 :不能重复,不能为空 
check   检查约束 ,现在某一列在某个区间范围内 。
foreign key :外键约束 ,需要有两张表,因为外键需要依赖住表的主键存在 ,当给某一列设置了外键之后,就相当于限制了这一列的取值范围 ,只能从主表的主键列中取值 。

一个表上可以存在多个外键列 。

外键的作用是什么呢 ?
保证了数据的完整性 。


使用代码来添加约束 
alter table 表名 add  constraint 约束名 约束类型 (列名) ;
外键约束
references 主表(主键)


oracle中的伪列 

rownum   rowid
rownum :其实就是行号 , 如果要使用 rownum需要从1 开始 。

使用rownum的作用,主要用来分页 。
select * from 
(select rownum rn , emp.* from emp ) t
where t.rn > pageSize * (n-1) and t.rn <= pageSize * n

pageSize :表示的是每页显示的行数
n :表示的是页数 。


rowid :物理意义上的,绝对不会重复的。 
主要用来删除重复数据 。
1.使用distinct 关键字来删除 。
操作步骤 。  s7
1.先查询出不重复的数据 ,放到临时表中 。
select distinct(*) from s7

create table s8
as
select distinct * from s7 
2.删除原表的数据 。
delete from s7 ;
commit ; 

truncate table s7 ; 
3.将临时表的数据插入到原表中 。
insert into s7  select * from s8 ;  
4.删除临时表 。作为无痕操作 
drop table s8 ;

rowid 
1.首先按照重复的列来进行分组 。

select sid,max(rowid) from s7 group by sid ;


select * from s7 where rowid not in ('fdfsafs','fdsafds','fdasdfsa')


delete from s7 where rowid not in ('fdfsafs','fdsafds','fdasdfsa') ;


子查询的概念,
子查询:其实就是嵌套查询,在一个select里面在加上一个select 
为什么会出现子查询呢 ?
因为在很多情况下where后面条件值不是一个具体的值或者表达式,而是另外一个查询的查询结果 。在这种情况下我们就需要使用子查询了。

--删除重复数据 。
delete from s7 where rowid not in (select max(rowid) from s7 group by sid) ;


第三章 ,
序列(sequence)
序列:可以生成一串自动且连续增长的数字 ,目的是为了实现主键自动且唯一的增长 。


创建序列的语法 
create sequence 序列名 ;
start with 起始值 
maxvalue  最大值 
minvalue  最小值
increment by 步长 
cycle  ;

两种用法 
1.查看序列的下一个值 
select seq.nextval from dual; 
2.查看序列的当前值
select seq.currval from dual; 


索引(index)
索引:相当于目录,能够快速定位要访问数据所在的数据块,从而减少查询时间,提高查询效率。

语法
create index 索引名 on 表名 (列名)  ;

主键和唯一约束的列上是不需要创建索引,因为会自动创建。


缺点:
1.增加增删,改的时间 。
2.会占用物理空间(物理内存)
3.创建和维护索引需要时间。

哪些列上适合创建索引
1.在经常需要搜索的列上适合创建索引
2.在经常需要排序的列上
3.在经常需要分组的列上
4.在经常需要充当where条件的列上适合创建索引。

同义词 synonym :其实就是别名的意思 。
1.公共同义词
语法
create public synonym 同义词名  for 数据库对象名 ; 

为什么要创建公共同义词呢 ?
目的=就是为了让他人进行访问,可以不用授权。
一般情况下在创建完表之后,就创建一个和表同名的公共同义词。


公共同义词名 可以和 数据库对象名重复 。
私有同义词不可以重复。
 

2.私有同义词 

语法
create synonym 同义词名  for 数据库对象名 ; 

视图(view)
创建视图的语法 
create [or replace ] view 视图名 
as
select 语句 
[with read only] :只读视图 。
[with check option] :可以修改数据,但是修改之后的数据需要满足where条件  ;

视图的作用
1.简化sql语句 。
2.保护数据的安全性 。
3.执行某些必须使用视图的查询 。

--按照部门编号来进行升序排列
select * from emp  order by deptno ; 

--按照部门编号来进行升序排列,若部门编号相同,在每个部门内部按照薪资来降序排列
select * from emp  order by deptno , e_salary desc ; 

--按照多列排序的排序规则,首先按照第一列进行排序,若第一列相同,在按照第二列进行排序

select * from emp order by e_salary desc; 

空值默认是最大值。
对空值进行排序 ,使用 nulls first  和 nulls last 来排序 。

子查询的效率要高于表连接 。


 

转载于:https://my.oschina.net/m243043962/blog/1511323

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值