`
zxingchao2005
  • 浏览: 80382 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle学习笔记1

 
阅读更多
--练习1
CREATE TABLE student(
student_id NUMBER PRIMARY KEY,
student_name vARCHAR2(30) NOT NULL)


CREATE TABLE score(
score_id NUMBER PRIMARY KEY,
student_id NUMBER,
course_id NUMBER,
score NUMBER)


CREATE TABLE course(
course_id NUMBER PRIMARY KEY,
course_name VARCHAR2(30))




insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (1, '张三');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (2, '李四');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (3, '王五');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (4, '马六');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (5, '孙七');
insert into STUDENT (STUDENT_ID, STUDENT_NAME)
values (6, '王八');




insert into COURSE (COURSE_ID, COURSE_NAME)
values (1, '语文');
insert into COURSE (COURSE_ID, COURSE_NAME)
values (2, '数学');
insert into COURSE (COURSE_ID, COURSE_NAME)
values (3, '英语');


insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (1, 1, 1, 99);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (2, 1, 2, 98);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (3, 1, 3, 97);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (4, 2, 1, 99);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (5, 2, 2, 97);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (6, 2, 3, 98);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (7, 3, 1, 96);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (8, 3, 2, 95);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (9, 3, 3, 94);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (10, 4, 1, 93);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (11, 4, 2, 92);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (12, 4, 3, 91);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (13, 5, 1, 90);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (14, 5, 2, 89);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (15, 5, 3, 88);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (16, 6, 1, 87);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (17, 6, 2, 86);
insert into SCORE (SCORE_ID, STUDENT_ID, COURSE_ID, SCORE)
values (18, 6, 3, 85);




--(1) 求出每门课程成绩排名前五名的同学的姓名,分数和课程名:
--根据不同的排名方式有三种不同的sql写法:
--1.1成绩相同的人排名相同,且排名是连续的。


select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
dense_rank() over(partition by c.COURSE_ID order by sc.SCORE desc) drank
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.drank < 6;


--1.2成绩相同的人排名相同,且排名不是连续的
select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
rank() over(partition by c.COURSE_ID order by sc.SCORE desc) ranking
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.ranking < 6;


--1.2成绩相同的人根据学号排序,排名是连续的。
select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
row_number() over(partition by c.COURSE_ID order by sc.SCORE desc, s.STUDENT_ID) rn
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.rn < 6;


--(2)求出每门课程成绩排名第三的同学的姓名,分数和课程名:
select *
from (select s.STUDENT_NAME,
sc.SCORE,
c.COURSE_NAME,
row_number() over(partition by c.COURSE_ID order by sc.SCORE desc, s.STUDENT_ID) rn
from student s, course c, score sc
where s.STUDENT_ID = sc.STUDENT_ID
and c.COURSE_ID = sc.COURSE_ID) t
where t.rn = 3;
--(3)请查询出至少有三科成绩不低于90分的学生姓名和成绩
SELECT t.student_name, s.score
FROM student t,score s
WHERE
t.student_id=s.student_id
and
t.student_name IN (SELECT student_name
FROM score
WHERE score >= 90
GROUP BY t.student_id
HAVING(COUNT(*) >= 3))


--练习2
--oracle数据库分页
select student_id,student_name
from(select student_id,student_name,rownum r from (select * from student) where rownum<=5)
where r>=1;
--练习3
--oracle序列
CREATE SEQUENCE stu_id increment by 1 -- 每次递增1
start with 20 -- 从1开始
nomaxvalue -- 没有最大值
minvalue 1 -- 最小值=1
NOCYCLE -- 不循环


alter sequence stu_id increment by 2;--修改序列步长为2
insert into student values(stu_id.nextval,'张兴超');
select stu_id.currval,stu_id.nextval from dual--查询序列的当前值和下一个值
select * from student
--练习4
--通过rowid 删除指定字段的重复记录,重复的留一条
delete from student a
where rowid>(select min(rowid) from student b where a.student_name=b.student_name)


--练习5
--随机取几条记录
select * from(
select * from student
order by dbms_random.random
)where rownum<3;


--练习6
--游标使用
create table ren_student(
sid number(3) ,
sname varchar(10)
);
declare v_id ren_student.sid%TYPE :=2;
v_student ren_student%rowtype;
cursor cur_stu is
select * from ren_student
where sid=v_id;
begin
open cur_stu;
fetch cur_stu into v_student;
DBMS_OUTPUT.PUT_LINE(v_student.sname);
close cur_stu;
END;
--游标循环的使用
declare v_id ren_student.sid%TYPE :=2;
v_student ren_student%rowtype;
cursor cur_stu is
select * from ren_student
where sid=v_id;
begin
open cur_stu;
fetch cur_stu into v_student;
while cur_stu%found loop
DBMS_OUTPUT.PUT_LINE(v_student.sname);
fetch cur_stu into v_student;
end loop;
close cur_stu;
END;
--游标for循环的使用
declare v_id ren_student.sid%TYPE :=2;
v_student ren_student%rowtype;
cursor cur_stu is
select * from ren_student
where sid=v_id;
begin
for v_emp in cur_stu loop
DBMS_OUTPUT.PUT_LINE(v_emp.sname);
end loop;
END;
--练习7
--异常
declare
v_stu ren_student%rowtype;
begin
select * into v_stu
from ren_student
where sid=45;
DBMS_OUTPUT.PUT_LINE(v_stu.sname);
exception
when no_data_found then
DBMS_OUTPUT.PUT_LINE('v_stu:no data found');
end;
--自己定义异常
declare
e_myexception exception;
v_stu ren_student%rowtype;
begin
select * into v_stu
from ren_student
where sid=5;
DBMS_OUTPUT.PUT_LINE(v_stu.sname);
if v_stu.sid=5 then
raise e_myexception;
end if;
exception
when e_myexception then
DBMS_OUTPUT.PUT_LINE('123');
end;
--练习8存储过程
create or replace procedure ren_pro(p_id ren_student.sid%TYPE)as
v_emp ren_student%rowtype;
begin
select * into v_emp
from ren_student
where sid=p_id;
DBMS_OUTPUT.PUT_LINE(v_emp.sname);
end;
begin
ren_pro(5);
end;@ren
create or replace procedure ren_pro(
p_id [in] ren_student.sid%TYPE,
p_name out ren_student.sname%type
)as
v_emp ren_student%rowtype;
begin
select * into v_emp
from ren_student
where sid=p_id;
p_name:=v_emp.sname;
DBMS_OUTPUT.PUT_LINE(v_emp.sname);
end;
declare
v_name ren_student.sname%type;
begin
ren_pro(5,v_name);
DBMS_OUTPUT.PUT_LINE('diao_yong:'||v_name);
end;


--练习7函数
create or replace function ren_fun(
p_id ren_student.sid%TYPE)
return ren_student.sname%type
as
v_emp ren_student%rowtype;
begin
select * into v_emp
from ren_student
where sid=p_id;
return v_emp.sname;
end;
declare
v_name ren_student.sname%type;
begin
v_name:=ren_pro(5);
DBMS_OUTPUT.PUT_LINE('diao_yong:'||v_name);
end;


--练习8 包
create or replace package ren_pack as
v_emp ren_student%rowtype;
procedure addEmp(p_emp ren_student%rowtype);
end ren_pack;
create or replace package body ren_pack as
procedure addEmp(p_emp ren_student%rowtype)as
begin
insert into ren_student
values(p_emp.sid,p_emp.sname);
commit;
end;
end ren_pack;
declare
v_stu ren_student%ROWTYPE;
begin
v_stu.sid:=101;
v_stu.sname:='101ren';
ren_pack.addEmp(v_stu);
end;


--练习9触发器
--触发器
create or replace trigger ren_tr
after insert or update or delete on ren_student
declare
v_cnt number;
begin
select count(*) into v_cnt
from ren_student;
DBMS_OUTPUT.PUT_LINE('v_cnt:'||v_cnt);
end ren_tr;
--不能删root 用户 触发器中:old :new表的使用
create or replace trigger ren_del
before delete on ren_student
for each row
begin
if:old.sid=1 then
raise_application_error(-20100,'root');//必须大于20000
end if;
end ren_del;
--记录对表的操作
create table renlog(
username varchar2(20),
sysd date,
opr varchar2(20)
);
create or replace trigger ren_dml
after insert or update or delete on ren_student
begin
if inserting then
insert into renlog values(user,sysdate,'insert');
elsif updating then
insert into renlog values(user,sysdate,'update');
elsif deteting then
insert into renlog values(user,sysdate,'detete');
else
null;
end if;
end ren_dml;



分享到:
评论

相关推荐

    Oracle学习笔记1.docx

    Oracle 学习笔记 1 本文档涵盖了 Oracle 学习的基础知识,包括客户端工具、用户管理、表结构、SELECT 语句、DISTINCT 操作、WHERE 子句、ORDER BY 子句和 SQL 函数等内容。 客户端工具 Oracle 提供了多种客户端...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    Oracle学习笔记1.doc

    ### Oracle学习笔记知识点详解 #### 一、Oracle的卸载步骤及注意事项 ##### 软件环境 - **操作系统:** Windows XP - **Oracle版本:** 8.1.7 - **安装路径:** C:\ORACLE ##### 卸载方法 1. **停止Oracle服务:** -...

    Oracle学习笔记

    Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...

    Oracle学习笔记精华版

    Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...

    Oracle学习笔记.doc

    Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...

    Oracle学习笔记.pdf

    在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    oracle dba学习笔记

    Oracle DBA 学习笔记 标题:Oracle DBA 学习笔记 描述:学习使用维护 Oracle 数据库数年,对认为值得记录的 Oracle 维护脚本进行记录总结,存起来,虽然今后开源是方向,但不可否认 Oracle 仍然非常有水平的,在...

    oracle学习笔记整理

    以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...

    Oracle学习笔记 Oracle学习笔记

    根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。

    oracle学习笔记.txt

    超详细Oracle学习笔记,详细记录了oracle的学习过程中遇到的各种问题及基础知识,适合初中级oracle使用人员学习参考。

    oracle学习笔记-入门基础

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...

    Oracle学习笔记——日常应用、深入管理、性能优化 示例代码

    Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...

    oracle学习笔记下载

    ### Oracle 学习笔记知识点概览 #### 一、Oracle 数据库系统参数查询与管理 在 Oracle 数据库的学习过程中,了解如何查看和管理数据库的系统参数是非常重要的。这些参数直接影响着数据库的性能和稳定性。 ##### ...

Global site tag (gtag.js) - Google Analytics