T_STU表:S_ID、S_NAME、S_SEX、S_BIRTHDAY 、S_AGE、S_MOENY、C_ID
T_CLASS表:C_ID、C_NAME
sequence序列:seq_id;
★、学生表:学号、姓名、性别、出生日期、入学年龄、缴费
★、班级表:班级编号、班级名称
1、查询入学年龄在18-20的女生或者未输入性别的,实际年龄小的要排在后面
select * from T_STU
where (S_AGE between 18 and 20 and S_SEX='女')or(S_SEX is null)
order by S_BIRTHDAY
或者:
order by (sysdate-S_BIRTHDAY) desc
2、查询班级名称、学生姓名、性别、缴费(要求显示单位:元),相同班级的要放在一起,姓名根据字典顺序排列。
select c.C_NAME,s.S_NAME,s.S_SEX,s.S_MOENY||'元' as S_MOENY
from T_STU s,T_CLASS C
where s.C_ID=c.c_id
order by c.c_id,s.S_NAME
3、查询各班名称和人数
select c.C_NAME,count(*) as rs
from T_STU s,T_CLASS C
where s.C_ID=c.c_id
group by c.C_ID,c.C_NAME
或者:
select c.C_ID,c.C_NAME,count(*) as rs
from T_STU s,T_CLASS C
where s.C_ID=c.c_id
group by c.C_ID,c.C_NAME
4、★★查询各班名称和人数,但人数必须不少于2,人数多的放在前面
select c.C_NAME,count(*) as rs
from T_STU s,T_CLASS C
where s.C_ID=c.c_id
group by c.C_ID,c.C_NAME
having count(*)>=2
order by count(*) desc
5.1、查询1980年出生的有哪些学生。
select * from t_stu s
where to_char(s.S_BIRTHDAY,'yyyy')='1980'
5.2、查询男生和女生人数,没有输入性别的当作男
select nvl(s.s_sex,1) as x,count(*)
from t_stu s
group by nvl(s.s_sex,1) --必须把null值当作1来分组
易错:
select nvl(s.s_sex,1) as x,count(*) --将null当作1来显示
from t_stu s
group by s.s_sex
6.1、查询没有人员的班级
效率低:
select * from T_CLASS c
where c.c_id not in
(
select distinct s.C_ID from t_stu s
)
优化:
select * from T_CLASS c
where not exists
(
select * from t_stu s
where c.C_ID=s.C_ID
)
或者:
select * from T_CLASS c
where not exists
(
select 'x' from t_stu s
where c.C_ID=s.C_ID
)
理解:查询班级表不存在这种情况:班级编号与学生表中班级编号相等的情况。
或者:用左连接(效率低),只有对等连接,效率最高。
6.2、查询入学年龄在20以上的同学信息
select * from T_STU where S_AGE>20
7、查询班级平均入学年龄在20及以上的班级
select c.C_NAME,avg(s.s_age)
from T_STU s,T_CLASS C
where s.C_ID=c.c_id
group by c.C_ID,c.C_NAME
having avg(s.s_age)>=20
8、★★有工资表salary(e_id,e_date,e_money),求本月发了2笔以上工资的员工信息。
select e_id,count(*)
from salary
where to_char(e_date,'yyyy.mm')=to_char(sysdate,'yyyy.mm')
group by e_id
having count(*)>=2
或者:
select e_id
from salary
where to_char(e_date,'yyyy.mm')=to_char(sysdate,'yyyy.mm')
group by e_id
having count(*)>=2
有部门表、人员表、工资表。
1、查询:人员名称、部门名称、个人总工资
首先要自己定义表名和字段名,如:
bm 部门表:bid,bname
ry 人员表:rid,rname,bid
gz 工资表:rid,money,rq,memo
select bname,rname,sum(gz.money)
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
group by bid,bname,rid,rname
2、查询所有部门的总工资
select bm.bid,sum(gz.money)
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
group by bm.bid
或者:
select bm.bid,bm.bname,sum(gz.money)
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
group by bm.bid,bm.bname
或者:
select bm.bid,sum(gz.money)
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
group by bm.bid,bm.bname
3、查询2008年8月份各部门工资最高的员工信息:部门名称、员工姓名、员工总工资
分析:
1.先找出2008年8月份各部门最高的工资
部门 最高工资
a 12000
b 8000
2.找出哪些员工的工资等于这些工资
找:a部门谁的工资=12000
b部门谁的工资=8000
执行:
1.先找出2008年8月份各部门最高的工资
select bm.bid,bm.bname,max(gz.money)
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
and to_char(gz.rq,'yyyy.mm')='2008.08'
group by bm.bid,bm.bname
类似:
部门 名称 最高工资
a xx1 12000
b xx2 8000
执行:
2.找出哪些员工的工资等于这些工资
select bm.bid,bm.bname,gz.money
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
and to_char(gz.rq,'yyyy.mm')='2008.08'
and (bm.bid,gz.money) in
(
select bm.bid,max(gz.money)
from bm,ry,gz
where bm.bid=ry.bid
and gz.rid=ry.rid
and to_char(gz.rq,'yyyy.mm')='2008.08'
group by bm.bid,bm.bname
)
linux2013_xzg 于 2013-11-03 20:08:29发表:
顶,正在学习呢
caiwanguo 于 2013-03-13 15:49:36发表:
似乎太过于简单
无怀 于 2013-01-12 16:01:59发表:
很经典!!!!!
wht521gjl 于 2013-01-09 14:40:35发表:
不错感谢分享
lxl0245 于 2013-01-08 21:34:08发表:
楼主辛苦 测测水平
lvpeng9696 于 2012-12-24 20:51:06发表:
很好的?目,??奉?
youxinzhai 于 2012-12-17 11:49:37发表:
good.
lppwendy 于 2012-09-12 18:42:17发表:
学习了
nanst 于 2012-08-28 14:58:55发表:
不错哦,狂顶
抬头滴汗 于 2012-08-10 11:47:02发表:
好东西,拿来整理成文档!
Johnny_F_Lin 于 2012-07-29 22:30:51发表:
入门真的好难呀
adslmmmm 于 2012-06-05 12:29:26发表:
[code][/code]
wei2012dt 于 2012-05-30 19:50:20发表:
thx
sunguo40 于 2012-05-11 06:06:34发表:
收藏了 好好研究下
admin_hl 于 2011-12-31 13:39:47发表:
支持下
admin_hl 于 2011-12-31 13:39:46发表:
支持下
admin_hl 于 2011-12-31 13:39:46发表:
支持下
mylove_hu 于 2011-11-22 00:35:22发表:
谢谢
dongyichen 于 2011-08-04 14:24:00发表:
偏向于sql语言了~没有太多涉及到oracle其他东西~
guodingdong 于 2011-03-11 17:29:35发表:
优化的语句可以研究一下!!!
wuyunhong111 于 2011-02-10 10:48:24发表:
谢谢楼主分享
wuyunhong111 于 2011-01-25 09:27:46发表:
谢谢,分享
sun2004 于 2011-01-24 23:56:38发表:
感谢楼主 辛苦了
sun2004 于 2011-01-24 23:56:37发表:
感谢楼主 辛苦了
sun2004 于 2011-01-24 23:56:33发表:
感谢楼主 辛苦了
sun2004 于 2011-01-24 23:56:33发表:
感谢楼主 辛苦了
sun2004 于 2011-01-24 23:56:29发表:
感谢楼主 辛苦了
sun2004 于 2011-01-24 23:56:29发表:
感谢楼主 辛苦了
sportlottery 于 2010-04-22 15:14:41发表:
不错,很好的联系,辛苦LZ了。
lpy_study 于 2010-04-15 16:15:48发表:
下下来看看
lihongniu 于 2010-04-12 14:43:18发表:
好好珍惜每一次难得的机会 抓住一次你就可以飞起来!
billmoney 于 2009-12-08 08:43:01发表:
学习一下。
sunhy1021 于 2009-12-03 17:23:50发表:
看一下!
spectery 于 2009-11-21 00:23:45发表:
收下了。。。 多谢。
xiaomingjian003 于 2009-11-20 23:12:56发表:
果然是好题
mentgmery 于 2009-11-20 14:38:56发表:
恩,不错哦
mentgmery 于 2009-11-20 14:38:55发表:
恩,不错哦
spectery 于 2009-11-20 10:16:45发表:
辛苦了 。。。
stefanjing 于 2009-11-03 02:13:42发表:
学习一下!
panpan071126 于 2009-10-31 14:31:13发表:
不错 谢谢 收藏了