SQL题:sql语句查询(二)

 
第一题:
if object_id('tempdb.dbo.#') is not null drop table #
create table # (studentname varchar(5),classname varchar(7),grade int)
 
insert into #
select 'mike','english',65 union all
select 'mike','math',75 union all
select 'Jerry','english',80 union all
select 'Jerry','math',68 union all
select 'Lida','english',88 union all
select 'Lida','chinese',77 union all
select 'Lida','math',90
 
select * from #
题名是这样的:
studentname    classname      grade  
 mike           english          65
 mike           math             75
 Jerry          english          80
 Jerry          math             68
 Lida           english          88
 Lida           chinese          77
 Lida           math             90
求出各科成绩大于 75 分的学生。
即得到如下结果
studentname    classname      grade
 Lida             english          88
 Lida             chinese          77
 Lida             math             90
 
select t1.studentname,classname,grade
from # t1,(select studentname
           from #
           where grade>75
           group by studentname
           having count(*)=(select count(*) from (select distinct classname from #)A)) t2
where t1.studentname=t2.studentname
 
注:
1 from (select distinct classname from #)A  中的 "A" 一定要有,将 ( select distinct classname from #) 得到的记录集看成一个新的表 A
2 、在 SQL 语句中,用 group by 语句时,一般都会用到 count (), sum (), avg (), max (), min () 等函数;
但,当不使用 group by 语句,而直接使用这些函数时,则表示将所有数据集看成一个组来处理。
 
第二题:
已知一个关系数据库的模式如下:
职工 EMP (职工号,姓名,工资,所在部门)
部门 DEPT (部门号,部门名,部门经理的职工号)
1 )、使用查询分析器建表,要求如下:
   A 、每个表的主外码。
   B 、职工姓名和部门名不能为空。
   C 、工资取 800 5000 这间整数。
2 )、插入如下数据:
职工( E01   2500    D02      
E02   3000    D02      
E03   6000    D01      
E04   5500    D01      
E05   3500    D03      
E06   2000    D04      
E07   3000    D04  
部门( D01 ,人事, E04
    D02 ,信息, E01
    D03 ,销售, E05
    D04 ,财务, E06
3 )、用 SQL 表达以下的查询:找出那些工资高于其所在部门经理工资的职工的姓名及其工资。
select *
from emp A,(select emp. 姓名 , emp. 工资 , dept.*
            from emp,dept
            where emp. 职工号 = dept. 部门经理的职工号 ) B
where A. 所在部门 = B. 部门号 and A. 工资 > B. 工资

4 )、用 SQL 完成:将 D01 号部门经理的工资改为该部门所有职工的平均工资。
update emp
set 工资 =( select avg( 工资 ) from emp where 所在部门 = 'D01' )
from emp,dept
where emp. 职工号 = dept. 部门经理的职工号 AND 所在部门 = 'D01'

5)、新增加一个广告部门,编号为D05 

insert into dept values('D05','广告','E08')

小结:不要急于答题,先审好题看清表结构,再下笔!

   在( 3 )题中,职工号( E01.. )是主键,是标识字段。要先确定标识字段,再按照标识字段去理思路,用( E01.. )将两个表相连即可得到部门表中各经理的姓名、工资等情况数据集 B ,此数据集的记录数 = 部门 (dept) 表的记录数。然后再将数据集 B 与职工 (emp) 表相连,即可得到“出那些工资高于其所在部门经理工资的职工的姓名及其工资”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值