1、多行函数【聚合函数】:作用于多行,返回一个值
select count(1) from "表名"; ----查询总数 (*和1作用是一样的)
select sum(sal) from "表名"; --工资总和
select max(sal) from "表名";--最大工资
select min(sal) from "表名"; ---最低工资
select avg(sal) from "表名"; --平均工资
2、分组查询
//所有条件都不能使用别名
---分组查询中,group by后的原始列才能出现在select后面;没有出现在group by后,想出现必须有聚合函数
//查询出部门的平均工资(sal)
select e.外键,avg(e.sal) from "表名" e group by sal; --e 表别名
//查询出部门工资(sal)》2000的
select e.外键,avg(e.sal) from "表名" e having avg(e.sal)>2000; --e 表别名
//查询每个部门高于工资800的员工平均工资再查询出部门工资(sal)》2000的
select e.外键,avg(e.sal) from "表名" e where e.sal>800 group by e.外键 having avg(e.sal)>800; --e 表别名
3、多表中的笛卡尔积
select * from emp e,dept d;
3.1、等值连接(效果相等于内连接)
Select * from emp e,dept d where e.deptno=d.deptno;
3.2、查询出所有部门及部门下的员工信息【外连接】
select * from
emp e right join dept d
on e.deprno=d.deptno;
3.3、Oracle专用外连接
//相当于3.2
select * from emp e,depe d
where e.deptno(+)=d.deptno;
3.4、查询员工和员工领导姓名(用到的自连接
自连接:就是站在不同角度把一张表看成多张表)
select e1.ename,e2.ename
from emp e1,emp e2
where e1.mgr=e2.empno;
4、子查询
4.1子查询返回一个值
//查询工资和Scott一样的员工信息
select * from emp where sal=(select sal from emp where ename="scott");
4.2子查询返回一个集合
//查询出员工和10号部门任意员工一样的信息
select * from emp where sal in (
select sal from emp where deptno=10);
4.3子查询返回一张表
//查询每个部门最低工资,和最低工资姓名,和所在部门名称
--查询每个部门最低工资
select deptno,min(sal) from dept group by deptno
--三表联查,获取最终结果
---masl虚拟字段别名
select t.deptno,t.msal,e,name,d.dname
from(select deptno,min(sal) masl
from dept group by deptno) t,emp e,dept d
where t.deprno=e.deptno
and t.msal=e.sal
and e.deptno=d.deptno;
5、Oracle分页
--rownum 行号:做select查询时候
--没查一行数据,就在该行加上一个行号
--行号从1开始,依次递增,不能跳着走
***排序操作会影响rownum顺序(最好先排序 嵌套查询)
select rownum,t.* from (
select roenum,e.* from emp e order by e.sal desc)t;
5.1、emp表工资倒叙排列,每页5条数据,查询第二页
--rownum不能写上大于一个正数
select * from (
select rownum 别名rn,e.* from(
select * from emp order by sal desc) e
where rownum<11)
where rn>5
---第二种写法不支持order写法
6、视图(提供查询的窗口,所有数据来自原表)
//查询语句创建表
create table "表名" as select * from scoot."表名";
//创建视图 ename,job都是字段名
create view "视图名" as select ename,job from "表名";
//查询视图
select * from "视图名"
//修改视图(不推荐)
update "视图名" set job='ss' where ename='sd' from "表名";
commit;
//创建只读视图
create view "视图名" as select ename,job from "表名" with read only;
8.1、视图的作用
1.屏蔽一些敏感字段
2.保证总部分和分部数据及时统一
9、索引
--概念:就是在表的列上构建二叉树
--达到提高查询效率,但是会影响增删改效率
9.1、单列索引
//创建单列索引
create index "起的名称" on "表名(表中的字段)";
//单列索引触发规则,条件必须是索引列中的原始值(单行函数,模糊查询都会影响索引触发)
select * from emp where ename="scott";
9.2、复合索引
//创建复合索引
create index "起的名称" on "表名(表中的字段,表中的字段)";
10.pl/sql编程语言(面向过程的语言)
--主要用来编写存储过程和存储函数等
--emp.ename%type获取数据库中字段类型
--赋值可以使用:= 也可以用into 查询赋值
--声明方法
declare
i number(2) :=10;
s varchar(10) :='小明';
ena emp.ename%type; --引用型变量
emprow emp%rowtype; --记录型变量
begin
--处理业务逻辑
//输出
dbms_output.put_line(i);
dbms_output.put_line(s);
select 字段名 into ena from 表名 where 字段名="值";
dbms_output.put_line(ena); --便于查看成功与否 控制台输出
select * into emprow from 表名 where 字段名="值";
dbms_output.put_line(emprow.ename||‘的工作为’ || emprow.job);
end;