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...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;