數據庫面試題(一)多表查詢


一、數據准備

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/,謝謝!!******* 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM