zoukankan      html  css  js  c++  java
  • SQL笔试题(牛客网)

    Describetion 1:

    大学生春季运动会的数据库,保存了比赛信息的三个表如下: 运动员 sporter(运动员编号 sporterid,姓名name,性别 sex,所属系号 department), 项目 item(项目编号 itemid,名称 itemname,比赛地点 location), 成绩 grade(运动员编号 id,项目编号 itemid,积分 mark)。

    Request 1:

    用SQL语句完成在“体育馆”进行比赛的各项目名称及其冠军的姓名。

    SELECT i.itemname,s.name 
    FROM grade g,item i,sporter s,
    (SELECT itemid iid,MAX(mark) max  FROM grade   WHERE itemid IN ( SELECT itemid FROM item  WHERE location='体育馆')         GROUP BY itemid) temp
    WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
    

    Describetion 2:

    某打车公司将驾驶里程(drivedistanced)超过5000里的司机信息转移到一张称为seniordrivers 的表中,他们的详细情况被记录在表drivers 中,正确的sql为()

    select * into seniordrivers from drivers where drivedistanced >=5000
    

    INSERT INTO 语句用于向表格中插入新的行

    INSERT INTO table_name VALUES (值1, 值2,....)
    指定所要插入数据的列:
    INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
    

    从一个表中选取数据,然后把数据插入另一个表中

    把所有的列插入新表 
    SELECT *
    INTO new_table_name [IN externaldatabase] 
    FROM old_tablename
    只把希望的列插入新表 
    SELECT column_name(s)
    INTO new_table_name [IN externaldatabase] 
    FROM old_tablename
    

    Description 3:

    有两张表,如下图所示

    表A(仅列出部分数据作参考)

    Order_id User_id Add_time
    11701245001 10000 1498882474
    11701245002 10001 1498882475

    表B:(仅列出部分数据作参考)

    id Order_id goods_id price
    1 11701245001 1001 10
    2 11701245001 1002 20
    3 11701245002 1001 10

    Request 3 :

    用SQL查询 购买过goods_id 为1001的用户user_id()

    1. select a.user_id from A a,B b where a.order_id=b.order_id and b.goods_id='1001'
    2. select user_id from A where order_id in (select order_id from B where goods_id = '1001')
    3. select A.user_id from A left join B on A.order_id=B.order_id where B.goods_id='1001'
    

    注意第三条语句,用的是左外连接

    Description 4:

    请取出 BORROW表中日期(RDATE字段)为当天的所有记录?(RDATE字段为datetime型,包含日期与时间)。

    select * from BORROW where datediff(dd,RDATE,getdate())=0
    

    datadiff 的用法:

    DATEDIFF() 函数返回两个日期之间的时间。

    语法DATEDIFF(datepart,startdate,enddate)

    startdateenddate 参数是合法的日期表达式。

    datepart 参数可以是下列的值:

    datepart 缩写
    yy, yyyy
    季度 qq, q
    mm, m
    年中的日 dy, y
    dd, d
    wk, ww
    星期 dw, w
    小时 hh
    分钟 mi, n
    ss, s
    毫秒 ms
    微妙 mcs
    纳秒 ns

    Description 5:

    一张学生成绩表score,部分内容如下:

    name course grade
    张三 操作系统 67
    张三 数据结构 86
    李四 软件工程 89

    Request 5:

    用一条SQL 语句查询出每门课都大于80 分的学生姓名 。

    1.
    select distinct s.name from score s 
    where name not in 
    (select name from score where grade <=80)
    2.
    select distinct s.name from score s
    group by s.name 
    having min(s.grade) > 80
    

    注意:

    1.where 在分组前过滤,having 在分组后过滤,两者之间不冲突。

    2.在select 子句中,只可以有组函数和分组字段。如果没有分组字段那就是所有的字段都可以在select 字句中。
    注意第六、七题是同款题目,都是

    Description 6:

    Date Win
    2017-07-12
    2017-07-12
    2017-07-15
    2017-07-15

    Request 6:

    要生成下列结果 :

    比赛日期
    2017-07-12 1 1
    2017-07-15 1 1
    select Date as 比赛日期,sum(case when Win ='胜' 1 else 0 end) 胜,sum(case when Win='负' 1 else 0 end ) 负
    from result
    group by Date
    

    Description 7:

    有一张学生成绩表sc(sno 学号,class 课程,score 成绩),请查询出每个学生的英语、数学的成绩(行转列,一个学生只有一行记录)。

    select sno , sum(if(class='english',score,0)) english ,sum(if(class='math',score,0)) math
    from sc
    where class in ('english','math')
    group by sno
    
  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/jiaxinwei/p/12752236.html
Copyright © 2011-2022 走看看