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

java 从零开始,学习笔记之基础入门<Oracle_查询>(三十四)

2013-12-16 14:15 936 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