10月24, 2014

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

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

已知T1表,T2表和T3表的结构,通过连接查询得到T4表的结果.

T1表

Name ID Course ID Score
1 1 90
1 2 85
2 1 75
2 2 95

T2表

ID Name
1 数学
2 语文

T3表

ID Name
1 张三
2 李四

结果表T4

Name Course Score
张三 数学 90
张三 语文 85
李四 数学 75
李四 数学 95

mysql对应的建表语句:

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;

方法2:

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;

本文链接:https://901web.com/post/一道mysql基础面试题引发的思考.html

-- EOF --

Comments

请在后台配置评论类型和相关的值。