zoukankan      html  css  js  c++  java
  • 数据库考试样卷(SQL部分)

    一、SQL语言

    数据字典:

    Users(用户表)
    列名 数据类型 非空 注释
    UID int 用户号,主键
    Name varchar2(30) 用户名
    School varchar2(30) 学校名称
    Rating int 等级分,缺省值为1400
    Take(参赛表)
    列名 数据类型 非空 注释
    CID int 比赛号,主键,外键(Contests)
    UID int  用户号,主键,外键(Users)
    Score int 比赛得分 
    Contests(比赛)
    列名 数据类型 非空 注释
    CID int 比赛号,主键
    Title varchar2(40) 比赛名称
    Time_Start date 比赛开始时间
    Time_End date 比赛结束时间

    1、查询所有“湘潭大学”的用户名称与等级分

    select Name, Rating from Users where School = '湘潭大学';
    

    2、新增一条参赛信息,“用户号为1的用户,参加比赛号为1的比赛,比赛得分为1234分”

    insert into table Take values(1, 1, 1234);
    

    3、删除用户名为“管理员”的所有用户的参赛信息

    delete from Take where UID in (select UID from Users where Name = '管理员');
    

    4、查询没有参加过任何比赛的用户编号与用户名

    select UID, Name from Users where UID not in (select UID from take);
    

    5、建立成绩视图Contest_Information(CID, Title, Num, Max_Score, Min_Score, Avg_Score)表示每个比赛的参加人数,比赛最高得分,最低得分,平均得分

    create view Contest_Information(CID, Title, Num, Max_Score, Min_Score, Avg_Score) as (
    	select CID, Title, count(distinct(UID)), max(Score), min(Score), avg(Score)
    	from Take natural join Contests
     	group by CID, Title
    );
    

    6、将等级分在1200分以下的用户等级分增加20%, 1201~1400分的用户等级分增加15%, 1400分以上的用户等级分增加10%

    update Users 
    set Rating = case
    	when Rating < 1200 then Rating * 1.2
    	when Rating between 1200 and 1400 then Rating * 1.15
    	else Rating * 1.1
    end;	
    

    7、查询每次比赛得分高于平均得分的用户号及得分,按比赛号升序,用户号升序,得分逆序排列

    select CID, UID, Score from Take a 
    where Score >= (
    	select avg(Score) from Take b
    	where b.CID = a.CID
    )
    order by UID, CID, Rating desc;
    

    8、查询在1号用户所有参加的比赛中都比他得分高的用户的编号与姓名

    select UID, Name from Users a
    where not exists (
            (select CID from Take where UID = 1)
            minus
            (
                select CID from Take T1
                where T1.UID = a.UID and Score > (
                      select Score from Take T2 where T2.UID = 1 and T2.CID = T1.CID
                )
            )    
    );--not exists (B except A) 表示 关系A 包含 关系B
    

    9、使用标量子查询完成每个学校等级分排名前5位的用户编号,用户名,等级分,并按学校升序,等级分逆序排列

    select UID, Name, School, Rating
    from (
        select UID, Name, School, Rating, 
    	(1+(select count(*) from User B where A.School = B.School and A.Rating < B.Rating)) as rk
        from Users A
    )
    where rk <= 5
    order by School, Rating desc;
    

    10、统计所有用户,比赛号1~4比赛的比赛得分,如果没有参加对应比赛,则为空值,查询的列依次为UID, NAME, C1, C2, C3, C4,其中C1, C2, C3, C4依次表示比赛1~4的用户得分

    select UID, Name, 
             (select Score from Take b where b.UID = a.UID and b.CID = 1) as C1,
             (select Score from Take b where b.UID = a.UID and b.CID = 2) as C2,
             (select Score from Take b where b.UID = a.UID and b.CID = 3) as C3,
             (select Score from Take b where b.UID = a.UID and b.CID = 4) as C4
    from Users a;
    
  • 相关阅读:
    hdu 4309(最大流+枚举状态)
    hdu 1565+hdu 1569(最大点权独立集)
    hdu 3657(最大点权独立集)
    hdu 3491(最小割+拆点)
    hdu 4394(bfs)
    An Introduction to Numerical Analysis Example 6.1
    陶哲轩谈数学家的合作(来自陶哲轩在数学家Gowers的博文“Is massively collaborative mathematics possible?”上的评论)
    拉格朗日插值多项式之间的递推关系
    三角形的余弦定理
    三角形的余弦定理
  • 原文地址:https://www.cnblogs.com/IwAdream/p/5941138.html
Copyright © 2011-2022 走看看