程序笔记   发布时间:2022-07-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MySQL55--SQL语句练习01大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

MySQL查询综合练习01

查看所有库

SHOW DATABASES;

创建一个仓库,仓库名称为test_2106,字符集为utf8

CREATE DATABASE test_2106 character set utf8;

进入test_2106

USE test_2106;

创建表student(学生表)

字段类型

Sno varchar(20) NOT NULL 学生编号

Sname varchar(20) NOT NULL 学生姓名

sex varchar(20) NOT NULL 性别

age INT NOT NULL 年龄

dept varchar(20) NOT NULL 系别

CREATE TABLE student
(Sno  varchar(20) NOT NULL,
 Sname  varchar(20) NOT NULL,
 sex  varchar(20) NOT NULL,
 age  INT  NOT NULL,
 dept  varchar(20) NOT NULL
);

创建表course(学生修课表)

字段类型

Cno varchar(20) NOT NULL 课程编号

Cname varchar(20) NOT NULL 课程姓名

hours varchar(20) NOT NULL 学课时长

CREATE TABLE course
(Cno  varchar(20) NOT NULL,
 Cname  varchar(20) NOT NULL,
 hours VARCHAR(20) NOT NULL
);

创建表sc

字段类型

Sno varchar(20) NOT NULL 学生编号

Cno varchar(20) NOT NULL 课程编号

grade INT 成绩

CREATE TABLE SC
(Sno  varchar(20) NOT NULL,
 Cno  varchar(20) NOT NULL,
 grade  INT
);

向student表中插入数据

Sno Sname sex age dept

9512101 李勇男19 计算机系

9512102 刘晨男20 计算机系

9512103 王敏女20 计算机系

9521101 张立男22 信息系

9521102 吴宾女21 信息系

9521103 张海男20 信息系

9531101 钱小力女18 数学系

9531102 王大力男19 数学系

INSERT INTO student VALUES ('9512101','李勇','男',19,'计算机系');
INSERT INTO student VALUES ('9512102','刘晨','男',20,'计算机系');
INSERT INTO student VALUES ('9512103','王敏','女',20,'计算机系');
INSERT INTO student VALUES ('9521101','张立','男',22,'信息系');
INSERT INTO student VALUES ('9521102','吴宾','女',21,'信息系');
INSERT INTO student VALUES ('9521103','张海','男',20,'信息系');
INSERT INTO student VALUES ('9531101','钱小力','女',18,'数学系');
INSERT INTO student VALUES ('9531102','王大力','男',19,'数学系');

向course表中插入数据

Cno Cname hours

C01 计算机文化学70

C02 VB 90

C03 计算机网络80

C04 数据库基础108

C05 高等数学180

C06 数据结构72

INSERT INTO course VALUES ('C01','计算机文化学','70');
INSERT INTO course VALUES ('C02','VB','90');
INSERT INTO course VALUES ('C03','计算机网络','80');
INSERT INTO course VALUES ('C04','数据库基础','108');
INSERT INTO course VALUES ('C05','高等数学','180');
INSERT INTO course VALUES ('C06','数据结构','72');

向sc表中插入数据

Sno Cno grade

9512101 C01 90

9512101 C02 86

9512101 C06 NULL

9512102 C02 78

9512102 C04 66

9521102 C01 82

9521102 C02 75

9521102 C04 92

9521102 C05 50

9521103 C02 68

9521103 C06 NULL

9531101 C01 80

9531101 C05 95

9531102 C05 85

INSERT INTO SC VALUES ('9512101','C01',90);
INSERT INTO SC VALUES ('9512101','C02',86);
INSERT INTO SC VALUES ('9512101','C06',NULL);
INSERT INTO SC VALUES ('9512102','C02',78);
INSERT INTO SC VALUES ('9512102','C04',66);
INSERT INTO SC VALUES ('9521102','C01',82);
INSERT INTO SC VALUES ('9521102','C02',75);
INSERT INTO SC VALUES ('9521102','C04',92);
INSERT INTO SC VALUES ('9521102','C05',50);
INSERT INTO SC VALUES ('9521103','C02',68);
INSERT INTO SC VALUES ('9521103','C06',NULL);
INSERT INTO SC VALUES ('9531101','C01',80);
INSERT INTO SC VALUES ('9531101','C05',95);
INSERT INTO SC VALUES ('9531102','C05',85);

分别查询学生表和学生修课表中的全部数据

SELECT * FROM student;

