Oracle基础知识5

Oracle子查询和用户管理

子查询

当查询的筛选条件不明确,必须通过执行一次查询才能够明确该筛选条件时要使用子查询。子查询又分为相关子查询和不相关子查询。

非相关子查询的执行不依赖与外部的查询,执行过程:
(1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
(2)执行外部查询,并显示整个结果。  
非相关子查询一般可以分为:返回单值的子查询和返回一个列表的子查询。

相关子查询的执行依赖于外部查询。多数情况下是子查询的where子句中引用了外部查询的表。
执行过程:
(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。
(2)执行内层查询,得到子查询操作的值。
(3)外查询根据子查询返回的结果或结果集得到满足条件的行。
(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

与前面介绍过的子查询不同,相关子查询无法独立于外部查询而得到解决。

非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。故非相关子查询比相关子查询效率高。不清楚的可先跳过该知识点,看完下面再来进行理解,若还不懂请自行百度。

单行子查询

使用时机:筛选条件不明确需要执行一次查询,并且查询结果只有一个数据(一个字段里的一个值)!

注意:where子句中允许出现查询语句,该查询语句称为子查询。

使用格式:

1
select 内容 from 表名 where 字段名 比较运算符 子查询语句;

示例:

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

多行子查询

使用时机:当子查询的结果只有一个字段但是字段有N个值时,可以考虑使用多行子查询,其实就是使用一下关键字:

  • any 任意

    1
    select 内容 from 表名 where 字段名 比较运算符 any 子查询语句;
  • all 所有

    1
    select 内容 from 表名 where 字段名 比较运算符 all 子查询语句;
  • in 表示任意存在

    1
    select 内容 from 表名 where 字段名 (not) in 子查询语句;

带有EXISTS谓词的子查询

EXISTS代表存在量词。带有EXiSTS谓词的子查询不返回任何数据,只产生逻辑真值true或逻辑假值false

1
select 内容 from 表名 where exists 子查询语句;

Oracle用户管理

权限:具备某类事物的操作的能力,此能力称为权限。

角色:一系列权限的集合。

oracle自带账户

  • system:管理员账户
    • 具备大部分oracle的操作权限,主要用来管理普通用户及Oracle的数据。
    • 使用人:oracle数据维护工作人员。
  • sys:超级管理员账户
    • 具备system的所有权限,同时又具备其他的权限。
    • 使用人:oracle工程师

创建账户

  • 使用system账户,并使用dba身份,登录oracle管理系统。

  • 创建用户

    • 1
      create user 新用户名称 identified by 用新户密码;

维护账户

  • 赋予权限

    • 1
      grant 权限或角色名称 to 用户名;
  • 甚至我们可以给予dba权限,拥有dba权限的用户可以查看其他人的表格:用户名.表名

    • 1
      2
      3
      grant connect to 用户名称;   --给用户赋予登录权限
      grant resource to 用户名称; --给用户资源操作权限
      grant dba to 新用户名称;
  • 删除权限

    • 1
      revoke 权限或角色名称 from 用户名;

删除账户

1
drop user 用户名;

其余内容(角色等)下次整理…

您的每一份支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------