Mysql多表查询

本文说明

利用Mysql进行数据查询是经常的事情,但不会总让我们使用单表查询,使用多表查询是非常必要的。本文主要说的是Mysql的JOIN。主要有以下三种方式。

INNER JOIN(内连接):获取两个表中查询字段匹配的数据。
LEFT JOIN(左连接):获取左边表中的所有记录,尽管右表可能没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,尽管左表可能没有对应匹配的记录。

第一步 添加数据库

为了测试,我们创建两个表,分别为学生表和成绩表,其中学成的id字段和成绩表的stuid字段是一样的,这也是连接的判断字段。内容如下:

-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score`  (
  `stuid` int(12) UNSIGNED NOT NULL AUTO_INCREMENT,
  `english` double(255, 0) UNSIGNED NULL DEFAULT NULL,
  `math` double(255, 0) UNSIGNED NULL DEFAULT NULL,
  PRIMARY KEY (`stuid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (111, 88, 90);
INSERT INTO `score` VALUES (222, 66, 77);
INSERT INTO `score` VALUES (555, 100, 98);

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(12) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (111, 'tom');
INSERT INTO `student` VALUES (222, 'jerry');
INSERT INTO `student` VALUES (333, 'Maria');

SET FOREIGN_KEY_CHECKS = 1;

第二步 测试

首先我们使用内连接INNER JOIN,其中INNER可以不写,因为默认就是内连接。
SELECT a.id, a.name, b.english, b.math FROM student a INNER JOIN score b WHERE a.id = b.stuid
结果如下,我们可以看到只有两个表条件都满足的数据才会显示出来。
内连接

然后我们使用左连接LEFT JOIN,代码如下:
SELECT a.id, a.name, b.english, b.math FROM student a LEFT JOIN score b ON a.id = b.stuid 注意这里的关键字是ON,不是WHERE。从下图的结果中可以看出,左连接会列出左边表中所有的数据,而右表则只列出匹配的数据。
左连接

最后我们使用右连接RIGHT JOIN,代码如下:
SELECT a.id, a.name, b.english, b.math FROM student a RIGHT JOIN score b ON a.id = b.stuid ,当然从下图我们会发现右连接和左连接相反,右表数据会全部列出来,左表只会列出匹配的数据。
右连接

The end

当然,查询不是只有两个表,真实当中可能有多个表,这里只是抛砖引玉。
**

本站原文

**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值