面试经典数据库查询题目(学生、课程、选课)

这是前几天一刚毕业的朋友的面试题,算是面试常遇到的sql经典题目,记录一下(如图)

在此我在电脑数据库上建立了对应的表结构,以供检验sql语句正误。

建表语句:

  • 学生表(student_info)

CREATE TABLE `student_info` (
    `no` varchar(255) NOT NULL,
    `name` varchar(255) DEFAULT NULL,
    `sex` varchar(255) DEFAULT NULL,
    `age` int(10) DEFAULT NULL,
    `dept` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`no`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 课程表(course_info)

CREATE TABLE `course_info` (
    `no` varchar(255) NOT NULL,
    `name` varchar(255) DEFAULT NULL,
    `hours` int(10) DEFAULT NULL,
    PRIMARY KEY (`no`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 选课表(choice_info)

CREATE TABLE `choice_info` (
    `student_no` varchar(255) NOT NULL,
    `course_no` varchar(255) NOT NULL,
    `grade` int(10) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

对应各个表中的数据根据图中提供进行插入

1.查询学生都选修了哪些课程,要求列出课程名、课程号、选修人数以及最好成绩;

SELECT
     course.`name`,
     course.`no`,
     COUNT(choice.course_no) `count`,
     MAX(choice.grade) Maxgrade
FROM
     course_info course,
     choice_info choice
WHERE
     choice.course_no = course.`no`
GROUP BY
     choice.course_no;

2.统计每个学生的选课门数,并按选课门数的递减顺序显示(注:题为每个学生,故包含未选课学生)

SELECT
     student. NAME,
     COUNT(choice.course_no) `count`
FROM
     choice_info choice
RIGHT JOIN student_info student ON choice.student_no = student. NO
GROUP BY
     choice.student_no
ORDER BY
     COUNT(choice.course_no) DESC;

3.查询选课门数超过2门的学生的平均成绩和选课门数;

SELECT
     a.`name`,
     a.avg,
     a.count
FROM
     (
         SELECT
             student.`name` `name`,
             IFNULL(AVG(choice.grade), 0) `avg`,
             COUNT(choice.course_no) `count`
         FROM
             student_info student
         LEFT JOIN choice_info choice ON choice.student_no = student.`no`
         GROUP BY
             student.`no`
     ) a
WHERE
     a.count > 2;

4.查询有考试成绩的所有学生的姓名、修课名称及考试成绩,并将查询结果放到一张新的永久表(假设新表名为tb_rel_new)中

注:此题包含新建表和插入查询数据

  • 查询

SELECT
     a.`name` studentName,
     course.`name` courseName,
     a.grade
FROM
     course_info course
LEFT JOIN (
     SELECT
         student.`name` `name`,
         choice.grade grade,
         choice.course_no courseNo
     FROM
         student_info student
     RIGHT JOIN choice_info choice ON choice.student_no = student.`no`
) a ON a.courseNo = course.`no`;

  • 创建tb_rel_new表

CREATE TABLE `tb_rel_new` (
     `studentName` VARCHAR (255) DEFAULT NULL,
     `courseName` VARCHAR (255) DEFAULT NULL,
     `grade` INT (10) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;

  • 插入数据

INSERT INTO tb_rel_new (
     studentName,
     courseName,
     grade
) SELECT
     a.`name` studentName,
     course.`name` courseName,
     a.grade
FROM
     course_info course
LEFT JOIN (
     SELECT
         student.`name` `name`,
         choice.grade grade,
         choice.course_no courseNo
     FROM
         student_info student
     RIGHT JOIN choice_info choice ON choice.student_no = student.`no`
) a ON a.courseNo = course.`no`;

总结:此题主要考察数据库sql基础,面试中要快速理清数据关系,问题便迎刃而解。

原文地址:https://www.cnblogs.com/bianxcArticle/p/9461842.html

时间: 2024-11-02 13:10:40

面试经典数据库查询题目(学生、课程、选课)的相关文章

例题:学习数据库查询。学生信息表的创建,主外键关系,以及45道题的查询实例。主要知识点在讲页45页,和讲页65页

create database shujuku use shujuku use cangku go --注意事项:外键对本关系不一定是键 --2:创建外键时,链接表的主关键字已经确立 --3:当创建外部键后,外部键的取值必须来源于主键值 --4:要想删除主键表时,必须先删除外键表信息 create table student--学生表 ( sno varchar(50) not null primary key ,--学生主键 sname varchar(50)not null, ssex va

oracle面试经典题

1.sql面试题(学生表_课程表_成绩表_教师表) 2. 问题描述: 本题用到下面三个关系表: CARD 借书卡. CNO 卡号,NAME 姓名,CLASS 班级 BOOKS 图书. BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW 借书记录. CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本:库存册数随借书.还书而改变. 3. 问题描述: 为管理岗位业务培训信息,建立3个表: S (S#,SN,S

数据库 查询方法详解 以学生老师信息表为例

create table Student--3rd再次执行 ( Sno int primary key not null,--学号主键 Sname varchar(50) not null,--学生姓名 Ssex varchar(50) not null,--学生性别 Sbirthday datetime,--出生年月 Class int--班级 ) truncate table Student--清空表格 insert into Student values(108,'曾华','男','197

SQL数据库查询练习题

一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示.用SQL语句创建四个表并完成相关题目. 表1-1数据库的表结构 表(一)Student (学生表) 属性名 数据类型 可否为空 含 义 Sno varchar (20) 否 学号(主码) Sname varchar (20) 否 学生姓名 Ssex

【软件工程】02组软件工程组队项目计划安排及选题介绍——学生课程管理系统

一.项目概述 我们选择的项目是学生课程管理系统,是基于上一届学长的项目进行改进和实现. 学生课程管理系统是一个集成了课程信息查询,课程信息管理,成绩管理等面向老师与学生群体的系统. 定位:我们小组明确了这个系统的定位是辅助教务处的系统,适用范围是在一个比较小范围的人群内,而不是面向有数万人的学校.我们对教务处系统中一些比较繁琐或者需要复杂的权限才能使用的功能进行简化,使系统可以在一个小范围中比较简单地进行上手使用(例如一个老师要在院系中开一个培训班,那么教务处系统就不太方便,就可以用我们的系统)

SSM框架下的JAVA学生在线选课系统

今天和一个朋友共同完成了一个学生在线选课系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他.和往常一样选用简单又便捷的MYECLIPSE作为开发工具,这是一个 后台项目.这个系统的介绍是这样的:学生在线选课系统对于学校的决策者和管理者来说是至关重要的.针对选课系统的特点及其应用需求,采用基于JAVA的集成开发环境,开发出一套集数据查询.数据交换和数据维护等功能的网上模拟选课系统.设计了一种基于Web的学生选课系统,该系统采用

第七章、高级数据库查询

第七章.高级数据库查询 内容提要: 1. 掌握一般数据查询功能扩展 2. 掌握查询的并.交.差运算 3.掌握子查询的使用 4.了解其他一些查询功能 第一节 一般数据查询功能扩展 1.1. SELECT语句 //SQL的一般查询语句 SELECT [DISTINCT] [TOP n] select_list //将查询的结果插入到了一个表中 [INTO new_table] //需要查询的表 [FROM table_source] //查询的条件 [WHERE search_conditition

SQL数据库查询方法

SQL数据库查询方法 简单查询: 一.投影 select * from 表名 select 列1,列2... from 表名 select distinct 列名 from 表名 二.筛选 select top 数字 列|* from 表名 (一)等值与不等值 select * from 表名 where 列名=值 select * from 表名 where 列名!=值 select * from 表名 where 列名>值 select * from 表名 where 列名<值 selec

数据库查询实例(包含所有where条件例子)

查询指定列 [例1] 查询全体学生的学号与姓名. SELECT Sno,Sname FROM Student: [例2] 查询全体学生的姓名.学号.所在系. SELECT Sname,Sno,Sdept FROM Student: [例3] 查询全体学生的详细记录. SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student: 或 SELECT * FROM Student: [例4] 查全体学生的姓名及其出生年份. SELECT Sname,2004-Sage