详解mysql数据库经典SQL练习题--第一部分

lifeison 2019-04-09

概述

因为sql练习方面的网上内容比较多,整理了下分成三部分做介绍,大家可以跟着测试一下,看是不是能用多种方式来实现。


建表语句

CREATE TABLE students
(sno VARCHAR(3) NOT NULL, 
sname VARCHAR(4) NOT NULL,
ssex VARCHAR(2) NOT NULL, 
sbirthday DATETIME,
class VARCHAR(5))
CREATE TABLE courses
(cno VARCHAR(5) NOT NULL, 
cname VARCHAR(10) NOT NULL, 
tno VARCHAR(10) NOT NULL)
CREATE TABLE scores 
(sno VARCHAR(3) NOT NULL, 
cno VARCHAR(5) NOT NULL, 
degree NUMERIC(10, 1) NOT NULL) 
CREATE TABLE teachers 
(tno VARCHAR(3) NOT NULL, 
tname VARCHAR(4) NOT NULL, tsex VARCHAR(2) NOT NULL, 
tbirthday DATETIME NOT NULL, prof VARCHAR(6), 
depart VARCHAR(10) NOT NULL)

详解mysql数据库经典SQL练习题--第一部分


插入数据

INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾华' ,'男' ,'1977-09-01',95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,'1975-10-02',95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王丽' ,'女' ,'1976-01-23',95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李军' ,'男' ,'1976-02-20',95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,'1975-02-10',95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陆君' ,'男' ,'1974-06-03',95031);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机导论',825);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' ,804);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('6-166' ,'数据电路' ,856);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' ,100);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (804,'李诚','男','1958-12-02','副教授','计算机系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (825,'王萍','女','1972-05-05','助教','计算机系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');
commit;

详解mysql数据库经典SQL练习题--第一部分

详解mysql数据库经典SQL练习题--第一部分

详解mysql数据库经典SQL练习题--第一部分


题目(大家可以先思考下怎么写)

1、 查询Student表中的所有记录的Sname、Ssex和Class列。

2、 查询教师所有的单位即不重复的Depart列。

3、 查询Student表的所有记录。

4、 查询Score表中成绩在60到80之间的所有记录。

5、 查询Score表中成绩为85,86或88的记录。

6、 查询Student表中“95031”班或性别为“女”的同学记录。

7、 以Class降序查询Student表的所有记录。

8、 以Cno升序、Degree降序查询Score表的所有记录。

9、 查询“95031”班的学生人数。

10、查询Score表中的最高分的学生学号和课程号。

11、查询‘3-105’号课程的平均分。

12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

13、查询最低分大于70,最高分小于90的Sno列。

14、查询所有学生的Sname、Cno和Degree列。

15、查询所有学生的Sno、Cname和Degree列。


答案

1.查询Student表中的所有记录的Sname、Ssex和Class列。

SELECT Sname,Ssex,Class FROM Students;

详解mysql数据库经典SQL练习题--第一部分

2.查询教师所有的单位即不重复的Depart列。

SELECT DISTINCT Depart FROM Teachers;

详解mysql数据库经典SQL练习题--第一部分

3.查询Student表的所有记录。

SELECT * FROM Students;

详解mysql数据库经典SQL练习题--第一部分

4.查询Score表中成绩在60到80之间的所有记录。

SELECT * FROM Scores WHERE Degree BETWEEN 60 AND 80;

详解mysql数据库经典SQL练习题--第一部分

5.查询Score表中成绩为85,86或88的记录。

SELECT * FROM Scores WHERE Degree IN (85,86,88);

详解mysql数据库经典SQL练习题--第一部分

6.查询Student表中“95031”班或性别为“女”的同学记录。

SELECT * FROM Students WHERE Class='95031' OR Ssex='女';

详解mysql数据库经典SQL练习题--第一部分

7.以Class降序查询Student表的所有记录。

SELECT * FROM Students ORDER BY Class DESC;

详解mysql数据库经典SQL练习题--第一部分

8.以Cno升序、Degree降序查询Score表的所有记录。

SELECT * FROM Scores ORDER BY Cno,Degree DESC;

详解mysql数据库经典SQL练习题--第一部分

9.查询“95031”班的学生人数。

SELECT COUNT(1) AS StuNum
FROM Students
WHERE Class='95031';

详解mysql数据库经典SQL练习题--第一部分

10.查询Score表中的最高分的学生学号和课程号。

SELECT Sno,Cno FROM Scores ORDER BY Degree DESC LIMIT 1;

详解mysql数据库经典SQL练习题--第一部分

11.查询‘3-105’号课程的平均分。

SELECT AVG(Degree)
FROM Scores
WHERE Cno='3-105';

详解mysql数据库经典SQL练习题--第一部分

12.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

SELECT Cno,AVG(Degree)
FROM Scores
WHERE Cno LIKE '3%'
GROUP BY Cno
HAVING COUNT(Sno) >= 5;

详解mysql数据库经典SQL练习题--第一部分

13.查询最低分大于70,最高分小于90的Sno列。

SELECT Sno
FROM Scores
GROUP BY Sno
HAVING MAX(Degree)<90 AND MIN(Degree)>70;

详解mysql数据库经典SQL练习题--第一部分

14.查询所有学生的Sname、Cno和Degree列。

SELECT Sname,Cno,Degree
FROM Students INNER JOIN Scores 
ON(Students.Sno=Scores.Sno)
ORDER BY Sname;

详解mysql数据库经典SQL练习题--第一部分

15.查询所有学生的Sno、Cname和Degree列。

SELECT Sno,Cname,Degree
FROM Scores INNER JOIN Courses
ON(Scores.Cno=Courses.Cno)
ORDER BY Sno;

详解mysql数据库经典SQL练习题--第一部分


大家有空的话可以先去思考下怎么实现,然后对着答案测试下,还是很有帮助的。后面小编会分享更多DBA方面内容,感兴趣的朋友可以关注一下~

详解mysql数据库经典SQL练习题--第一部分

相关推荐