oracle数据库学习的相关知识点总结

单表的查询

1.基本语句 select 字段名 from 表名

2.起别名 as

3.连接符 ||

4.去重 distinct

5.排序  order by asc

order by desc 

6.select 字段名 from 表名 where 条件

7.and 和 or

8.分组group by

having,使用group by分组后在进行数据筛选的时候,where中不能出现多行函数,所以使用新的关键字having进行条件筛选

 

 

多表连接:

1.笛卡尔积:sql92: select * from A,B      

2.等值连接:                 

sql92:select * from A,B where A.学号=B.学号 

3.非等值连接:

sql92:select * from B,B mm where B.成绩>mm.成绩

4.自连接:sql92:select * from A mm,A tt where mm.姓名=tt.姓名

5.外连接: 利用此语句 select * from A,B where A.成绩=B.成绩 将两个表等值连接了起来,次结果会将A表或B表中不符合的行删除。此时保留不合格的次行信息,便有了左外连接和右外连接和全连接

定义:

左(外)连接,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

右外连接:与左外连接实现效果相反

全连接:实现左外和右外连接的效果。 

左外连接:sql92:select * from A,B where A.成绩=B.成绩(+) order by A.学号 (+在那边就显示那边的null)

右外连接:sql92 : select * from A,B where A.成绩(+)=B.成绩 order by A.学号  

 

 

下1面的用sql99表示:

1.笛卡尔积:

      select * from A cross join  B

2.对sql92等值连接的变形

2.1 自然连接:自动使用多表中所有相同字段(不但值相同,名字也要相同)进行连接(两表中有几个相同,就连接合并几个相同字段)

 select * from A natural join B

2.2 使用using关键字对指定字段进行链接查询,但是必须是同名字段

 select * from A inner join B using(学号)

2.3 使用on关键字可以直接在其后书写链接条件,没有限制 ,想和那个字段连接都可以。

select * from  A inner join B on A.成绩>B.学号

3.外连接

3.1 左外链接 left outer join

select * from A left outer join B on A.成绩=B.成绩 order by A.学号

 

3.2右外链接  right outer join

 

3.3全外链接  full outer join  

select * from A full outer join B on A.成绩=B.成绩 order by A.学号

 

子查询

1.单行子查询:

      问题:查询工资高于平均工资的员工的名字和工资

select * from emp where sal>(select avg(sal) from emp) order by sal

       问题:查询和soctt属于同一部门且工资比他低的员工资料

select * from emp where deptno=(select deptno from emp where ename='SCOTT') and     sal<(select sal from emp where ename='SCOTT')        

 

2.多行子查询

多行子查询学习:其实就使用使用关键字:any  all  in

eg:

问题一:查询工资高于所有SALESMAN的员工信息

select * from emp where sal>(select max(sal) from emp where job='SALESMAN')--单行子查询的写法

select * from emp where sal>all (select sal from emp where job='SALESMAN';

问题二:查询部门20中同部门10的雇员工作一样的雇员信息

select * from emp where deptno='20' and (job='MANAGER' or job='PRESIDENT' or job='CLERK')

 

表的约束

1.主键 :primary key   外键:foreign key

2.非空约束: not null

3.检查约束条件  : default 值 check(条件)

4.唯一约束 :  unique

 

创建,删除,修改表

1.创建表和字段:创建表的基本语句:create table 表名(字段名 类型,字段名 类型....)

2.修改表

在命令窗口查看表结构: desc 表名

添加新字段 :

   alter table 表名 add 字段名 类型

 alter table student add phone number(11)

 修改字段类型:    

     alter table 表名 modify 字段名 类型

alter table student modify sname varchar2(200)

 删除字段:    

      alter table 表名 drop column 字段名

alter table student drop column phone

 修改表名 :

rename 表名 to 新的表名

rename student to stu

rename stu to student

删除表:

    drop table 表名

drop table student

 

插入,更新,删除表的字段数据:

1、插入数据(insert)

   insert into 表名(字段1,字段2,字段3,....)values('值1','值2','值3'.....)

 

insert all

into test_insert(user_name,address) values('aaa','henan')

into test_insert(user_name,address) values('bbb','shanghai')

select * from dual;

2、创建数据的备份

(1)create table 表名 as 查询语句,创建的是和查询结果一样的表,查询结果是什么就会备份一个相同的表

(2)insert into 表名 查询语句,注意:查询出来的结果在结构上必须和插入数据的表相同,字段个数必须相同

(3)注意:备份表只有字段和数据相同,并不会备份约束。

1、备份完整的数据和表

select * from dept;

create table tdept as select * from dept;--备份dept表和数据,只能备份数据和字段

select * from tdept

2、备份完整表

create table tdept1 as select * from dept where 1>2--备份表,不备份数据。

3、备份部分数据和表.create table 表名 as 查询语句,创建的是和查询结果一样的表,查询结果是什么就会备份一个相同的表

create table tdept2 as select dname,loc from dept

4、给备份表添加数据 insert into 表名 查询语句,注意:查询出来的结果在结构上必须和插入数据的表相同,字段个数必须相同

insert into tdept1 select dname,loc from dept where deptno>40

insert into tdept2 select dname,loc from dept where deptno>40

 

更新数据:update

语法结构:update 表名 set 字段名1='字段值1',字段名2='字段值2',...where 条件

 

删除数据:delete

1)删除语句:delete 表名 where 条件

