zoukankan      html  css  js  c++  java
  • 数据库面试题(一)多表查询

    一、数据准备

    1、创建表结构及数据

    -- ----------------------------
    -- Table structure for course
    -- ----------------------------
    DROP TABLE IF EXISTS `course`;
    CREATE TABLE `course`  (
      `Cno` int(11) NOT NULL COMMENT '课程编号',
      `Cname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程名称',
      `Tno` int(11) NULL DEFAULT NULL COMMENT '老师编号',
      PRIMARY KEY (`Cno`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of course
    -- ----------------------------
    INSERT INTO `course` VALUES (1, '数学', 1);
    INSERT INTO `course` VALUES (2, '语文', 2);
    INSERT INTO `course` VALUES (3, '英文', 1);
    
    -- ----------------------------
    -- Table structure for sc
    -- ----------------------------
    DROP TABLE IF EXISTS `sc`;
    CREATE TABLE `sc`  (
      `Sno` int(11) NOT NULL COMMENT '学号',
      `Cno` int(11) NOT NULL COMMENT '课程编号',
      `score` int(255) NULL DEFAULT NULL COMMENT '分数',
      PRIMARY KEY (`Sno`, `Cno`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of sc
    -- ----------------------------
    INSERT INTO `sc` VALUES (1, 1, 99);
    INSERT INTO `sc` VALUES (1, 2, 80);
    INSERT INTO `sc` VALUES (1, 3, 50);
    INSERT INTO `sc` VALUES (2, 1, 70);
    INSERT INTO `sc` VALUES (2, 2, 90);
    INSERT INTO `sc` VALUES (3, 1, 90);
    INSERT INTO `sc` VALUES (4, 1, 60);
    INSERT INTO `sc` VALUES (4, 2, 50);
    INSERT INTO `sc` VALUES (4, 3, 40);
    
    -- ----------------------------
    -- Table structure for student
    -- ----------------------------
    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student`  (
      `Sno` int(255) NOT NULL COMMENT '学号',
      `Sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
      `Sage` int(255) NULL DEFAULT NULL COMMENT '年龄',
      `Ssex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
      PRIMARY KEY (`Sno`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of student
    -- ----------------------------
    INSERT INTO `student` VALUES (1, '张三丰', 108, '');
    INSERT INTO `student` VALUES (2, '李小龙', 20, '');
    INSERT INTO `student` VALUES (3, '小龙女', 17, '');
    INSERT INTO `student` VALUES (4, '白发魔女', 18, '');
    INSERT INTO `student` VALUES (5, '韦小宝', 19, '');
    
    -- ----------------------------
    -- Table structure for teacher
    -- ----------------------------
    DROP TABLE IF EXISTS `teacher`;
    CREATE TABLE `teacher`  (
      `Tno` int(11) NOT NULL COMMENT '老师编号',
      `Tname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '老师名称',
      PRIMARY KEY (`Tno`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of teacher
    -- ----------------------------
    INSERT INTO `teacher` VALUES (1, '无崖子');
    INSERT INTO `teacher` VALUES (2, '孤独求败');
    INSERT INTO `teacher` VALUES (3, '洪七公');
    
    SET FOREIGN_KEY_CHECKS = 1;

    表结构:

      a学生表,b成绩表,c课程表,d老师表

    2、面试题

    2.1 单表查询

    #1 查询年龄小于18岁的学员信息

    select * from student a where a.Sage < 18;

    2.2 双表查询

    # 2 查询无崖子授课信息

    select
        * 
    from
        teacher d
        inner join course c on d.tno = c.tno 
    where
        d.tname = '无崖子';

    # 3 查询没有参与任意课程的学生信息

    select
        * 
    from
        student a
        left join sc b on a.sno = b.sno 
    where
        b.sno is null;

    2.3 三表查询

    #4 查询无崖子每个授课课程的学员人数 统计 + 分组

    select
        c.cno,
        c.cname,
        count( * ) 
    from
        teacher d
        inner join course c on d.tno = c.tno
        inner join sc b on b.cno = c.cno 
    where
        d.tname = '无崖子' 
    group by
        c.cno,
        c.cname;

    #5 查询张三丰数学成绩

    select
        * 
    from
        student a
        inner join sc b on a.sno = b.sno
        inner join course c on c.cno = b.cno 
    where
        a.sname = '张三丰' 
        and c.cname = '数学';

    #6 查询出语文最高分

    select
        max( b.score ),
        c.cname 
    from
        student a
        inner join sc b on a.sno = b.sno
        inner join course c on b.cno = c.cno 
    where
        c.cname = '语文';

    #7 查询没有参与语文考试的学生信息
    # 先查询出参加了语文课程学生

    select
        * 
    from
        course c
        inner join sc b on c.cno = b.cno 
        and c.cname = '语文'
        right join student a on a.sno = b.sno 
    where
        b.sno is null;

    #8 查询语数外三门成绩的平均分

    select
        c.cno,
        c.cname,
        avg( b.score ) 
    from
        student a
        inner join sc b on a.sno = b.sno
        inner join course c on b.cno = c.cno 
    group by
        c.cno,
        c.cname;

    2.4 四表查询

    #9 查询报名孤独求败老师课程的学生信息

    select
        * 
    from
        student a
        inner join sc b on a.sno = b.sno
        inner join course c on b.cno = c.cno
        inner join teacher d on c.tno = d.tno 
    where
        d.tname = '孤独求败';

    #10 没有报名孤独求败老师课程的学生信息

    select
        * 
    from
        teacher d
        inner join course c on d.tno = c.tno 
        and d.tname = '孤独求败'
        inner join sc b on c.cno = b.cno
        right join student a on a.sno = b.sno 
    where
        b.sno is null;

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!******* 

  • 相关阅读:
    Oracle表级约束和列级约束
    什么是SSL证书服务?
    什么是阿里云SCDN
    什么是阿里云CDN
    什么是弹性公网IP?
    什么是云解析DNS?
    什么是DataV数据可视化
    什么是大数据计算服务MaxCompute
    什么是文件存储NAS
    什么是云存储网关
  • 原文地址:https://www.cnblogs.com/shouhu/p/12558977.html
Copyright © 2011-2022 走看看