SELECT * FROM course;

查询成绩在70-80分之间的学生的学号、课程号和成绩

SELECT *
FROM SC 
WHERE grade between 70 and 80;

查询C01号课程成绩最高的分数

SELECT max(grade)
FROM SC 
WHERE Cno = 'C01'
GROUP BY Cno;

查询学生都选修了哪些课程,要求列出课程号

SELECT CnoFROM SC GROUP BY Cno;

查询C02号课程的所有学生的平均成绩、最高成绩和最低成绩。

SELECT AVG(grade),MAX(grade),MIN(grade)
FROM SC 
WHERE Cno = 'C02'
group BY Cno;

统计每个系的学生人数

SELECT dept,count(*)
FROM student
GROUP BY dept;

统计每门课程的修课人数和考试最高分

SELECT Cno, count(*),max(grade)
FROM SC 
group BY Cno;

统计每个学生的选课门数,并按选课门数的递增顺序显示结果

SELECT Sno, count(*)
FROM SC 
GROUP BY Sno
ORDER BY count(*);

统计选修课的学生总数和考试的平均成绩

SELECT Cno, count(*), avg(grade)
FROM SC 
GROUP BY Cno;

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

SELECT Sno, count(*),avg(grade)
FROM SC 
GROUP BY Sno
HAVING count(*)> 2;

列出总成绩超过200分的学生,要求列出学号、总成绩

SELECT Sno,sum(grade)
FROM SC 
GROUP BY Sno
HAVING sum(grade)> 200;

查询选修了C02号课程的学生的姓名和所在系。

SELECT Sname,dept
FROM student
WHERE Sno in (SELECT Sno FROM sc WHERE Cno = 'C02');

查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。

SELECT s.sname,o.cno,o.grade
FROM student s,sc o
WHERE s.sno=o.sno and o.grade>80
ORDER BY o.grade desc;

查询计算机系男生修了‘数据库基础’的学生姓名、性别、成绩

SELECT s.sname,s.sex,o.grade
FROM student s,sc o,course c
WHERE s.sno=o.sno and o.cno=c.cno and s.dept='计算机系' and s.sex='男' and c.cname='数据库基础';

查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。

SELECT DISTINCT s1.sname,s2.age
FROM student s1,student s2
WHERE s1.sname!=s2.sname and s1.age=s2.age;

查询哪些课程没有人选,要求列出课程号和课程名。

SELECT Cno,Cname
FROM course
WHERE Cno NOT in (SELECT Cno FROM sc GROUP BY Cno);

查询有考试成绩的所有学生的姓名、修课名称及考试成绩。

--要求将查询结果放在一张新的永久表(假设新表名为new-sc)中。

CREAFTE TABLE new_sc
SELECT s.sname,c.cname,o.grade
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno;
SHOW TABLES;
SELECT * FROM new_sc;

分别查询信息系和计算机系的学生姓名、性别、修课名称、修课成绩

SELECT s.sname,s.sex,c.cname,o.grade
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno and s.dept in ('信息系','计算机系');

用子查询实现如下查询:

查询选修了C01号课程的学生的姓名和所在系

SELECT sname,dept
FROM student
WHERE sno in(select sno from course where cno='c01');

查询数学系成绩80分以上的学生的学号和姓名。

SELECT sno,sname
FROM student
WHERE sno in(select sno from sc where grade>80) and dept='数学系';

查询计算机系学生所选的课程名

SELECT cname
FROM course
WHERE cno in(select cno from sc where sno in(select sno from student where dept='计算机系'));

将计算机系成绩高于80分的学生的修课情况插入到另一张表中,分两种情况实现:

在插入的过程中建表

SELECT sname 学生姓名,cname 课程名称,cno 课程编号
FROM (
SELECT s.sname,c.cname,o.cno
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno and o.grade>80)
as new01;

先建一个新表,然后再插入数据

CREATE TABLE new02
SELECT s.sname,c.cname,o.cno
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno and o.grade>80;
SELECT * FROM new02;

删除修课成绩小于50分的学生的修课记录

DELETE from sc
WHERE grade<=50;

将所有选修了C01课程的学生的成绩加10分。

UPDATE sc set grade=grade+10
WHERE cno='c01';
SELECT * FROM sc;

大佬总结

以上是大佬教程为你收集整理的MySQL55--SQL语句练习01全部内容,希望文章能够帮你解决MySQL55--SQL语句练习01所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:sql