oracle学习篇(三)

oracle学习篇(三)

1 oracle伪列

1.1 查询rowid

1.1.1 示例代码
-- rowid 行id 添加时就生成了(删除某一列时,id会更随着一起删除,id在添加的时候就固定死了)
SELECT rowid,e.* FROM emp e
1.1.2 运行截图

在这里插入图片描述

1.2 查询rownum

1.2.1 示例代码
-- rownum 行号 查询时根据行数产生,第一行(第一条数据)一定是1,
SELECT rownum,e.* FROM emp e;
1.2.2 运行截图

在这里插入图片描述

1.3 rownum实现分页

1.3.1 原理
把里面的查询结果当成一个表,
因而里面的rownum在外面的表可以当成表的正常的列去使用了
1.3.2 示例代码
SELECT * FROM(
       SELECT rownum r,e.* FROM emp e
) where r between 1 and 2;
1.3.3 运行截图

在这里插入图片描述

1.4 rownum员工表中查询工资最高的三个员工

1.4.1 示例代码
SELECT * FROM(
  SELECT rownum r,e.* FROM emp e
  order by sal desc
) where  rownum between 1 and 3
1.4.2 示例代码截图

在这里插入图片描述

1.5 查询出哪些员工工资比本部门平均工资高

1.5.1 示例代码
SELECT e2.* FROM 
 (SELECT AVG(sal) a,deptno FROM emp
 GROUP BY deptno) e1
INNER JOIN emp e2
ON e1.deptno=e2.deptno
WHERE e1.a<e2.sal
1.5.2 示例代码运行截图

在这里插入图片描述

1.6 查询员工的编号、姓名、领导编号、姓名

1.6.1 示例代码
SELECT e1.empno,e1.ename,e2.empno,e2.ename
FROM emp e1
LEFT JOIN emp e2
ON e1.mgr=e2.empno;
1.6.2 示例代码运行截图

在这里插入图片描述

2 保存点

2.1 设置保存点

2.1.1 语法
-- 设置保存点
savepoint 保存点名称;
保存点后面的更新的sql语句
2.1.2 示例代码
--保存点
savepoint a;
update emp set sal=1000 where empno=7369;

2.2 返回到保存点之前的数据的状态

2.2.1 语法
-- 回到保存点之前的状态,该保存点之后的语句均不执行
rollback to 需要恢复到保存点前的名称;
2.2.2 示例代码
--保存点
rollback to c;

3 PL/SQL

3.1 输出hello world

3.1.1 示例代码
begin
  dbms_output.put_line('hello world');
end;
3.1.2 示例代码运行截图

在这里插入图片描述

3.2 定义变量并输出变量

3.2.1 语法
变量名 变量类型(变量长度):=变量值;
-- 如果想要手动输入,使用&关键字即可
3.2.2 示例代码
declare 
  -- '张三'
   vname varchar2(20):=&请输入姓名;
   --vage number;
   vage number:=&请输入年龄;
begin
3.2.3 示例代码运行截图
a 输入之前

在这里插入图片描述

b 输入之后

在这里插入图片描述

3.3 常量的定义及其使用

3.3.1 语法
 常量名 constant 常量类型(长度):=常量值;--常量 不能修改
3.3.2 示例代码
declare
  pi constant number:=3.14;--常量 不能修改
  r number:=&请输入圆的半径;
begin
     dbms_output.put_line('面积:'||pi*r*r);
end;
3.3.3 示例代码运行截图
a 输入之前

在这里插入图片描述

b 输入之后

在这里插入图片描述

3.4 属性数据类型

3.4.1 列类型
a 语法
-- %type 列类型  前面必须指定哪个表的哪一列,得到的具体的某一个值
  变量名 表名.字段%type;
b 示例代码
declare
  vname emp.ename%type;
  vdate emp.hiredate%type;
begin
  select ename,hiredate into vname,vdate from emp where empno=7369;
  dbms_output.put_line('姓名:'||vname);
  dbms_output.put_line('工资:'||to_char(vdate,'yyyy-mm-dd'));
end;
c 示例代码运行截图

在这里插入图片描述

3.4.2 行类型
a 语法
变量名 表名%rowtype;
--该变量可以存储员工表的一行数据,但是不能直接在输出语句里面打印,需要变量名.列名去打印
b 示例代码
declare
 vemp emp%rowtype;
begin
  select * into vemp from emp where empno=7499;
   dbms_output.put_line(vemp.empno||'-'||vemp.ename);
end;
c 示例代码运行截图

在这里插入图片描述

3.5 if循环

3.5.1 语法
if (条件){
     //条件结构体
}	IF 条件 THEN
     --条件结构体
END IF;
3.5.2 示例代码
-- nvl(a,b) 如果a=null 返回b 否则返回a
declare
 vsal emp.sal%type;
begin
  select sal into vsal from emp where ename='JAMES';
  --判断
  IF vsal>900 then
    -- decode
    update emp set comm=nvl(comm,0)+800 where ename='JAMES';
  ELSE
    update emp set comm=nvl(comm,0)+400 where ename='JAMES'; 
  end if;
  -- commit;
end;
--查询代码
-- SELECT * FROM emp WHERE ename ='JAMES'
3.5.3 示例代码运行截图
a 更新前

在这里插入图片描述

b 更新后

在这里插入图片描述

3.6 无条件循环(loop)

3.6.1 语法
 loop
      循环体语句
      exit when 循环退出条件;
      --如果是直接exit,意味着只要运行到这一步那就退出,另外exit when可以在loop后面的任意一个位置
  end loop;   
3.6.2 示例代码
-- 打印1-10之间的数字到控制台
declare
 i number:=1;
begin
  loop
      dbms_output.put_line(i);
      i:=i+1;
      exit when i>10;
  end loop;     
end;
3.6.3 示例代码运行截图

在这里插入图片描述

3.7 while循环

3.7.1 语法
while 循环条件 loop
      其他循环体语句;
      循环变量变化(变少或者变多);
end loop;     
3.7.2 示例代码
-- 打印1-15之间的数字到控制台
while i<=15 loop
      dbms_output.put_line(i);
      i:=i+1;
end loop; 
3.7.3 示例代码运行截图

在这里插入图片描述

3.8 for循环

3.8.1 语法
 for 循环变量 in 起始值..终止值 loop
     循环体语句
3.8.2 示例代码
-- reverse反转输出,输出10到1之间的所有数
begin
  for i in reverse 1..10 loop
      dbms_output.put_line(i);
  end loop;     
end;
3.8.3示例代码运行截图

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值