问一个数据库问题
登录 | 论坛导航 -> 华新鲜事 -> 社会百科 | 本帖共有 3 楼,分 1 页, 当前显示第 1 页 : 本帖树形列表 : 刷新 : 返回上一页
<<始页  [1]  末页>>
作者:吴永铮 (等级:8 - 融会贯通,发帖:2078) 发表:2004-01-08 00:38:43  楼主  关注此帖
问一个数据库问题
有3个表,一个放学生名字,一个放学科名字,一个放学生学的课。
student(sname)
course(cname)
study(sname,cname)
数据是这样的
student: {(A), (B)}
course: {(CS1101), (CS1102)}
study: {(A, CS1101), (B, CS1102)}

现在我想知道每个学生学了几门课(自我感觉这是个很普通的目的,一点也不刁钻),我希望得到的答案是{(A, 2), (B, 0)}
于是我这样
select student.sname, count(study.cname) from student, study where student.sname=study.sname group by student.sname
但得出的结果是{(A, 2)}。没有B,因为B没有学任何课。
有没有什么办法达到这个目的?不能有嵌入查询,最好不要创建临时表。


下面是我在mysql上的实验结果。
mysql> create table student (sname char(10) primary key);
Query OK, 0 rows affected (0.08 sec)

mysql> create table course (cname char(10) primary key);
Query OK, 0 rows affected (0.05 sec)

mysql> create table study (sname char(10), cname char(10));
Query OK, 0 rows affected (0.06 sec)

mysql> insert into student values ('A'), ('B');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into course values ('CS1101'), ('CS1102');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into study (sname, cname) values ('A', 'CS1101'), ('A', 'CS1102');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select student.sname, count(study.cname) from student, study where student.sname=study.sname group by student.sname;
+-------+--------------------+
| sname | count(study.cname) |
+-------+--------------------+
| A | 2 |
+-------+--------------------+
1 row in set (0.00 sec)
Put your OWN COOL signature here!
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:快快跑 (等级:6 - 驾轻就熟,发帖:2016) 发表:2004-01-08 08:24:37  2楼 评分:
answer
mysql> select student.sname, count(study.cname) from student left join study on (student.sname=study.sname) group by student.sname;
+-------+--------------------+
| sname | count(study.cname) |
+-------+--------------------+
| A | 2 |
| B | 0 |
+-------+--------------------+
2 rows in set (0.00 sec)
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
作者:吴永铮 (等级:8 - 融会贯通,发帖:2078) 发表:2004-01-08 18:50:25  3楼
answermysql> select student.sname, count(study.cname) from student left join study on (student.sname=study.sname) group by student.sname; +-------+--------------------+ | sname | count(study.cname) | +-------+--------------------+ | A | 2 | | B | 0 | +-------+--------------------+ 2 rows in set (0.00 sec)
多谢多谢
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!原文 / 传统版 / WAP版只看此人从这里展开收起列表
论坛导航 -> 华新鲜事 -> 社会百科 | 返回上一页 | 本主题共有 3 篇文章,分 1 页, 当前显示第 1 页 | 回到顶部
<<始页  [1]  末页>>

请登录后回复:帐号   密码