最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

面試之數據庫SQL編寫實戰(zhàn)案例

2022-05-14 19:18 作者:指南針畢業(yè)設計  | 我要投稿

好多同學在面試的過程中會碰到關于SQL查詢的相關案例,讓手寫SQL語句,直接蒙蔽的不少哦,下面以幾個面試題為例,談談SQL的編寫,有題有答案,大家可以看看參考一下:


數據庫的基本準備:

/*

Navicat MySQL Data Transfer


Source Server? ? ? ? ?: localhost

Source Server Version : 50168

Source Host? ? ? ? ? ?: localhost:3306

Source Database? ? ? ?: test_exam


Target Server Type? ? : MYSQL

Target Server Version : 50168

File Encoding? ? ? ? ?: 65001


Date: 2020-08-21 16:26:33

*/


SET FOREIGN_KEY_CHECKS=0;


-- ----------------------------

-- Table structure for `class`

-- ----------------------------

DROP TABLE IF EXISTS `class`;

CREATE TABLE `class` (

? `cid` int(11) NOT NULL AUTO_INCREMENT,

? `caption` varchar(32) NOT NULL,

? PRIMARY KEY (`cid`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of class

-- ----------------------------

INSERT INTO `class` VALUES ('1', '三年二班');

INSERT INTO `class` VALUES ('2', '三年三班');

INSERT INTO `class` VALUES ('3', '一年二班');

INSERT INTO `class` VALUES ('4', '二年九班');


-- ----------------------------

-- Table structure for `course`

-- ----------------------------

DROP TABLE IF EXISTS `course`;

CREATE TABLE `course` (

? `cid` int(11) NOT NULL AUTO_INCREMENT,

? `cname` varchar(32) NOT NULL,

? `teacher_id` int(11) NOT NULL,

? PRIMARY KEY (`cid`),

? KEY `fk_course_teacher` (`teacher_id`),

? CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of course

-- ----------------------------

INSERT INTO `course` VALUES ('1', '生物', '1');

INSERT INTO `course` VALUES ('2', '物理', '2');

INSERT INTO `course` VALUES ('3', '體育', '3');

INSERT INTO `course` VALUES ('4', '美術', '2');


-- ----------------------------

-- Table structure for `score`

-- ----------------------------

DROP TABLE IF EXISTS `score`;

CREATE TABLE `score` (

? `sid` int(11) NOT NULL AUTO_INCREMENT,

? `student_id` int(11) NOT NULL,

? `course_id` int(11) NOT NULL,

? `num` int(11) NOT NULL,

? PRIMARY KEY (`sid`),

? KEY `fk_score_student` (`student_id`),

? KEY `fk_score_course` (`course_id`),

? CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),

? CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)

) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of score

-- ----------------------------

INSERT INTO `score` VALUES ('1', '1', '1', '10');

INSERT INTO `score` VALUES ('2', '1', '2', '9');

INSERT INTO `score` VALUES ('5', '1', '4', '66');

INSERT INTO `score` VALUES ('6', '2', '1', '8');

INSERT INTO `score` VALUES ('8', '2', '3', '68');

INSERT INTO `score` VALUES ('9', '2', '4', '99');

INSERT INTO `score` VALUES ('10', '3', '1', '77');

INSERT INTO `score` VALUES ('11', '3', '2', '66');

INSERT INTO `score` VALUES ('12', '3', '3', '87');

INSERT INTO `score` VALUES ('13', '3', '4', '99');

INSERT INTO `score` VALUES ('14', '4', '1', '79');

INSERT INTO `score` VALUES ('15', '4', '2', '11');

INSERT INTO `score` VALUES ('16', '4', '3', '67');

INSERT INTO `score` VALUES ('17', '4', '4', '100');

INSERT INTO `score` VALUES ('18', '5', '1', '79');

INSERT INTO `score` VALUES ('19', '5', '2', '11');

INSERT INTO `score` VALUES ('20', '5', '3', '67');

INSERT INTO `score` VALUES ('21', '5', '4', '100');

INSERT INTO `score` VALUES ('22', '6', '1', '9');

INSERT INTO `score` VALUES ('23', '6', '2', '100');

INSERT INTO `score` VALUES ('24', '6', '3', '67');

INSERT INTO `score` VALUES ('25', '6', '4', '100');

INSERT INTO `score` VALUES ('26', '7', '1', '9');

INSERT INTO `score` VALUES ('27', '7', '2', '100');

INSERT INTO `score` VALUES ('28', '7', '3', '67');

INSERT INTO `score` VALUES ('29', '7', '4', '88');

INSERT INTO `score` VALUES ('30', '8', '1', '9');

INSERT INTO `score` VALUES ('31', '8', '2', '100');

INSERT INTO `score` VALUES ('32', '8', '3', '67');

INSERT INTO `score` VALUES ('33', '8', '4', '88');

INSERT INTO `score` VALUES ('34', '9', '1', '91');

INSERT INTO `score` VALUES ('35', '9', '2', '88');

INSERT INTO `score` VALUES ('36', '9', '3', '67');

INSERT INTO `score` VALUES ('37', '9', '4', '22');

INSERT INTO `score` VALUES ('38', '10', '1', '90');

INSERT INTO `score` VALUES ('39', '10', '2', '77');

INSERT INTO `score` VALUES ('40', '10', '3', '43');

INSERT INTO `score` VALUES ('41', '10', '4', '87');

INSERT INTO `score` VALUES ('42', '11', '1', '90');

INSERT INTO `score` VALUES ('43', '11', '2', '77');

INSERT INTO `score` VALUES ('44', '11', '3', '43');

INSERT INTO `score` VALUES ('45', '11', '4', '87');

INSERT INTO `score` VALUES ('46', '12', '1', '90');

INSERT INTO `score` VALUES ('47', '12', '2', '77');

INSERT INTO `score` VALUES ('48', '12', '3', '43');

INSERT INTO `score` VALUES ('49', '12', '4', '87');

INSERT INTO `score` VALUES ('52', '13', '3', '87');


-- ----------------------------

-- Table structure for `student`

-- ----------------------------

DROP TABLE IF EXISTS `student`;

CREATE TABLE `student` (

? `sid` int(11) NOT NULL AUTO_INCREMENT,

? `gender` char(1) NOT NULL,

? `class_id` int(11) NOT NULL,

? `sname` varchar(32) NOT NULL,

? PRIMARY KEY (`sid`),

? KEY `fk_class` (`class_id`),

? CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)

) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of student

