当前位置:首页 » 数据仓库 » oracle数据库小组功能
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oracle数据库小组功能

发布时间: 2023-01-19 01:44:20

1. oracle数据库如何查看表的表分区的信息(每个表分区的名字和所属表空间)

这样SELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME
FROM USER_TAB_PARTITIONS

注:

USER_TAB_PARTITIONS:可查看分区表的名字、归属表空间以及表的详细分区情况。

USER_PART_TABLES:可查看用户所有的分区表,以及分区方式。

(1)oracle数据库小组功能扩展阅读:

分区表的作用

Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。

但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 sql DML 命令访问分区后的表时,无需任何修改。

2. oracle数据库在创建后都会有四个默认数据库用户,简要说明它们的功能

我安装oracle一般就三个用户,sys,system,scott。三者权限大小依次递减,sys是有数据库操作员权限sysdba,可以授权或收回其他用户权限。system有dba权限,多用于管理数据库,查看、杀掉会话,建用户,赋权限什么的。scott作为测试用户,测试数据库是否可以正常使用。

3. oracle个人版,标准版和企业版的区别

标准版One(Oracle Database Standard Edition One)在使用、运行能力、性能方面提供了空前的灵活性,应用于工作组、部门和web应用。从较少业务的单服务器环境到多方面的分布环境,Oracle Database Standard Edition One为重要业务应用提供了所有必须的功能。

标准版(Oracle Database Standard Edition)除了提供了Oracle Database Standard Edition One的功能之外,它还支持多机器的集群服务Real Application Clusters,在Oracle Database 10g之前版本的标准版中不包含Real Application Clusters,在早期版本也不是有效的option。

企业版(Oracle Database Enterprise Edition)为重要任务应用提共了性能、有效性、可测量性和安全性等需求,如高吞吐量的联机事务处理(OLTP)应用,密集查询的数据仓库,要求严格的网络应用。Oracle Database Enterprise Edition包含了所有的Oracle数据库组件,具有更加强大的功能,更多优势的选择,详细描述见 Chapter 2 "Options and Packs"

个人版(Oracle Database Personal Edition)提供了单用户的开发和部署环境,它的需求与Oracle Database Standard Edition One、Oracle Database Standard Edition、Oracle Database Enterprise Edition全兼容。

Personal Edition包含所有包含在企业版中的组件,也包括企业版中所有有效的option,除了Oracle Real Application Clusters,该option不能用于个人版。个人版在以下平台中有效:Windows 2000,Windows NT,Windows XP,Windows Server 2003 (32-bit 和 64-bit 版本)。管理包不包含在个人版中。

4. Oracle数据库基本操作步骤是怎样的呢

e数据库服务器就足够了,这时你已经拥有oracle客户端的功能。(1)你可以通过第三方软件:如
plsql
developer(非常强大的oracle数据库操作软件)来操作oracle数据库;(2)当然装完oracle数据库服务器以后,你也可以通过控制台来操作,步骤如下:开始-〉运行-〉cmd(打开控制台窗口)-〉敲入
sqlplus
->输入正确的用户名密码(如scott/tiger)就可以操作了。
装完oracle数据库服务器以后,如果你还装oracle客户端(client),那么你在连接数据库的时候记得加上完整的数据库服务名:如scott/[email protected]:1521/yourinstancename
这样也能保证正确的操作数据库了。
另外,虚机团上产品团购,超级便宜

5. oracle数据管理功能有哪些

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。
到目前仍在数据库市场上占有主要份额。作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
主要应用的企业:现在基本大型的企业都是用的oracle数据库,如公安局的身份证数据信息存储、中国银行的数据信息存储、淘宝数据存储等等。这些企业基本都有一个共同特点:数据量大,要求数据准确,要求系统性能高。

6. Oracle系统的结构

