楼主: mchdba

腾讯mysql数据库面试题目,大家进来发表下自己的看法吧!

[复制链接]
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00咸鸭蛋
日期:2013-02-07 11:51:42咸鸭蛋
日期:2013-02-08 09:48:51蜘蛛蛋
日期:2013-02-21 15:47:392013年新春福章
日期:2013-02-25 14:51:24咸鸭蛋
日期:2013-02-28 17:08:42蜘蛛蛋
日期:2013-03-29 16:17:14双黄蛋
日期:2013-04-11 16:11:04咸鸭蛋
日期:2013-05-07 11:55:14咸鸭蛋
日期:2013-05-28 10:46:24
31#
发表于 2011-10-17 13:02 | 只看该作者
交:内连接
并,差:外连接

使用道具 举报

回复
论坛徽章:
0
32#
发表于 2011-10-17 14:43 | 只看该作者
本帖最后由 ohdezhan 于 2011-10-17 14:45 编辑

交集 用inner join
并集 用union
差集: 这样可以么?
a表有 b表没有
select a.i  from a1  a left join a2 b on a.i=b.i  where b.i is null;
a表没有 b表有
select  b.i   from a1  a  right join a2 b on a.i=b.i  where a.i is null;

使用道具 举报

回复
论坛徽章:
14
2011新春纪念徽章
日期:2011-04-02 17:01:062013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2012-12-06 19:27:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42紫蛋头
日期:2012-03-13 16:37:18灰彻蛋
日期:2012-02-06 14:20:122012新春纪念徽章
日期:2012-01-04 11:57:56灰彻蛋
日期:2011-12-26 14:20:13茶鸡蛋
日期:2011-12-20 15:00:13
33#
发表于 2011-10-17 17:54 | 只看该作者
呵呵,这是在考sql经验么,,
默认肯定索引都建在qq号码上了
交:select * from a ,b where a.id=b.id
并:这个就没什么效率问题了,需要排序?
差:select * from a ,b where a.id=b.id and b.id is null

使用道具 举报

回复
论坛徽章:
11
鲜花蛋
日期:2011-09-03 18:52:38鲜花蛋
日期:2011-11-09 10:10:12茶鸡蛋
日期:2011-11-19 22:46:41茶鸡蛋
日期:2011-12-14 15:16:572012新春纪念徽章
日期:2012-01-04 11:57:56奥运会纪念徽章:赛艇
日期:2012-09-26 21:40:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:002013年新春福章
日期:2013-02-25 14:51:24
34#
发表于 2011-10-27 12:47 | 只看该作者
devilkin0312 发表于 2011-10-17 17:54
呵呵,这是在考sql经验么,,
默认肯定索引都建在qq号码上了
交:select * from a ,b where a.id=b.id

你的这个差集就写错了, 我理解你是想用左连接来做, 对吧。
但是你没发现你的左连接写法错了吗?
你这种写法 a.id=b.id 与 b.id is null 是互斥条件。

使用道具 举报

回复
论坛徽章:
14
2011新春纪念徽章
日期:2011-04-02 17:01:062013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2012-12-06 19:27:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42紫蛋头
日期:2012-03-13 16:37:18灰彻蛋
日期:2012-02-06 14:20:122012新春纪念徽章
日期:2012-01-04 11:57:56灰彻蛋
日期:2011-12-26 14:20:13茶鸡蛋
日期:2011-12-20 15:00:13
35#
发表于 2011-10-27 14:14 | 只看该作者
icer_repls 发表于 2011-10-27 12:47
你的这个差集就写错了, 我理解你是想用左连接来做, 对吧。
但是你没发现你的左连接写法错了吗?
你这 ...

我的理解是差即为只存在某一个表的qq号码,及未在2个表都出现的qq号,上面回复中得语句可以查出其中a 中有B中没有的记录,可以理解为一半,还有b中有a中没有的sql没写,思路一样。
不知道是不是题目 的意思

使用道具 举报

回复
论坛徽章:
0
36#
发表于 2011-10-27 15:03 | 只看该作者
沉默_King 发表于 2011-10-14 17:10
其实就是合并文件,然后uniq就行了,具体参数自己找吧...

沉默_King兄弟回答得很好,真是一语道破天机!

其实个人认为这道题重点考查的不是SQL如何实现交、并、差集,而应该是考查在腾讯这种大数据量的业务场景下,如何操作数据库的一个思路。
A和B集合的数据量都很庞大,直接就在MYSQL数据库里面做交、并、差集操作,业务是不允许的,很容易耗掉DB机器资源,严重的情况可能造成MYSQLD崩溃重启了

先在文件操作,缩小范围,然后再到DB取数据
先用AWK找出A.txt和B.txt两个文件的交、并、差集,然后再根据拿到的QQ号码去DB取记录。(QQ号码是主键)

做题目也要,做系统分析也好,要善于抓住关键字眼,从最基本的名词、动词入手。其实题目有很多暗示的。(“文件”)

使用道具 举报

回复
论坛徽章:
11
鲜花蛋
日期:2011-09-03 18:52:38鲜花蛋
日期:2011-11-09 10:10:12茶鸡蛋
日期:2011-11-19 22:46:41茶鸡蛋
日期:2011-12-14 15:16:572012新春纪念徽章
日期:2012-01-04 11:57:56奥运会纪念徽章:赛艇
日期:2012-09-26 21:40:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:002013年新春福章
日期:2013-02-25 14:51:24
37#
发表于 2011-10-27 16:03 | 只看该作者
@坏脾气得很:分析得有道理, 还有,估计企鹅是想从我们回答这个问题时,考查解决问题的一个思路, 也就是说解决一个问题之后,就要会解决一类问题。
@devilkin0312:呵呵 可能是你没写完整吧, 反正select * from a ,b where a.id=b.id and b.id is null这个肯定是不行的。 b.id is null,那么a.id=b.id就不会为真(与null比较的结果是null),所以整个where返回false。

使用道具 举报

回复
论坛徽章:
0
38#
发表于 2011-11-13 20:06 | 只看该作者
坏脾气得很 发表于 2011-10-27 15:03
沉默_King兄弟回答得很好,真是一语道破天机!

其实个人认为这道题重点考查的不是SQL如何 ...

哈哈,谢谢@坏脾气得很 兄的支持

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表