-- ----------------------------

INSERT INTO `student` VALUES ('1', '男', '1', '理解');

INSERT INTO `student` VALUES ('2', '女', '1', '鋼蛋');

INSERT INTO `student` VALUES ('3', '男', '1', '張三');

INSERT INTO `student` VALUES ('4', '男', '1', '張一');

INSERT INTO `student` VALUES ('5', '女', '1', '張二');

INSERT INTO `student` VALUES ('6', '男', '1', '張四');

INSERT INTO `student` VALUES ('7', '女', '2', '鐵錘');

INSERT INTO `student` VALUES ('8', '男', '2', '李三');

INSERT INTO `student` VALUES ('9', '男', '2', '李一');

INSERT INTO `student` VALUES ('10', '女', '2', '李二');

INSERT INTO `student` VALUES ('11', '男', '2', '李四');

INSERT INTO `student` VALUES ('12', '女', '3', '如花');

INSERT INTO `student` VALUES ('13', '男', '3', '劉三');

INSERT INTO `student` VALUES ('14', '男', '3', '劉一');

INSERT INTO `student` VALUES ('15', '女', '3', '劉二');

INSERT INTO `student` VALUES ('16', '男', '3', '劉四');


-- ----------------------------

-- Table structure for `teacher`

-- ----------------------------

