前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql各种join连接查询

mysql各种join连接查询

作者头像
用户1558882
发布2019-07-19 11:11:06
1.8K0
发布2019-07-19 11:11:06
举报
文章被收录于专栏:RgcRgcRgc

最近项目用到了几次sql join查询 来满足银行变态的需求;正好晚上自学时,看到了相关视频,所以记录下相关知识,下次再用时,根据如下图片,便可知道 怎么写sql;

注意点: 在join操作中的 on ... where ...  应该放哪些条件;目前理解 on 后放2表关联部分;where后放最终数据筛选部分;

1.下图为各种join操作的图表解释及sql语句

2.自测

  •   建表:分别为 分数表(sc),及学生表(student);关系为 student.student_id=sc.id ;语句如下:
    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student`  (
      `id` int(11) NOT NULL,
      `student_id` int(11) NULL DEFAULT NULL,
      `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of student
    -- ----------------------------
    INSERT INTO `student` VALUES (0, 12, 'b');
    INSERT INTO `student` VALUES (1, 11, 'a');
    INSERT INTO `student` VALUES (3, 13, 'c');
    
    SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sc
-- ----------------------------
DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc`  (
  `id` int(11) NOT NULL,
  `score` int(255) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES (10, 40);
INSERT INTO `sc` VALUES (11, 20);
INSERT INTO `sc` VALUES (12, 30);

SET FOREIGN_KEY_CHECKS = 1;
  • 建表数据结果如下:
  • 可以根据图表中的sql 语句进行相关join查询测试;

3.简单测试2个结果:

测试第一个join 语句如下:

select student.student_id,sc.score from student LEFT JOIN sc on student.student_id=sc.id

结果为:

测试第二个join 语句如下: 

select student.student_id,sc.score from student LEFT JOIN sc on student.student_id=sc.id WHERE sc.id is null

结果为:

;解析:在 第一个语句的基础上加上 WHERE sc.id is null ;只保留sc.id 为 nul的数据,而这个数据 只有 student 和 sc 非交集部分才有;

重点为  mysql 没有 full outer join 或者 full join;导致 要想完成 图中的 6,7部分,必须使用 图中1和4 或 1和5 的 union 来实现;

测试第6个join 语句如下:

select student.student_id,sc.score from student left JOIN sc on student.student_id=sc.id
UNION
select student.student_id,sc.score from student RIGHT JOIN sc on student.student_id=sc.id

结果为:

测试第7个join 语句如下:

select student.student_id,sc.score from student left JOIN sc on student.student_id=sc.id WHERE sc.id is null
UNION
select student.student_id,sc.score from student RIGHT JOIN sc on student.student_id=sc.id WHERE student.student_id is null

结果为:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档