电影画皮1哪里可以看:sql查询语句(急..)

来源:百度文库 编辑:高考问答 时间:2024/04/30 08:18:58
一个学校有200个班级,班级里学生数量不等。学生分别参加了两个社团(可以同时参加),一个是乒乓社团,一个是羽毛球社团,
现有表格:
table1(班级情况表)
班级编号 班级名 班级代码
1 1年1班 11
2 1年2班 12
………………
………………
………………

table2(乒乓球社团情况表)
乒乓编号 姓名 身份证 班级代码
1 张三 **** 11
2 李四 **** 12
…………
…………
…………
table3(羽毛球社团情况表)
乒乓编号 姓名 身份证 班级代码
1 王五 **** 13
2 赵六 **** 14
…………
…………

要求得出表格如下:
班级编号 班级名 班级代码 仅参加乒乓球人数 仅参加羽毛球人数 既参加乒乓球又参加羽毛球人数

另如果要得到每个班级仅参加乒乓球人员,仅参加羽毛球人员,和既参加乒乓球又参加羽毛球人员应该怎么设计表格,怎么做查询。
如果按第二位的方法,那如果有200个班级的话那需要进行两百个查询,很不方便,
第三位是更改了表格的格式,可惜表格已经做好了,无法进行更改了,只能看是否通过查询来得到您说的表格.

补充:
1。班级编号 班级名 班级代码 仅参加乒乓球人数(Ping) 仅参加羽毛球人数(Yu) 既参加乒乓球又参加羽毛球人数(PingYu)。

select 班级编号,班级名,a.班级代码,(select count(*) from table2 b where b.班级代码=a.班级代码)as Ping,(select count(*) from table3 c where c.班级代码=a.班级代码)as Yu,(select count(*) from table2 b,table3 c where b.班级代码=a.班级代码 and c.班级代码=a.班级代码 and b.身份证=c.身份证)as PingYu from table1 a

分析:当table2,table3两个表中的身份证相同时说明他既参加乒乓球又参加羽毛球人员

2。得到每个班级仅参加乒乓球人员,仅参加羽毛球人员,和既参加乒乓球又参加羽毛球人员应该怎么设计表格,怎么做查询

表格设计:
班级代码 班级名 姓名 身份证 参加乒乓球(Ping)(boolean) 参加乒乓球(Yu)(boolean)
注释 都为true时表示:既参加乒乓球又参加羽毛球

select a.班级代码,a.班级名,b.姓名,b.身份证,(select true) as Ping,(select b.name in(select name from table3)) as Yu from table1 a,table2 b where a.班级代码=b.班级代码 UNION
select a.班级代码,a.班级名,c.姓名,c.身份证,(select c.name in(select name from table2)) as Ping,(select true) as Yu from table1 a,table3 c where a.班级代码=c.班级代码

------------------------有问题伐消息我------------------

给你一个思路,先查询分别只在两个社团的人,再查询两个社团都有的人,
以班级编号关联为例:比如我找13班的只参加乒乓球的人数: select count(姓名) as num from table2 where 班级代码=13 and 姓名 not in (select 姓名 from table3 where 班级代码='13')
再查找13班参加两个社团的人数
select count(姓名) as num from table2 where 班级代码=13 and 姓名 in (select 姓名 from table3 where 班级代码='13')
查询只参加羽毛球的人数
select count(姓名) as num from table3 where 班级代码=13 and 姓名 not in (select 姓名 from table2 where 班级代码='13')
大体思路是这样,具体的需要你自己去修改一下~~~

select 班级编号,班级名,a.班级代码,
(select count(*) from table2 b where b.班级代码=a.班级代码)as 仅参加乒乓球人数,
(select count(*) from table3 c where c.班级代码=a.班级代码)as 仅参加羽毛球人数,
(select count(*) from table2 d,table3 e where d.班级代码=a.班级代码 and e.班级代码=a.班级代码)as 既参加乒乓球又参加羽毛球人数
from table1 a

以上SQL语句用了关联子查询,我想应该能看得清楚,知道意思吧。