Oracle数据库总结语法二

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;

猜你喜欢

转载自www.cnblogs.com/caiwx/p/11262723.html