Oracle操作总结

聚合函数:
count sum max min avg
count返回的结果集中行的数目
sum max min avg顾名思义。但是要注意聚合函数强调的是"结果集中……",强调了
现在进行的操作对象是结果集
注意NULL不参与聚合函数的预算,要想其参加运算那么要将其转换为非空的值

分组:
在一个查询中需要进行多次统计就需要就必须使用分组

where是分组前过滤,过滤的是原始数据。这样就过滤掉了不必要的数据提高了效率

having是分组后过滤,过滤的是统计结果

先要弄明白:分组,分组 什么才叫一组——前提条件当然是相同的才叫一组

比如:班级同学分两组,按照性别来分。只有都是男性才会在同一组

老师的笔记说得很清楚:分组函数运算每一组记录,每一组返回一个结果
比如:select deptno,job,avg(sal) from emp group by deptno,job 把deptno,job相同的(其余字段不用多考虑,就以这两个为关键)算作一组
所以最后Oracle返回的是九行数据,即九个结果

注意按照某些字段分组后,已经是"组"的概念了,个体的特性已经消失了。
按照什么分组,那么当然可以从结果集中得到这些字段!!!比如按照城市分组,就可以得到每一组的城市名。
除了分组字段以外的字段,其余的字段只可以参与聚合运算(count sum max min avg)——当然,前提是可以使用具体的聚合
函数,比如不可以avg(name),因为那么根本就不是数字!!!!!!!!!!

再次强调:比如(在这里我们假设没有按照comm分组)员工编号是"9527"的comm(提成),但是可以得到平均的comm.
因为现在是以"组"的概念存在的。已经不存在个体了。

核心思想:分组以后个体的概念消失了,是"组"的概念。
比如这里有学生的 姓名,年纪,性别,身高
按照身高分组——相同的身高在一个组。那么当然可以select 身高,其余的只可以用聚合函数了
按照性别分组——相同的性别放在一个组。那么当然可以select 性别,其余的只可以用聚合函数了

还有一个很值得注意:要是涉及到聚合,分组的时候order by的字段也只能是分组里的字段!!!!!!!!!!!!!!

只要涉及到聚合函数就要想到分组!!!!!!!!!!!
要是前面出现了聚合函数,且后面没有涉及到group by 那么这是最特殊的分组。在select里任意一个具体字段都不可以使用。
只可以使用聚合函数

这里有一堆这两天敲的实验数据:

select * from emp
select job,count(*) from emp group by job having count(*)>3
select job "工种" from emp where job='CLERK'--正确的
select job "工种",count(job) "此工种人数" from emp group by job--正确的
select count(*) "此工种人数" from emp where job='CLERK'--正确的
select job "工种",count(*) "此工种人数" from emp where job='CLERK'--错误的
select job "工种",sum(comm) from emp group by job--正确的
select job "工种",avg(comm) from emp group by job--正确的
select job "工种",max(comm) from emp group by job--正确的
select job "工种",min(comm) from emp group by job--正确的
select job "工种",sal "工资",sum(comm) from emp group by job--错误的
select job "工种",avg(sal) "平均工资",sum(comm) from emp group by job--正确的
select job "工种",max(sal) "最高工资",sum(comm) from emp group by job--正确的
select job "工种",max(mgr) "管理者为",sum(comm) from emp group by job--正确的
select job "工种",sum(mgr) "测试",sum(comm) from emp group by job--正确的
select job "工种",max(ename) "ename最大值",sum(comm) from emp group by job--正确的

select job "工种",count(mgr) "测试",sum(comm) from emp group by job--正确的
select job "工种",count(ename) "测试",sum(comm) from emp group by job--正确的
select job "工种",count(hiredate) "测试",sum(comm) from emp group by job--正确的
--关于分组后的order
select job "工种",max(sal) "最高工资",sum(comm) from emp group by job order by job desc--正确的
select job "工种",max(sal) "最高工资",sum(comm) from emp group by job order by comm desc--错误的
select job "工种",max(sal) "最高工资",comm "提成",sum(comm) from emp group by job,comm order by comm desc--正确的

select * from emp
--1clerk null
--2sale  300
--3sale  500
--4man   null
--5sale  1400
--6man   null
--7man   null
--8ana   null
--9pre   null
--10sal   0
--11clerk null
--12clerk null

 

 

 

 

 

 

 

