您的位置:首页 > 数据库 > Oracle

[原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_查询>(三十四)

2013-12-16 14:15 1176 查看
Oracle多表查询

--部门

create table dept_tb(

dept_id number(3)
primarykey,

dept_no varchar2(5),

dept_name varchar2(20),

dept_addr varchar2(30)

)

-- 创建序列IDSEQENCE

create sequence SEQ

minvalue 1

maxvalue 9999

startwith 1

incrementby
1

drop sequence SEQ

insertinto dept_tb
values(SEQ.nextval,'R1011','国际工程系','A13');

insertinto dept_tb
values(SEQ.nextval,'R1012','国际酒店管理系','B13');

insertinto dept_tb
values(SEQ.nextval,'R1013','水利水电工程系','C13');

insertinto dept_tb
values(SEQ.nextval,'R1014','土木工程系','D13');

insertinto dept_tb
values(SEQ.nextval,'R1015','电影系','E13');

insertinto dept_tb
values(SEQ.nextval,'R1016','工商管理系','F13');

deletefrom dept_tb
where dept_id
between 2
and 4

truncatetable dept_tb

droptable dept_tb

update dept_tb
set dept_name ='工商管理系'
where dept_id =
6

select *
from dept_tb

--专业表外键在外键表中设置

create table major(

mar_id number(3)
primary key,

mar_no varchar2(4),

mar_name varchar2(20),

dept_id number(3),

foreign key(dept_id)
references dept_tb(dept_id)

)

insert into major
values(1,'M110','应用软件专业',1);

insert into major
values(2,'M111','客服专业',2);

insert into major
values(3,'M112','发电专业',3);

insert into major
values(4,'M113','水电工程专业',3);

insert into major
values(5,'M114','造桥专业',4);

insert into major
values(6,'M115','表演专业',5);

select *
from major

--老师表

create table teacher(

tea_id number(3)
primary key,

tea_no varchar2(4),

tea_name varchar2(30),

tea_age varchar2(30),

tea_sex char(2),

dept_id number(3),

foreign key(dept_id)
references dept_tb(dept_id)

)

insert into teacher
values(1,'T070','刘德华','49','男',5);

insert into teacher
values(2,'T071','马云','40','男',5);

insert into teacher
values(3,'T072','马化腾','45','男',5);

insert into teacher
values(4,'T073','蒋介石','55','男',1);

insert into teacher
values(5,'T074','曾志伟','50','男',3);

update teacher
set tea_name='周润发'where
tea_id=2

update teacher
set tea_name='周星驰'where
tea_id=3

update teacher
set tea_name='王进喜'where
tea_id=5

select *
from teacher;

--学生表

create table student(

s_id number(3)
primary key,

s_name varchar2(30),

s_no varchar2(6),

s_sex char(2),

s_age number(2),

regtime date,

mar_id number(3),

foreign key(mar_id)
references major(mar_id)

)

insertinto student
values(1,'茹国华','S1010','男','18','8-8月-2008','1');

insertinto student
values(2,'小强','S1011','男','1','2-4月-2009','2');

insertinto student
values(3,'白骨精','S1012','女','25','1-2月-2010','3');

insertinto student
values(4,'球形','S1010','女','26','3-8月-2011','4');

insertinto student
values(5,'旺财','S1011','男','21','3-9月-2001','4');

select *
from student

create table s_t_tb(

st_id number(3)
primary key,

s_id number(3),

foreign key(s_id)
references student(s_id),

tea_id number(3),

foreign key(tea_id)
references teacher(tea_id)

)

insert into s_t_tb
values(1,1,1);

insert into s_t_tb
values(2,2,1);

insert into s_t_tb
values(3,4,2);

select *
from s_t_tb;

--查询一个系有多少个专业

--系id为3专业数

select dept_id
as系别,count(*)
as总数from major
groupby dept_id
having dept_id =
3;

--一个专业有多少个学生

select mar_id
as所属专业,count(*)
as学生总数from student
groupby mar_id;

--查询在某个时间入学的学生数

select regtime
as入学时间,count(*)
as学生总数from student
groupby regtime;

--查询一个学生有多少老师?

select s.sname,count(*)
as老师数
from s_t_tb st,student s,teacher t

where st.st_id=s.s_id
and st.tea_id=t.tea_id
groupby s.s_id,s.s_name;

--简化的写法

select s_id,count(*)
from s_t_tb st
groupby s_id;

--子查询

--把查询的结果作为表一样再次进行查询

select tt.t,count(*)
from

(select s_name ,to_char(regtime,'yyyy/MM')
t from student) tt
groupby tt.t;

--求平均值

--求学生平均年龄avg,sum

select totalage/totalnum
from

(select sum(s_age) totalage,count(*)
totalnum from student);

select avg(s_age)
学生平均年龄from student;

select sum(s_age)/count(*)
学生平均年龄from student;

--简单分页

--查询学生表,查询第一页,显示条数2

select top
2 *
from student
where s_id
not in(

select top
2 s_id
from student

)

select row num,s.*
from
student s;

select *
from

((select *
from student
orderby s_id) s)
where s.s_id
between (2-1)*2+1and2*2;

--连接查询

--oracle把连接分为三种:内连接(inner join),外连接(outer
join),全连接(full join)

--左连接查询,左连接以左边表作为主表,将左边所有的信息都显示,而右边的表只有在满足条件时才显示

select *
from teacher t
leftjoin dept_tb d
on t.dept_id=d.dept_id;

--默认的采用是内连接查询

select *
from teacher t
innerjoin dept_tb d
on t.dept_id=d.dept_id;

--同内连接

select *
from teacher t,dept_tb d
where t.dept_id=d.dept_id;

select *
from teacher;

select *
from student;

select *
from s_t_tb

作者:lulu147 发表于2013-12-16 14:15:17 原文链接

阅读:263 评论:0 查看评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: