901web前端博客

人生就像一副复杂拼图
每个人总有属於自己的记忆碎片
Theme By 网上下载

联系我

RSS

十月 24, 2014

一道mysql基础面试题引发的思考

今天中午休息的时候,再逛技术论坛中看到了一个基础的mysql面试题目,自己没事做就打开命令行尝试了一下,就这道基础的链接查询,却引起了不少基础知识的缺乏学习,对很多的基础概念还不太熟悉.下面是面试题目的截图,一看就知道大概什么意思了.就是通过t1,t2,t3这三张表链接查询,得到如图结果.
美华图片2

先附上基本的建表与数据插入语句:

DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `NameID` mediumint(8) unsigned NOT NULL,
  `CourseID` tinyint(3) unsigned NOT NULL,
  `score` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t1
-- ----------------------------
INSERT INTO `t1` VALUES ('1', '1', '90');
INSERT INTO `t1` VALUES ('1', '2', '85');
INSERT INTO `t1` VALUES ('2', '1', '75');
INSERT INTO `t1` VALUES ('2', '2', '95');

DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
  `ID` int(11) DEFAULT NULL,
  `Name` varchar(10) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t2
-- ----------------------------
INSERT INTO `t2` VALUES ('1', '数学');
INSERT INTO `t2` VALUES ('2', '语文');

DROP TABLE IF EXISTS `t3`;
CREATE TABLE `t3` (
  `ID` int(11) DEFAULT NULL,
  `Name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t3
-- ----------------------------
INSERT INTO `t3` VALUES ('1', '张三');
INSERT INTO `t3` VALUES ('2', '李四');

题目其实并不难,主要是一个理解的思路问题:

方法1:(三个表直接链接)

select t3.name,t2.name as couse,t1.score from t1 inner join t2 on t1.courseid=t2.id inner join t3 on t3.id=t1.nameid;

 

方法二:(我个人开始的思路.查询语句写得比较复杂,不够简练)

select tmp.姓名,tmp.name,t1.score from t1 left join (select t3.name as '姓名',t2.name,t3.id as tid,t2.id as t2id from t2 cross join t3) as tmp on tmp.tid=t1.NameID and tmp.t2id=t1.CourseID;

相关文章

返回