51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

12
返回列表 发新帖
楼主: m_r3326
打印 上一主题 下一主题

[原创] 几道经典的SQL笔试题目(有答案)

[复制链接]

该用户从未签到

21#
发表于 2009-5-19 13:40:10 | 只看该作者
“系统会提示你course, score 两个字段都应该放在GROUP BY 后面进行分组 ”

还是不太明白啊
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2009-5-19 13:43:19 | 只看该作者
先收藏
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2016-5-17 20:35
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    23#
    发表于 2009-5-19 20:43:11 | 只看该作者
    有点意思。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2009-8-22 23:37:28 | 只看该作者
    第一题这样行吗?
    select * from 购物信息 where 购物人 in (select 购物人 from 购物信息 group by 购物人 having count(商品名称) >= 2);
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25#
    发表于 2009-8-23 02:42:09 | 只看该作者

    回复 1# 的帖子

    看了楼主的贴子我发现我就业有问题咯
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26#
    发表于 2009-8-25 16:53:12 | 只看该作者
    额!这些我们都学过,但是今天看着有些陌生,不过感觉前几题的思路一致,明白一题就OK了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27#
    发表于 2009-8-25 17:36:23 | 只看该作者
    看一下数据库的书籍,总结一下,谢谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    28#
    发表于 2009-8-27 17:43:10 | 只看该作者

    建议

    我是一个开发人员
    现在转测试的。
    我有几条建议,希望对你们有帮助
    一 编写SQL语句的时候关键字最好是大写。因为你就算是小写的,但程序运行的时候,程序内部也会将小写转换成为大写,那何不直接写成大写呢。这样也减少了软件的工作量,提高了性能。
    二 拼写SQL语句的时候尽量的少用到in,比如第一题就可以用自联接。
    其实这些东西在面试的时候,给面试官看的时候,是特别显眼的。他们会认为你的基础比别人要扎实的多,而不是光光只知道怎么查询。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    29#
    发表于 2009-8-28 16:48:44 | 只看该作者
    学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30#
    发表于 2009-10-24 05:15:44 | 只看该作者
    其实我想大家也都已经注意到了,最后一题的问题和第一题有点相似:
    第一题:select * from 购物信息 where 购物人 in (select 购物人 from 购物信息 group by 购物人 having count(*) >= 2);
    最后一题:select * from student where name in (select name from studentwhere name like '张%' group by name having avg(score) > 75)
    刚开始我也认为是应该这样:
    第一题:select * from 购物信息 group by 购物人 having count(*) >= 2
    最后一题:select * from studentwhere name like '张%' group by name having avg(score) > 75
    之后看了看答案和恢复,又比较了两题得相似性,我自己认为就像楼上的仁兄说的“GROUP BY 表示分组,但是不是随便哪些字段分组都可以,SELECT后面的所有字段,除了SUM、COUNT、AVG等汇总统计字段之外,其它的都必须放在GROUP BY里面进行分组”。拿最后一题来说,GROUP BY后面是NAME字段,而如果结果是:
    select * from studentwhere name like '张%' group by name having avg(score) > 75,那么就与仁兄所说的话违背了:*代表了符合要求的所有记录,里面的字段除了有NAME外,还有COURSE和SCORE,但是COURSE不是GROUP BY的,换句话说他与分组时无关的,我自己想应该是如果有分组条件存在在SQL语句中,那么SQL后面不能跟其他的和分组无关的字段。
    所以像第一题和最后一题,如果只是需要“购物人”和“NAME"这俩个字段的信息,答案可以是:
    第一题:select * from 购物信息 group by 购物人 having count(*) >= 2
    最后一题:select * from studentwhere name like '张%' group by name having avg(score) > 75
    如果需要的是*,是所有字段的信息,那么我就要“多此一举”的加子查询,借用“IN"来输出我们想要的所有字段的信息。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-28 06:37 , Processed in 0.078645 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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