ORACLE数据库系统为具有管理ORACLE数据库功能的计算机系统。每一个运行的ORACLE数据库与一个ORACLE实例(INSTANCE)相联系。一个ORACLE实例为存取和控制一数据库的软件机制。每一次在数据库服务器上启动一数据库时,称为系统全局区(SYSTEM GLOBAL AREA)的一内存区(简称SGA)被分配,有一个或多个ORACLE进程被启动。该SGA 和 ORACLE进程的结合称为一个ORACLE数据库实例。一个实例的SGA和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。
在ORACLE系统中,首先是实例启动,然后由实例装配(MOUNT)一数据库。在松耦合系统中,在具有ORACLE PARALLEL SERVER 选项时,单个数据库可被多个实例装配,即多个实例共享同一物理数据库。
进程结构和内存结构
进程是操作系统中的一种机制,它可执行一系列的操作步。进程是由多个线程组成的。在有些操作系统中使用作业(JOB)或任务(TASK)的术语。一个进程通常有它自己的专用存储区。ORACLE进程的体系结构设计使性能最大。
ORACLE实例有两种类型:单进程实例和多进程实例。
单进程ORACLE(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。
在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE 。
多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分,对于每一个连接的用户都有一个进程。
在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户进程。ORACLE进程又分为两类:服务器进程和后台进程。服务器进程用于处理连接到该实例的用户进程的请求。当应用和ORACELE是在同一台机器上运行,而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可降低系统开销。然而,当应用和ORACLE运行在不同的机器上时,用户进程经过一个分离服务器进程与ORACLE通信。它可执行下列任务:
对应用所发出的SQL语句进行语法分析和执行。
从磁盘(数据文件)中读入必要的数据块到SGA的共享数据库缓冲区(该块不在缓冲区时),将结果返回给应用程序处理。
系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为后台进程。在许多操作系统中,后台进程是在实例启动时自动地建立。一个ORACLE实例可以有许多后台进程,后台进程的名字为:
DBWR数据库写入程序
LGWR日志写入程序
ARCH归档
RECO 恢复
LCKn 封锁 。

7. oracle 分组函数里可以嵌套吗

可以 ,但最多只能两层。

Oracle分组与组函数

一、求和与求平均
1、什么是组函数
组函数就是我们前面我说过的多行函数。它主要针对表进行操作。因为只有表中,才有多行数据。下面我们以SUM和AVG这两个组函数为例,先从它们开始,介绍组函数的特性。 www.2cto.com
2、SUM 求和函数
gyj@OCM> select sum(salary) from t1;
SUM(SALARY)
-----------
315888
ORACLE在执行SUM()函数时,会从SALARY列取出每一行,把结果累加到一起。我们在讲单行函数和多行函数时就说过,对于单行函数,将列中每一行数据看作一个个体,单行函数分别对每个个体进行计算。而多行函数则把列中所有行数据看作一个整体,多行函数对这个整体中的所有元素,统一的做求和、求平均、统计最大或最小值等运算,无论此整体中包含多少行,最终返回的结果只有一个。一个总的和或平均值,或最大值,或最小值,等等。单行函数对每一行单独进行处理,每一行它都返回一个结果。
gyj@OCM> select id,sum(salary) from t1;
select id,sum(salary) from t1
*
ERROR at line 1:
ORA-00937: not a single-group group function
www.2cto.com
这是很容易理解的,id(编号)列有10行数据,而SUM(salary)只有一行结果。一个10行,一个只有一行,Oracle没办法将这两个列组合在一起。列可以和单行函数组合使用,因为单行函数每一行都返回一个结果,列中有10行,就返回10个结果。如:
gyj@OCM> select id,round(salary,1) from t1;
ID ROUND(SALARY,1)
---------- ---------------
2 8000
3 10000
4 15000
5 0
7 12000
6 12000
1 12000
3、WHERE 条件 与组合函数
在没有条件时,组合函数默认对列中所有行数据进行处理。我们可以使用条件,限制求和的行数。比如,我现在只想求一下姓名都为Joe的月薪的总和。
gyj@OCM> select sum(salary) from t1 where name='Joe';
SUM(SALARY)
-----------
22000
4、VAG求平均值
AVG和SUM的用法完全相同,它是在SUM求后和,再除以行数,就得到一个平均值。例如:
gyj@OCM> select avg(salary) from t1;
AVG(SALARY)
-----------
17549.3333
5、DISTINCT
DISTINCT的俢作用是去除重复值,这我们在上一课有过描述。它也可以用在组函数中,下面我们看看效果:
gyj@OCM> select sum(distinct salary) from t1;
SUM(DISTINCTSALARY)
-------------------
162888
6、NULL值的影响
首先,对于SUM()函数来说,多了个NULL值不会有任何的影响。SUM()函数仅仅是忽略NULL值。
gyj@OCM> insert into t1 values(26,'rose',null,null);
1 row created.
gyj@OCM> commit;
Commit complete.
gyj@OCM> select sum(salary) from t1;
SUM(SALARY)
-----------
315888
结果仍是315888。刚才没有添加NULL值前,求和的结果也是315888。
对来求平均函数来说,它是先求和,再除以行数。那么,NULL值应不应该被计算进行数内呢。也就是说,现在salary列中有22行,其中有4行为NULL。求和的结果是315888,那么,在求平均时,是用总和数315888除以22呢,还是应该除以18。在默认情况下,是除以18。也就是说,ORACLE的组函数中,对于NULL值通常采取的都是不理不采,直接跳过,忽略它。我们来看一下求平均的结果:
gyj@OCM> select avg(salary) from t1;
AVG(SALARY)
-----------
17549.3333
再来看看这个结果是不是315888除以18:
gyj@OCM> select 315888/18 from al;
315888/18
----------
17549.3333
的确,是315888除以18。空值被简单的忽略了,就好像从来没有它
但有时我们不能简单的忽略空。空值也是一行数据。它可能刚刚加入,还没有产生业绩等数据,但它也是一行数据。有时不能把他从行中剔除。这个时候,NVL()函数就派上用场了。先用NVL()函数,把空值转换为0,再进行组函数的计算,空值就不会被忽略了,使用形式如下:
gyj@OCM> select avg(nvl(salary,0)) from t1;
AVG(NVL(SALARY,0))
------------------
14358.5455
函数的嵌套,我们在前面也说过。也处理里层的函数,将处理结果传给外层,由外层处理。当遇到空值时,先由NVL将之转换为0,再由AVG()将0纳入到求平均的计算中。空会被AVG忽略,而0是不会被忽略的。
下面再验证一下:
gyj@OCM> select 315888/22 from al;
315888/22
----------
14358.5455
315888除以22,结果就是14358.5455。空值已经不被忽略了。

二、最大值 MAX 与最小值 MIN
在掌握前面两个函数的基础上,这两个函数的使用就非常简了。
gyj@OCM> select max(salary),min(salary) from t1;
MAX(SALARY) MIN(SALARY)
----------- -----------
30000 0
SALARY列中的最大值是30000,最小值是0。NULL值不算。组函数都会忽略NULL值。当然,我们可以使用NVL将空值转换为非空:
gyj@OCM> select max(salary),min(nvl(salary,0)) from t1;
MAX(SALARY) MIN(NVL(SALARY,0))
----------- ------------------
30000 0

三、COUNT 统计函数
统计某列中满足条件行的数目。比如:
gyj@OCM> select count(salary) from t1 where salary>5000;
COUNT(SALARY)
-------------
17
统计SALARY列大于5000的行的数目。COUNT(salary)括号中的salary列,可以换为* :
gyj@OCM> select count(*) from t1 where salary>5000;
COUNT(*)
----------
17
换为*后,是统计t1表中,满足salary>5000这个条件的行的数目。这和COUNT(salary)是差不多的。有一点不同,下面我们把条件去掉:
gyj@OCM> select count(*) from t1;
COUNT(*)
----------
22
这将统计t1表中总共有多少行。*号表示,这个统计,是针对所有列的。而如果将COUNT(*)换为COUNT(salary),如下:
gyj@OCM> select count(salary) from t1;
COUNT(SALARY)
-------------
18
这将只统计SALARY列有多少行数据。和其他函数一样,COUNT将忽略空值。
在COUNT中,也可以使用DISTINCT去掉重复值,只统计非重复行的数目:
gyj@OCM> select count(distinct salary) from t1;
COUNT(DISTINCTSALARY)
---------------------
11
在salary列,的确只有11种值。当然,空值仍然不被计算在内,但可以使用NVL将空值转换为0。

四、分组与组函数
1、分组 GROUP BY
分组的语法是:GROUP BY 列名1,列名2,……
分组的作用是根据某些列的值,将这些列值相同的行分为一组。这就是分组。分组和组函数和在一起,可以完成非常强大的功能。组函数从名字上就表现出来了,“组”(重读)函数吗,针对分组的函数。下面我们看一下t3测试表:
gyj@OCM> select * from t3;
ID NAME SALARY
---------- ---------- ----------
1 gyj1 5000
1 gyj11 5000
2 gyj2 6000
2 gyj22 6000
3 gyj3 7000
3 gyj33 7000
4 gyj4 8000
4 gyj44 8000
gyj@OCM> select id,sum(salary) from t3 group by id;
ID SUM(SALARY)
---------- -----------
1 10000
2 12000
4 16000
3 14000
先对t3表的id列进行分组,分组后两个1合并成一个1,两个2合并成一个2,两个3合并成一个3,两个4合并成一个4,所有重复的值都被合并为一个。在分组的同时,使用SUM(SALARY),计算每个小组中薪水的总和。
我们可以在分组时使用所有的组函数,对每一个小组内的数据,分别求和、求平均、最大值、最小值,和统计行数:
gyj@OCM> select id,sum(salary),avg(salary),max(salary),min(salary),count(*) from t3 group by id;
ID SUM(SALARY) AVG(SALARY) MAX(SALARY) MIN(SALARY) COUNT(*)
---------- ----------- ----------- ----------- ----------- ----------
1 10000 5000 5000 5000 2
2 12000 6000 6000 6000 2
4 16000 8000 8000 8000 2
3 14000 7000 7000 7000 2
这个命令中,我使用了我们所讲过的每一个组函数。
在分过组后,非分组列是不能直接显示的,比如:
gyj@OCM> select id,salary from t3 group by id;
select id,salary from t3 group by id
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
分组后ID被合并成四行,行值分别是1、2、3、4,而SALARY列仍有8行值。这样的话,ORACLE没办法把这两个列组合到一起。因此,就报出了错误。
通常在分组后,在SELECT 和 FROME之间的列名表中,只能出现分组列。要想出现其他列,必须用组函数把列中的行值处理一下,就像上面的例子,SALARY有8行,必须使用组函数,将8行也处理为4行。
gyj@OCM> select id,salary from t3 group by id,salary;
ID SALARY
---------- ----------
1 5000
2 6000
3 7000
4 8000
2、在Group by中使用函数
gyj@OCM> select name from t3 group by substr(name,1,4);
select name from t3 group by substr(name,1,4)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
这个命令报出了错误,但是ORACLE已经指出了,错误不在我们的分组子句中,分组子句是对的,分组中可以使用函数。将NAME的前4个字符截取出来,根据这4个字符进行分组,Oracle可以实现这样的功能。错在SELECT 后的列名表NAME上,分组后只剩4个值,而NAME却有8个值。正确的形式是:
gyj@OCM> select substr(name,1,4),count(*) from t3 group by substr(name,1,4);
SUBSTR(N COUNT(*)
-------- ----------
gyj4 2
gyj2 2
gyj1 2
gyj3 2
我同时用COUNT(*)计算一下分组后,每个小组中的行数。
SELECT后的列名表,除了组函数,其他内容必须和GROUP BY的分组表达式一样!!!
3、条件
有两种方法限制分组的行,一是在分组前,使用WHERE,过滤掉不满足条件的行,只对满足条件的行分组。二是,在分组后使用HAVING,只显示满足条件的分组结果。
先说WHERE。
(1)WHERE 条件
我想对薪水大于5000的员工以ID进行分组
gyj@OCM> select id,count(*) from t3 where salary>5000 group by id;
ID COUNT(*)
---------- ----------
2 2
4 2
3 2
和普通的分组没什么两样,只是在GROUP BY前加了个条件而已。
注意,WHERE中条件的判断,优先于分组的执行。先判断条件,对满足条件的行分组。
(2)HAVING 条件
HAVING是在分组后,只显示满足条件的行。
接着前面的例子,比如说,在分组后,只查id大于的信息:
gyj@OCM> select id,count(*) from t3 where salary>5000 group by id having id>2;
ID COUNT(*)
---------- ----------
4 2
3 2
HAVING后的条件不能挪到WHERE中,因为在执行到WHERE时,ORACLE还没有开始分组,此时执行组函数SUM,将会报错。
而HAVING的使用,也有限制,HAVING是在分组后执行。分组后,原表中的列除分组列外,都将不能直接使用。
gyj@OCM> select id,count(*) from t3 group by id having salary>5000;
select id,count(*) from t3 group by id having salary>5000
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
我将上面WHERE后的条件salary>5000,挪到了HAVING之后,报出了错误。在HAVING后,和SEELCT … FROM这间的列一样,只能有分组列,和经过组函数处理过的其他列。
4、GROUP BY中不能使用别名
gyj@OCM> select id,count(*) from t3 where salary>5000 group by 1;
select id,count(*) from t3 where salary>5000 group by 1
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
id在第一列,用id分组,在group by中我用1表示用第一列id分组,不能用这种方式和order by不一样!!!
gyj@OCM> select id bh,count(*) from t3 where salary>5000 group by bh;
select id bh,count(*) from t3 where salary>5000 group by bh
*
ERROR at line 1:
ORA-00904: "BH": invalid identifier
我把ID列设为别名为bh,然后用bh分组报错
gyj@OCM> select id bh,count(*) from t3 where salary>5000 group by id;
BH COUNT(*)
---------- ----------
2 2
4 2
3 2
我把ID列设为别名为bh,然后用id分组没问题,这个地方要注意!

五、组函数的嵌套
单行函数和和组函数可以嵌套使用,组函数和组函数也可以嵌套使用。例如:
gyj@OCM> select sum(salary) from t3 group by id;
SUM(SALARY)
-----------
10000
12000
16000
14000
我根据id对表分组,并计算出每一组的总薪水。现在我想在此基础上,求出哪一组的总薪水最高:
gyj@OCM> select max(sum(salary)) from t3 group by id;
MAX(SUM(SALARY))
----------------
16000
这就是组函数的嵌套使用。ORACLE中规定,组函数嵌套只能嵌两层。其实多层嵌套并没有实际的用途,因此ORACLE没有提供组函数的多层嵌套。但是,单行函数是可以多层嵌套的。

8. oracle 查询一个小组下的人都满足一个条件时返回一个值

select 字段名
from 表名
where not exists
(select 字段名
from 表名
where 字段 = 未完成任务的状态
)

最里面的括号查询的是 未完成状态的小组

然后嵌套进去 前面有个 not exists 代表不包括
就是查询不包括未完成状态的小组 那就是查询 完成状态的小组