zoukankan      html  css  js  c++  java
  • sql语句中自连接可以解决的问题

    1、自连接可以把同一表中属于一列的数据,平移到一行中,然后进行比较或其他操作。

    实例:有两张表学生信息表和分数表;

    结构和数据如下:

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for zhongxin_student
    -- ----------------------------
    DROP TABLE IF EXISTS `zhongxin_student`;
    CREATE TABLE `zhongxin_student`  (
      `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
      `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of zhongxin_student
    -- ----------------------------
    INSERT INTO `zhongxin_student` VALUES ('1', '张三', 11);
    INSERT INTO `zhongxin_student` VALUES ('2', '李四', 22);
    
    SET FOREIGN_KEY_CHECKS = 1;
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for zhongxin_score
    -- ----------------------------
    DROP TABLE IF EXISTS `zhongxin_score`;
    CREATE TABLE `zhongxin_score`  (
      `id` int(11) NOT NULL,
      `sid` int(11) NULL DEFAULT NULL COMMENT '学生id',
      `course_id` int(11) NULL DEFAULT NULL COMMENT '课程id',
      `score` int(11) NULL DEFAULT NULL COMMENT '分数',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of zhongxin_score
    -- ----------------------------
    INSERT INTO `zhongxin_score` VALUES (1, 1, 1, 70);
    INSERT INTO `zhongxin_score` VALUES (2, 1, 2, 80);
    INSERT INTO `zhongxin_score` VALUES (3, 2, 1, 80);
    INSERT INTO `zhongxin_score` VALUES (4, 2, 2, 70);
    
    SET FOREIGN_KEY_CHECKS = 1;

    数据概览:

    student:

    score:

     要求:查询课程编号1比课程编号2分数高的学生姓名

    sql语句:

    //查询‘1’科目成绩比‘2’科目成绩高的学生姓名
    select zs.name
    from zhongxin_student zs 
    join (select sid,score from zhongxin_score where course_id=1)as a on a.sid=zs.id
    join (select sid,score from zhongxin_score where course_id=2)as b on b.sid=zs.id
    where a.score>b.score

    结果:

    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    BZOJ3420[POI2013]Triumphal arch&BZOJ5174[Jsoi2013]哈利波特与死亡圣器——树形DP+二分答案
    BZOJ3417[Poi2013]Tales of seafaring——BFS
    BZOJ3750[POI2015]Pieczęć——链表
    bzoj 3594 方伯伯的玉米田
    Cocos2dx学习之SimpleGame
    新旧版本的quick-x项目移植
    cocos2dx 2.2.1 下面创建新项目测试运行
    VS2012下面编译Cocos2dx的HelloLua项目时报错>>> 项目文件"" 已被重命名或已不在解决方案中
    cocos2dx-lua or quick 2dx 中的图片资源加密
    关于对quick-2dx项目中的Lua代码的加密
  • 原文地址:https://www.cnblogs.com/whalesea/p/12902567.html
Copyright © 2011-2022 走看看