工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1101|回复: 3

[讨论]一道数据库题

[复制链接]
发表于 2006-1-17 23:50 | 显示全部楼层 |阅读模式
据说是去年期未的数据库考试题.

三张表如下:
S(SNo,SName,SSex,SAge,SDept);
C(CNo,CName,CPno,CE);//CE为学分
SC(SNo,CNo,Grage);

问题:
求不选修这门课程的男生姓名,这门课程先行课为'OS',这门课学分为4.
发表于 2006-1-17 23:52 | 显示全部楼层
select distinct S.SName from S,SC,C where
S.SNo <> SC.SNo and SC.CNo = C.CNo
and C.CE=4 and S.SSex=1
and C.CPno in (select CNo from C where CName = \'OS\')

这里加distinct是为了避免select出重复的记录

[ 本帖最后由 wool王 于 2006-1-17 16:36 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2006-1-17 23:56 | 显示全部楼层
创建表的sql脚本:

  1. CREATE TABLE [dbo].[C] (
  2.         [CNo] [int] NOT NULL ,
  3.         [CName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
  4.         [CPno] [int] NULL ,
  5.         [CE] [int] NULL
  6. ) ON [PRIMARY]
  7. GO

  8. CREATE TABLE [dbo].[S] (
  9.         [SNo] [int] NOT NULL ,
  10.         [SName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
  11.         [SSex] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
  12.         [SAge] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
  13.         [SDept] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
  14. ) ON [PRIMARY]
  15. GO

  16. CREATE TABLE [dbo].[SC] (
  17.         [SNo] [int] NOT NULL ,
  18.         [CNo] [int] NOT NULL ,
  19.         [Grage] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
  20. ) ON [PRIMARY]
  21. GO
复制代码



S表的数据:
SNo        SName                SSex                SAge                SDept
1        A                 1                 19                计算机   
2        B                 1                 20                计算机   
3        C                 1                 21                软件工程  
4        D                 0                 19                计算机   
5        E                 1                 21                计算机   
6        F                 0                 20                计算机   
                               
C表的数据:
CNo        CName                CPno        CE
1        OS                2        4
2        C                         3
3        DB                4        4
4        SE                2        4
5        XX                1        4
6        ww                1        4
                       
SC表的数据:
SNo        CNo        Grage
1        5        88        
2        3        76        
3        2        33        
               

查询语句:
select distinct SName from SC right outer join S on S.SNo=SC.SNo
where SSex=1 and CNo is null or CNo not in (

/*返回这门课程的课程号*/
select CNo from C
where CPno in (select CNo from C where CName=\'OS\' )
        and CE=4

);

查询结果:
B         
C         
E         

使用了右外连接,SC表右外连接S表.应该还有其它方法的.
回复

使用道具 举报

 楼主| 发表于 2006-1-18 00:06 | 显示全部楼层
要注意的是,没有选修的同学也要查询出来,
就像上面的E同学那样,没有选课,但也是符合条件的哦.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 11:13

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表