DROP TABLE IF EXISTS `teacher`;

CREATE TABLE `teacher` (

? `tid` int(11) NOT NULL AUTO_INCREMENT,

? `tname` varchar(32) NOT NULL,

? PRIMARY KEY (`tid`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of teacher

-- ----------------------------

INSERT INTO `teacher` VALUES ('1', '張磊老師');

INSERT INTO `teacher` VALUES ('2', '李平老師');

INSERT INTO `teacher` VALUES ('3', '劉海燕老師');

INSERT INTO `teacher` VALUES ('4', '朱云海老師');

INSERT INTO `teacher` VALUES ('5', '李杰老師');


#1、查詢所有的課程的名稱以及對應的任課老師姓名

SELECT

? ? course.cname,

? ? teacher.tname

FROM

? ? course

INNER JOIN teacher ON course.teacher_id = teacher.tid;


#2、查詢學生表中男女生各有多少人

SELECT

? ? gender 性別,

? ? count(1) 人數

FROM

? ? student

GROUP BY

? ? gender;


#3、查詢物理成績等于100的學生的姓名

SELECT

? ? student.sname

FROM

? ? student

WHERE

? ? sid IN (

? ? ? ? SELECT

? ? ? ? ? ? student_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? INNER JOIN course ON score.course_id = course.cid

? ? ? ? WHERE

? ? ? ? ? ? course.cname = '物理'

? ? ? ? AND score.num = 100

? ? );


#4、查詢平均成績大于八十分的同學的姓名和平均成績

SELECT

? ? student.sname,

? ? t1.avg_num

FROM

? ? student

INNER JOIN (

? ? SELECT

? ? ? ? student_id,

? ? ? ? avg(num) AS avg_num

? ? FROM

? ? ? ? score

? ? GROUP BY

? ? ? ? student_id

? ? HAVING

? ? ? ? avg(num) > 80

) AS t1 ON student.sid = t1.student_id;


#5、查詢所有學生的學號,姓名,選課數,總成績(注意:對于那些沒有選修任何課程的學生也算在內)

SELECT

? ? student.sid,

? ? student.sname,

? ? t1.course_num,

? ? t1.total_num

FROM

? ? student

LEFT JOIN (

? ? SELECT

? ? ? ? student_id,

? ? ? ? COUNT(course_id) course_num,

? ? ? ? sum(num) total_num

? ? FROM

? ? ? ? score

? ? GROUP BY

? ? ? ? student_id

) AS t1 ON student.sid = t1.student_id;


#6、 查詢姓李老師的個數

SELECT

? ? count(tid)

FROM

? ? teacher

WHERE

? ? tname LIKE '李%';


#7、 查詢沒有報李平老師課的學生姓名(找出報名李平老師課程的學生,然后取反就可以)

SELECT

? ? student.sname

FROM

? ? student

WHERE

? ? sid NOT IN (

? ? ? ? SELECT DISTINCT

? ? ? ? ? ? student_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? WHERE

? ? ? ? ? ? course_id IN (

? ? ? ? ? ? ? ? SELECT

? ? ? ? ? ? ? ? ? ? course.cid

? ? ? ? ? ? ? ? FROM

? ? ? ? ? ? ? ? ? ? course

? ? ? ? ? ? ? ? INNER JOIN teacher ON course.teacher_id = teacher.tid

? ? ? ? ? ? ? ? WHERE

? ? ? ? ? ? ? ? ? ? teacher.tname = '李平老師'

? ? ? ? ? ? )

? ? );



#8、 查詢物理課程比生物課程高的學生的學號(分別得到物理成績表與生物成績表,然后連表即可)

SELECT

? ? t1.student_id

FROM

? ? (

? ? ? ? SELECT

? ? ? ? ? ? student_id,

? ? ? ? ? ? num

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? WHERE

? ? ? ? ? ? course_id = (

? ? ? ? ? ? ? ? SELECT

? ? ? ? ? ? ? ? ? ? cid

? ? ? ? ? ? ? ? FROM

? ? ? ? ? ? ? ? ? ? course

? ? ? ? ? ? ? ? WHERE

? ? ? ? ? ? ? ? ? ? cname = '物理'

? ? ? ? ? ? )

? ? ) AS t1

INNER JOIN (

? ? SELECT

? ? ? ? student_id,

? ? ? ? num

? ? FROM

? ? ? ? score

? ? WHERE

? ? ? ? course_id = (

? ? ? ? ? ? SELECT

? ? ? ? ? ? ? ? cid

? ? ? ? ? ? FROM

? ? ? ? ? ? ? ? course

? ? ? ? ? ? WHERE

? ? ? ? ? ? ? ? cname = '生物'

? ? ? ? )

) AS t2 ON t1.student_id = t2.student_id

WHERE

? ? t1.num > t2.num;


#9、 查詢沒有同時選修物理課程和體育課程的學生姓名(沒有同時選修指的是選修了一門的,思路是得到物理+體育課程的學生信息表,然后基于學生分組,統計count(課程)=1)

SELECT

? ? student.sname

FROM

? ? student

WHERE

? ? sid IN (

? ? ? ? SELECT

? ? ? ? ? ? student_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? WHERE

? ? ? ? ? ? course_id IN (

? ? ? ? ? ? ? ? SELECT

? ? ? ? ? ? ? ? ? ? cid

? ? ? ? ? ? ? ? FROM

? ? ? ? ? ? ? ? ? ? course

? ? ? ? ? ? ? ? WHERE

? ? ? ? ? ? ? ? ? ? cname = '物理'

? ? ? ? ? ? ? ? OR cname = '體育'

? ? ? ? ? ? )

? ? ? ? GROUP BY

? ? ? ? ? ? student_id

? ? ? ? HAVING

? ? ? ? ? ? COUNT(course_id) = 1

? ? );


#10、查詢掛科超過兩門(包括兩門)的學生姓名和班級(求出<60的表,然后對學生進行分組,統計課程數目>=2)

SELECT

? ? student.sname,

? ? class.caption

FROM

? ? student

INNER JOIN (

? ? SELECT

? ? ? ? student_id

? ? FROM

? ? ? ? score

? ? WHERE

? ? ? ? num < 60

? ? GROUP BY

? ? ? ? student_id

? ? HAVING

? ? ? ? count(course_id) >= 2

) AS t1

INNER JOIN class ON student.sid = t1.student_id

AND student.class_id = class.cid;


#11、查詢選修了所有課程的學生姓名(先從course表統計課程的總數,然后基于score表按照student_id分組,統計課程數據等于課程總數即可)

SELECT

? ? student.sname

FROM

? ? student

WHERE

? ? sid IN (

? ? ? ? SELECT

? ? ? ? ? ? student_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? GROUP BY

? ? ? ? ? ? student_id

? ? ? ? HAVING

? ? ? ? ? ? COUNT(course_id) = (SELECT count(cid) FROM course)

? ? );



#12、查詢李平老師教的課程的所有成績記錄

SELECT

? ? *

FROM

? ? score

WHERE

? ? course_id IN (

? ? ? ? SELECT

? ? ? ? ? ? cid

? ? ? ? FROM

? ? ? ? ? ? course

? ? ? ? INNER JOIN teacher ON course.teacher_id = teacher.tid

? ? ? ? WHERE

? ? ? ? ? ? teacher.tname = '李平老師'

? ? );


#13、查詢全部學生都選修了的課程號和課程名(取所有學生數,然后基于score表的課程分組,找出count(student_id)等于學生數即可)

SELECT

? ? cid,

? ? cname

FROM

? ? course

WHERE

? ? cid IN (

? ? ? ? SELECT

? ? ? ? ? ? course_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? GROUP BY

? ? ? ? ? ? course_id

? ? ? ? HAVING

? ? ? ? ? ? COUNT(student_id) = (

? ? ? ? ? ? ? ? SELECT

? ? ? ? ? ? ? ? ? ? COUNT(sid)

? ? ? ? ? ? ? ? FROM

? ? ? ? ? ? ? ? ? ? student

? ? ? ? ? ? )

? ? );


#14、查詢每門課程被選修的次數

SELECT

? ? course_id,

? ? COUNT(student_id)

FROM

? ? score

GROUP BY

? ? course_id;


#15、查詢之選修了一門課程的學生姓名和學號

SELECT

? ? sid,

? ? sname

FROM

? ? student

WHERE

? ? sid IN (

? ? ? ? SELECT

? ? ? ? ? ? student_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? GROUP BY

? ? ? ? ? ? student_id

? ? ? ? HAVING

? ? ? ? ? ? COUNT(course_id) = 1

? ? );


#16、查詢所有學生考出的成績并按從高到低排序(成績去重)

SELECT DISTINCT

? ? num

FROM

? ? score

ORDER BY

? ? num DESC;


#17、查詢平均成績大于85的學生姓名和平均成績

SELECT

? ? sname,

? ? t1.avg_num

FROM

? ? student

INNER JOIN (

? ? SELECT

? ? ? ? student_id,

? ? ? ? avg(num) avg_num

? ? FROM

? ? ? ? score

? ? GROUP BY

? ? ? ? student_id

? ? HAVING

? ? ? ? AVG(num) > 85

) t1 ON student.sid = t1.student_id;


#18、查詢生物成績不及格的學生姓名和對應生物分數

SELECT

? ? sname 姓名,

? ? num 生物成績

FROM

? ? score

LEFT JOIN course ON score.course_id = course.cid

LEFT JOIN student ON score.student_id = student.sid

WHERE

? ? course.cname = '生物'

AND score.num < 60;


#19、查詢在所有選修了李平老師課程的學生中,這些課程(李平老師的課程,不是所有課程)平均成績最高的學生姓名

SELECT

? ? sname

FROM

? ? student

WHERE

? ? sid = (

? ? ? ? SELECT

? ? ? ? ? ? student_id

? ? ? ? FROM

? ? ? ? ? ? score

? ? ? ? WHERE

? ? ? ? ? ? course_id IN (

? ? ? ? ? ? ? ? SELECT

? ? ? ? ? ? ? ? ? ? course.cid

? ? ? ? ? ? ? ? FROM

? ? ? ? ? ? ? ? ? ? course

? ? ? ? ? ? ? ? INNER JOIN teacher ON course.teacher_id = teacher.tid

? ? ? ? ? ? ? ? WHERE

? ? ? ? ? ? ? ? ? ? teacher.tname = '李平老師'

? ? ? ? ? ? )

? ? ? ? GROUP BY

? ? ? ? ? ? student_id

? ? ? ? ORDER BY

? ? ? ? ? ? AVG(num) DESC

? ? ? ? LIMIT 1

? ? );


以上是整理的面試題中關于SQL編寫的相關案例,希望大家能認真分析,練習一下,希望對大家面試有所幫助!


? ?原創(chuàng)不易,如轉載請標明出處。


面試之數據庫SQL編寫實戰(zhàn)案例的評論 (共 條)

分享到微博請遵守國家法律
乌兰浩特市| 浦江县| 望城县| 潞城市| 新绛县| 满城县| 甘泉县| 蒲江县| 曲麻莱县| 乌鲁木齐县| 彩票| 乐山市| 弋阳县| 汉川市| 阿拉善盟| 广南县| 沅陵县| 海宁市| 青阳县| 阳原县| 陆丰市| 望都县| 图们市| 班玛县| 宜宾县| 灵宝市| 吴旗县| 白银市| 开化县| 芒康县| 敦化市| 祁门县| 安康市| 阿鲁科尔沁旗| 马龙县| 泊头市| 浙江省| 临猗县| 安远县| 乐业县| 措美县|