sql语句应用-学生管理系统项目设计与应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34646546/article/details/89160524

题目

  1. 按需求建立数据库和表

==================================
student(sno,sname,sage,ssex) 学生表
sno: 学号;
sname:学生姓名;
sage: 学生年龄;
ssex: 学生性别;

CREATE DATABASE school CHARSET utf8;
USE school

CREATE TABLE student(
sno INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(20) NOT NULL COMMENT '姓名',
sage  TINYINT UNSIGNED  NOT NULL COMMENT '年龄',
ssex  ENUM('f','m') NOT NULL DEFAULT 'm' COMMENT '性别'
)ENGINE=INNODB CHARSET=utf8;

SHOW TABLES;

=================================

course(cno,cname,tno) 课程表
cno: 课程编号;
cname:课程名字;
tno: 教师编号 ;

=================================

CREATE TABLE course(
cno INT NOT NULL PRIMARY KEY COMMENT '课程编号',
cname VARCHAR(20) NOT NULL COMMENT '课程名字',
tno INT NOT NULL COMMENT '教师编号'
)ENGINE=INNODB CHARSET utf8;

============================
sc(sno,cno,score) 成绩表
sno: 学号;
cno: 课程编号;
score:成绩 ;

============================

CREATE TABLE sc (
sno INT NOT NULL COMMENT '学号',
cno INT NOT NULL COMMENT '课程编号',
score INT  NOT NULL DEFAULT 0 COMMENT '成绩'
)ENGINE=INNODB CHARSET=utf8;

===================

teacher(tno,tname) 教师表
tno: 教师编号;
tname:教师名字;

====================

CREATE TABLE teacher(
tno INT NOT NULL PRIMARY KEY COMMENT '教师编号',
tname VARCHAR(20) NOT NULL COMMENT '教师名字'
)ENGINE=INNODB CHARSET utf8;

  1. 按需录入数据

(1)最标准的insert,student表中录入一行数据

INSERT INTO student(sno,sname,sage,ssex)
VALUES (1,'zhang3',18,'m');

(2)最标准的insert,录入多行,生产用法

INSERT INTO student(sno,sname,sage,ssex)
VALUES 
(2,'zhang4',18,'m'),
(3,'li4',18,'m'),
(4,'wang5',19,'f');

(3)简化写法,往表中所有列录入数据

INSERT INTO student
VALUES 
(5,'zh4',18,'m'),
(6,'zhao4',18,'m'),
(7,'ma6',19,'f');


SELECT * FROM student;

(4)对部分列录入数据

INSERT INTO student(sname,sage,ssex)
VALUES 
('oldboy',20,'m'),
('oldgirl',20,'f'),
('oldp',25,'m');

4.教师表中录入三位老师

DESC teacher;
INSERT INTO teacher(tno,tname) VALUES
(101,'oldboy'),
(102,'hesw'),
(103,'oldguo');

5.课程表中录入三门课程

DESC course;
INSERT INTO course(cno,cname,tno)
VALUES
(1001,'linux',101),
(1002,'python',102),
(1003,'mysql',103);

6.成绩表中录入学生成绩

DESC sc;
INSERT INTO sc(sno,cno,score)
VALUES
(1,1001,80),
(1,1002,59),
(2,1002,90),
(2,1003,100),
(3,1001,99),
(3,1003,40),
(4,1001,79),
(4,1002,61),
(4,1003,99),
(5,1003,40),
(6,1001,89),
(6,1003,77),
(7,1001,67),
(7,1003,82),
(8,1001,70),
(9,1003,80),
(10,1003,96);

7.SQL练习题:

  1. 统计zhang3,学习了几门课
  2. 查询zhang3,学习的课程名称有哪些?
  3. 查询oldguo老师教的学生名.
  4. 查询oldguo所教课程的平均分数
  5. 查询oldguo所教的不及格的学生姓名

====================================
SHOW TABLES;
SELECT * FROM course ; 课程表
SELECT * FROM sc ; 成绩表
SELECT * FROM student ; 学生表
SELECT * FROM teacher ; 教师表

sno: 学号;
sname:学生姓名;
sage: 学生年龄;
ssex: 学生性别;
cno: 课程编号;
score:成绩 ;
tno: 教师编号;
tname:教师名字;

====================================

答案

  1. 统计zhang3,学习了几门课
SELECT student.`sname`,COUNT(course.`cname`) AS 课程数量 
FROM
student 
JOIN sc
ON student.`sno`=sc.`sno`
JOIN course
ON sc.`cno`=course.`cno`
WHERE student.`sname`='zhang3';
  1. 查询zhang3,学习的课程名称有哪些?
SELECT student.`sname`,GROUP_CONCAT(course.`cname`)
FROM
student
JOIN sc
ON student.`sno`=sc.`sno`
JOIN course
ON sc.`cno`=course.`cno`
WHERE student.`sname`='zhang3';
  1. 查询oldguo老师教的学生名.
SELECT teacher.`tname`,GROUP_CONCAT(student.`sname`)
FROM
teacher
JOIN course
ON teacher.tno=course.`tno`
JOIN sc
ON sc.`cno`=course.`cno`
JOIN student
ON sc.`sno`=student.`sno`
WHERE teacher.`tname`='oldguo'
  1. 查询oldguo所教课程的平均分数
SELECT teacher.`tname`,course.`cname`,AVG(sc.`score`)
FROM
teacher 
JOIN course
ON teacher.`tno`=course.`tno`
JOIN sc
ON course.`cno`=sc.`cno`
WHERE teacher.`tname`='oldguo'
  1. 查询oldguo所教的不及格的学生姓名
SELECT teacher.`tname`,student.`sname`,sc.`score`
FROM
teacher
JOIN course
ON teacher.`tno`=course.`tno`
JOIN sc
ON course.`cno`=sc.`cno`
JOIN student
ON sc.`sno`=student.`sno`
WHERE teacher.`tname`='oldguo'
HAVING  sc.`score`<60

5.1 查询所有老师所教学生低于平均分的学生信息

SELECT teacher.`tname`,student.`sname`,AVG(sc.`score`),sc.`score`
FROM
teacher
JOIN course
ON teacher.tno=course.`tno`
JOIN sc
ON sc.`cno`=course.`cno`
JOIN student
ON sc.`sno`=student.`sno`
GROUP BY teacher.`tname`
HAVING sc.`score`< AVG(sc.`score`)

猜你喜欢

转载自blog.csdn.net/qq_34646546/article/details/89160524
今日推荐