时间: 2024-09-23 04:26:49

Oracle操作总结的相关文章

oracle操作不同服务器上的sql server2000

问题描述 oracle操作不同服务器上的sql server2000 我使用透明网关把oracle连接sql server2000,在oracle上做了个触发器绑定到一张表A,表A如果insert或者update将数据同步到sql server2000上,结果insert成功了,update部分语句一直编译不通过,语法有问题!下面图中update中的code与status一直说标示符无效,语法不知道怎么写?(有没有做过类似的数据库问题帮忙下,谢谢) 解决方案 ..额!后来想起来,要加双引号,才能

Oracle操作

  1.查看当前数据库的实例名: show parameter instance_name 2.数据表结构的相关操作 创建数据表: create table 表名(列1 数据类型1,列2 数据类型2--.) tablespace 表空间名 修改数据表: l 添加新列: alter table 表名 add (新添加的列名 数据类型 ) l 修改和删除已有列:alter table 表名 modify(列名 数据类型); alter table 表名 drop column 列名; l 重命名列:

Oracle操作报错:record is locked by another user

在操作ORACLE数据库的时候,由于执行完,没有COMMIT,直接把PL/SQL关闭掉,后来导致那张表被锁住. 这告诉我们操作数据库之后一定要记得手动commit. 当编辑时就会出现这个信息,record is locked by another user. 解决办法 步骤一 查看锁 select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id

Oracle操作数据库常用名命令

安装Oracle时要注意以下:关闭防火墙,断开网络. 在安装Oracle时,要选上:创建带样本的数据库,如果不选上,就不会有大数据用户出现. 通过DBCA可以创建数据库,如果想连接自己创建的数据库,可以通过如下代码: sqlplus 数据库名称/密码 使用oracle数据库,主要使用以下四个用户: 超级管理员:sys/change_on_install 普通管理员:system/manager 普通用户:scott/tiger---->默认是锁定的. 大数据用户:sh/sh Oracle的卸载最

C++ 操作 Oracle

#include <string> #include <occi.h> #include <iostream> using namespace std; using namespace oracle::occi; struct Student_struct { int no; int age; string name; }; std::string getSQL(void) { std::string str_sql = "SELECT * FROM emp

JavaScript操作Oracle数据库示例_javascript技巧

我还是IT界的一只小菜鸟,参加工作时间不长,不过凭着自己的一颗好学的心还有自己永不停止的学习脚步,自己在编程方面也是收获颇丰~~ 一直以为JavaScript想和数据库交互必须通过AJAX来调用服务器端代码(C#或JAVA)才行,但最近才发现JavaScript可以直接与数据库进行交互...下面是一个简单的从数据库中调取数据加载到界面的小例子(有关JS操作数据方面的知识大家如有什么好的建议希望您能留下,我们相互学习,共同进步)~~ <!DOCTYPE HTML PUBLIC "-//W3C

oracle之CLOB处理完整版

oracle /****操作oracle数据库的CLOB字段,包括读和写*作者:令少爷* */ package com.nes.common.sql.lob; import java.sql.*;import java.io.*;import oracle.jdbc.OracleResultSet;import oracle.sql.*; public class JClob { String tableName = null; //表名 String primaryKey = null; //

Symantec Backup Exec Remote Media Agent及Oracle Agent的部署

以下配置在Oracle服务器上: 一.Remote Media Agent的要求: 您必须具有 Linux 服务器的 root 权限才能安装 Remote Media Agent. 您必须具有访问已安装的 CD-ROM 驱动器的权限. 您必须具有 SCSI 通用 (sg) 设备驱动程序,以便操作系统能够支持存储设备. 安装完成之后,您必须将 Linux 服务器作为 Remote Media Agent 添加到 BackupExec 数据库.然后,您可以将作业发送到挂接到 Linux 服务器的设备

Oracle 11g Dataguard物理备库配置(五) broker switchover测试

本文采用Oracle 11g Dataguard broker switchover测试 1. 采用dataguard broker 测试switchover 1) 主库情况 SQL> select open_mode,database_role,db_unique_name from v$database; OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME -------------------- ---------------- ---