Java面试题-数据库多表联查,student,course,sc,teacher

笔试题全是多表联查,所以就写了写,发现以我现在的水平是真的费劲

在这里插入图片描述

创建表

/*
SQLyog Ultimate v12.5.0 (64 bit)
MySQL - 5.6.25-log : Database - moni
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`moni` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `moni`;

/*Table structure for table `course` */

DROP TABLE IF EXISTS `course`;

CREATE TABLE `course` (
  `cno` int(10) NOT NULL,
  `cname` varchar(50) DEFAULT NULL,
  `tno` int(50) DEFAULT NULL,
  PRIMARY KEY (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `course` */

insert  into `course`(`cno`,`cname`,`tno`) values 
(1,'java',3),
(2,'c',3),
(3,'Python',3),
(4,'课程2',1);

/*Table structure for table `sc` */

DROP TABLE IF EXISTS `sc`;

CREATE TABLE `sc` (
  `sno` int(10) NOT NULL,
  `cno` int(50) DEFAULT NULL,
  `score` int(50) DEFAULT NULL,
  PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `sc` */

insert  into `sc`(`sno`,`cno`,`score`) values 
(1,1,2134),
(2,2,324),
(3,3,546),
(4,4,234);

/*Table structure for table `student` */

DROP TABLE IF EXISTS `student`;

CREATE TABLE `student` (
  `sno` int(10) NOT NULL,
  `sname` varchar(50) DEFAULT NULL,
  `sage` int(200) DEFAULT NULL,
  `ssex` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `student` */

insert  into `student`(`sno`,`sname`,`sage`,`ssex`) values 
(1,'A',20,'女'),
(2,'B',29,'男');

/*Table structure for table `teacher` */

DROP TABLE IF EXISTS `teacher`;

CREATE TABLE `teacher` (
  `tno` int(10) NOT NULL,
  `tname` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`tno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `teacher` */

insert  into `teacher`(`tno`,`tname`) values 
(1,'kk'),
(2,'常'),
(3,'王五');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

sql语句

#1,把“sc”表中“王五”所教课的成绩都更改为此课程的平均成绩
①先查询王五教的所有课程
SELECT c.cno FROM teacher t, course c, sc WHERE t.tno = c.tno AND sc.cno = c.cno AND t.tname='王五'
②再查出“王五”所教课的平均成绩
SELECT t.cno, AVG(t.score) FROM 
	(SELECT c.cno, sc.score FROM teacher t, course c, sc WHERE t.tno = c.tno AND sc.cno = c.cno AND t.tname='王五') t GROUP BY t.cno

在这里插入图片描述

③更新
#这里有点小错  
UPDATE sc SET score = (
		SELECT t2.avg_score FROM 
			(SELECT t.cno, AVG(t.score) avg_score FROM 
			(SELECT c.cno, sc.score FROM teacher t, course c, sc WHERE t.tno = c.tno AND sc.cno = c.cno AND t.tname='王五') t GROUP BY t.cno) t2
		WHERE sc.cno = t2.cno

)



#2,(不会写)查询和编号为2的同学学习的课程完全相同的其他同学学号和姓名

#编号为2的同学
SELECT sno,sname FROM student WHERE sno=2
##问题  又不能更改表,这个课程都没有学生的外键,这该怎么写呢





#3,删除学习“王五”老师课的sc表记录
#这个可以运行


DELETE sc FROM course, teacher,sc
WHERE course.cno = sc.cno AND course.tno = teacher.tno AND tname = '王五'

在这里插入图片描述
删除成功在这里插入图片描述

  #4,向sc表中插入一些记录,这些记录要求符合以下条件:
    #将没有课程3成绩同学的该成绩补齐, 其成绩取所有学生的课程2的平均成绩
    
    #这个代码有问题,先进行插入数据
     INSERT INTO sc (sno,cno,score) VALUE(10,1,213)
     #这个也不对执行报错
     SELECT * FROM sc,course c,
     WHERE sc.`cno`=c.cno AND c.cname='课程2'
     #这个的疑问是我该如何把课程2的平均成绩塞到插入表的值当中呢,这两个我该如何结合呢
     
 
  
 #5,按平平均分从高到低显示所有学生的如下统计报表:
-- 学号,企业管理,马克思,UML,数据库,物理,课程数,平均分
##这个可以执行


SELECT sno AS 学号
,MAX(CASE WHEN cno = 1 THEN score END) AS 企业管理
,MAX(CASE WHEN cno = 2 THEN score END) AS 马克思
,MAX(CASE WHEN cno = 3 THEN score END) AS UML
,MAX(CASE WHEN cno = 4 THEN score END) AS 数据库
,MAX(CASE WHEN cno = 5 THEN score END) AS 物理
,COUNT(cno) AS 课程数
,AVG(score) AS 平均分
FROM sc
GROUP BY sno
ORDER BY AVG(score) DESC

在这里插入图片描述

#6,查询各科成绩最高分和最低分:
##这个也可以执行

SELECT cno AS 课程号, MAX(score) AS 最高分, MIN(score) 最低分
FROM sc GROUP BY cno

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fhkkkbfgggjk/article/details/85275473
今日推荐