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
    
  • 相关阅读:
    ASP.NET 中GridView与CheckBox的使用 Followyour
    lucene 3.4 contrib/facet 切面搜索
    solr3.4 高亮(highlight),拼写检查(spellCheck),匹配相似(moreLikeThis) 应用实践
    在ubuntu上安装全文搜索中文分词Coreseek/sphinx及和Rails集成
    Linux下C语言字符串操作之字符串转数值型
    ESP32DEBUG调试设置
    IAP修改flash启动地址
    uart学习之环形缓冲区struct
    IAPBootLoader代码跳转
    基于FIFO实验仿真测试 输入数据是8位宽,FIFO位宽是16位,练习思路
  • 原文地址:https://www.cnblogs.com/jiaxinwei/p/12752236.html
Copyright © 2011-2022 走看看