日期:2014-05-18  浏览次数:20727 次

求一简单的SQL查询语句
两张表
STUID   STUNAME
S1         张三
S2         李四
S3         赵五


STUID   CLASSID
S1         1
S1         2
S1         3
S1         4
S3         1
S3         4

查询结果
STU       STUNAME   CLASSCOUNT
S1         张三           4
S2         李四           0
S3         赵五           2


------解决方案--------------------
create table tb1(STUID varchar(2),STUNAME varchar(10))
insert tb1
select 'S1 ', '张三 '
union select 'S2 ', '李四 '
union select 'S3 ', '赵五 '


create table tb2(STUID varchar(2),CLASSID int)
insert tb2
select 'S1 ',1
union select 'S1 ',2
union select 'S1 ',3
union select 'S1 ',4
union select 'S3 ',1
union select 'S3 ',4


select a.STUID,a.STUNAME,CLASSCOUNT=count(b.CLASSID)
from tb1 a left join tb2 b on a.STUID=b.STUID
group by a.STUID,a.STUNAME

drop table tb1,tb2


/*
STUID STUNAME CLASSCOUNT
----- ---------- -----------
S2 李四 0
S1 张三 4
S3 赵五 2

(3 row(s) affected)

*/
------解决方案--------------------
create table tab1(STUID varchar(2),STUNAME varchar(6))
insert tab1
select 'S1 ', '张三 ' union all
select 'S2 ', '李四 ' union all
select 'S3 ', '赵五 '

create table tab2(STUID varchar(2),CLASSID int)
insert tab2
select 'S1 ',1 union all
select 'S1 ',2 union all
select 'S1 ',3 union all
select 'S1 ',4 union all
select 'S3 ',1 union all
select 'S3 ',4

--查询结果
--STU STUNAME CLASSCOUNT
--S1 张三 4
--S2 李四 0
--S3 赵五 2
select tab1.STUID,tab1.STUNAME,count(tab2.CLASSID)
from tab1 left join tab2 on tab1.STUID=tab2.STUID
group by tab1.STUID,tab1.STUNAME

drop table tab1,tab2