delete tdept---清空表数据

truncate table tdept---清空表数据建议使用truncate关键字,但是此关键字不能回滚数据

 

序列:

//无论什么序列刚开始都是指向没有值的地方,也可以理解为,指向了0

--创建自定义序列

create sequence aa--创建序列

start with 5 --设置开始位置

increment by 2 --设置步长

select aa.currval from dual --查看序列此时的值

select aa.nextval from dual --获得序列自增一次后的值

--创建测试表

create table teacher(

tid number(10) primary key,

tname varchar(100) not null

)

insert into teacher values(cc.nextval,'张三');

insert into teacher values(cc.nextval,'张三');

-删除序列

--drop sequence 序列名

 

索引:

--创建

create index 索引名 on 表名(字段名)

--删除索引

drop index 索引名

--特点:

--显示的创建,隐式的执行

--注意:

--oracle会自动给表的主键创建索引。

 

视图:

--创建视图

create view 视图名 as select 对外提供的内容 from 真实表名

--删除视图

drop view 视图名

 

分页: 

oracle使用rownum可以实现分页的功能。

oracle对外提供的自动给查询结果编号的rownum关键字,与每行的数据没有关系。

--注意:rownum关键字只能做< <=的判断,不能进行> >=的判断

现有一个数据表aa

--1到2 select e.* from (select rownum r, aa.* from aa where rownum<=9 order by aa.编号) e where e.r<=2 --3到4 select e.* from (select rownum r, aa.* from aa where rownum<=4 order by aa.编号) e where e.r>=3 --5到6 select e.* from (select rownum r, aa.* from aa where rownum<=6 order by aa.编号) e where e.r>=5

 

oracle中的用户:

当前用户介绍:权限级别的分配

-------system:系统账户

-------sys:超级管理员

-------scott:普通用户

1、 创建自定义用户: create user 用户名 identified by 密码;

普通用户不具备创建用户的权限,需要使用system账户进行创建

直接创建好的用户不能登录,还需要使用system进行权限的分配(角色:一系列权限的集合)

create user zyp identified by 123456;

给创建的用户赋予角色。

grant 角色名,角色名...to 用户名;

grant connect to zyp;--赋予链接库权限

grant resource to zyp;--赋予操作资源权限

grant dba to zyp;--赋予DBA角色

grant dba to zyp

删除用户权限

revoke dba from zyp

revoke connect from zyp

2、 删除用户

drop user zyp

 

oracle 怎样查询某用户下的所有表的表名

select * from all_tab_comments -- 查询所有用户的表,视图等。

select * from user_tab_comments -- 查询本用户的表,视图等。

select * from all_col_comments  --查询所有用户的表的列名和注释。

select * from user_col_comments -- 查询本用户的表的列名和注释。

select * from all_tab_columns --查询所有用户的表的列名等信息。

select * from user_tab_columns --查询本用户的表的列名等信息。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值