Oracle中的分组查询与DML

时间:2022-07-22
本文章向大家介绍Oracle中的分组查询与DML,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、Group by

进行分组查询, group by 子句可以将数据分为若干个组

1.1 分组查询

注意: 出现在 SELECT 子句中的字段,如果不是包含在多行函数中,那么该字段必须同时在 GROUP BY 子句中出现。

a) 统计每个部门的编号, 最高工资和最低工资

select deptno, max(sal), min(sal) from emp group by deptno order by deptno; 

1.2 带 where 的分组查询

注意: group by 子句要写到 where 子句的后面

a) 查询每个部门的人数和平均工资, 排除 10 部门

select deptno, count(*), avg(sal) from emp where 
deptno<>10 group by deptno order by deptno; 

1.3 带 having 的分组查询

注意: where 子句中不允许使用分组函数, 分组函数用于分组前过滤 having 用于过滤分组后的条件 a) 查询每个部门的总工资和平均工资, 排除平均工资低于 1600 的部门

select deptno, sum(sal), avg(sal) from emp group by 
deptno having avg(sal)>=1600 order by deptno; 

1.4 select 语句的执行顺序

分组查询时相关关键词的顺序: from–>where–>group by–>select–>having–>order by

a) 在 emp 表中,列出工资最小值小于 2000 的职位

select job, min(sal) from emp group by job having min(sal)<2000;

b)列出平均工资大于 1200 元的部门和工作搭配组合

select deptno, job, avg(sal) from emp group by deptno,job having avg(sal)>1200 order by deptno;

2、DML(数据库操作语言)

2.1 复制一个测试表格

a) 复制 emp 表格, 命名为 tmp

create table temp as (select * from emp); 

b) 赋值 emp 表格的表结构, 不复制数据

create table temp2 as (select * from emp where 1=2); 

2.2 新增(insert into)

a) 语法

insert into 表名 [(列 1, 列 2, …)] values (值 1, 值 2, …);

b) 向 temp2 表格插入一条数据

insert into temp2 (empno, ename, job, mgr, hiredate, 
sal, comm, deptno) values (1234, '小明', '学生', 1111, 
to_date('2008-8-8', 'yyyy-mm-dd'), 3000, 200, 10); 

a) 当表格的每一列都要插入数据时, 可以省略列名不写. 需 要保证值的顺序和列的顺序一致.

insert into temp2 (empno, ename, job, mgr, hiredate, 
sal, comm, deptno) values (1234, '小明', '学生', 1111, 
to_date('2008-8-8', 'yyyy-mm-dd'), 3000, 200, 10); 

b) 向表格插入一行数据, 只备注编号和姓名

insert into temp2 (empno, ename) values (1236, '小李'); 

2.3 修改(update)

a) 语法

update 表名 set 列 1=值 1[, 列 2=值 2…][where 条件]

b) 将 10 部门员工的工资调高 10%.

update temp2 set sal=sal*1.1 where deptno=10; 

2.4 删除(delete) a) 语法

delete [from] 表名 [where 条件];

b) 删除编号为 1234 的员工信息

delete from temp2 where empno=1234;