create table stu2
(
sid number(4) primary key,
sname varchar2(200) not null,
sage number(3),
did number(4)
)
insert into stu2 values(1,'aaa',19,1);
insert into stu2 values(2,'小明',27,1);
insert into stu2 values(3,'小红',15,1);
insert into stu2 values(4,'ccc',50,2);
insert into stu2 values(5,'ddd',50,2);
insert into stu2 values(6,'大大',72,2);
insert into stu2 values(7,'小小',10,3);
insert into stu2 values(8,'明明',27,3);
/*
需求:按照部门统计 排名(显示id,姓名,所属的班级.....) 利用分析函数
*/
--row_number() 分析函数 先分组,后连续编号
select t.*,row_number() over(partition by t.did order by t.sage desc)as 排名 from stu2 t
--rank() 值相等的情况 编号相同 编号不连续 往后跳跃
select t.*,rank() over(partition by t.did order by t.sage desc)as 排名 from stu2 t;
--dense_rank 值相等的情况下 编号相同 编号不跳跃
select t.*,dense_rank() over(partition by t.did order by t.sage) as 排名 from stu2 t;
--1:等值连接 简写
select * from stu a,grade b where a.gid=b.gid;
--inner join 内连接
select * from stu a
inner join grade b on a.gid=b.gid;
简写: select * from stu a,grade b where a.gid=b.gid;
--左外连接 区分主表和从表
select * from stu a
left outer join grade b on a.gid=b.gid;
另一种写法:
select * from stu a,grade b where a.gid=b.gid(+);
右外连接:
select * from stu a,grade b where a.gid(+)=b.gid;
--全连接 类似于外连接:只要有的数据全部显示出来!
select * from stu a
full join grade b on a.gid=b.gid;
--创建一个序列
create sequence seq_abc_id
start with 1
increment by 1
insert into abc values(seq_abc_id.nextval,'小明');
insert into abc values(seq_abc_id.nextval,'大明');
commit;
--从0开始算起
create sequence seq_abc_id;
--创建一个视图
create or replace view vw_info1
as
select * from info;
select * from vw_info1;
--pl/sql程序块
declare
v_name varchar2(20);--定义一个变量
begin
--赋值
v_name := '宋江';
dbms_output.put_line('姓名:'||v_name);
end;
--plsql编程方式输入id取出姓名?
declare
v_id number(4);
v_name varchar2(20);
begin
v_id:='&请输入编号:';
select sname into v_name from stu where sid=v_id;
dbms_output.put_line('取出的姓名:'||v_name);
end;