数据库查询操作练习

Posted javawen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库查询操作练习相关的知识,希望对你有一定的参考价值。

CREATE TABLE `student` (

  `sno` varchar(20) NOT NULL COMMENT ‘学号‘,

  `sname` varchar(20) NOT NULL COMMENT ‘学生姓名‘,

  `ssex` varchar(20) NOT NULL COMMENT ‘学生性别‘,

  `sbirthday` datetime DEFAULT NULL COMMENT ‘学生出生年月‘,

  `class` varchar(20) DEFAULT NULL COMMENT ‘学生所在班级‘,

  PRIMARY KEY (`sno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

CREATE TABLE `course` (

  `cno` varchar(255) NOT NULL COMMENT ‘课程号‘,

  `cname` varchar(255) NOT NULL COMMENT ‘课程名称‘,

  `tno` varchar(255) NOT NULL COMMENT ‘教工编号‘,

  PRIMARY KEY (`cno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

CREATE TABLE `score` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `sno` varchar(20) NOT NULL COMMENT ‘学号‘,

  `cno` varchar(20) NOT NULL COMMENT ‘课程号‘,

  `degree` decimal(4,1) DEFAULT NULL COMMENT ‘成绩‘,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

 

 

CREATE TABLE `teacher` (

  `tno` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘教工编号‘,

  `tname` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘教工姓名‘,

  `tsex` varchar(20) NOT NULL DEFAULT ‘‘ COMMENT ‘教工性别‘,

  `tbirthday` datetime DEFAULT NULL COMMENT ‘教工出生年月‘,

  `prof` varchar(20) DEFAULT NULL COMMENT ‘职称‘,

  `depart` varchar(20) NOT NULL COMMENT ‘教工所在部门‘,

  PRIMARY KEY (`tno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

 

 

 

 

 

 

INSERT INTO student(sno,sname,ssex,sbirthday,class)VALUES

(‘101‘,‘李军‘,‘‘,‘1977-09-01 00:00:00‘,‘95033‘),

(‘103‘,‘陆君‘,‘‘,‘1977-09-01 00:00:00‘,‘95031‘),

(‘105‘,‘匡明‘,‘‘,‘1977-09-01 00:00:00‘,‘95031‘),

(‘107‘,‘王丽‘,‘‘,‘1977-09-01 00:00:00‘,‘95033‘),

(‘108‘,‘曾华‘,‘‘,‘1977-09-01 00:00:00‘,‘95033‘),

(‘109‘,‘王芳‘,‘‘,‘1977-09-01 00:00:00‘,‘95031‘);

 

INSERT INTO course(cno,cname,tno)VALUES

(‘3-105‘,‘计算机导论‘,‘825‘),

(‘3-245‘,‘操作系统‘,‘804‘),

(‘6-166‘,‘数学电路‘,‘856‘),

(‘9-888‘,‘高等数学‘,‘831‘);

 

INSERT INTO score(sno,cno,degree)VALUES

(‘103‘,‘3-245‘,‘86‘),

(‘105‘,‘3-245‘,‘75‘),

(‘109‘,‘3-245‘,‘68‘),

(‘103‘,‘3-105‘,‘92‘),

(‘105‘,‘3-105‘,‘88‘),

(‘109‘,‘3-105‘,‘76‘),

(‘101‘,‘3-105‘,‘64‘),

(‘107‘,‘3-105‘,‘91‘),

(‘108‘,‘3-105‘,‘78‘),

(‘101‘,‘6-166‘,‘85‘),

(‘107‘,‘6-166‘,‘79‘),

(‘108‘,‘6-166‘,‘81‘);

 

INSERT INTO teacher(tno,tname,tsex,tbirthday,prof,depart)VALUES

(‘804‘,‘诚‘,‘‘,‘1958-12-02 00:00:00‘,‘副教授‘,‘计算机系‘),

(‘825‘,‘王萍‘,‘‘,‘1972-05-05 00:00:00‘,‘助教‘,‘计算机系‘),

(‘831‘,‘刘冰‘,‘‘,‘1977-08-14 00:00:00‘,‘助教‘,‘电子工程系‘),

(‘856‘,‘张旭‘,‘‘,‘1969-03-12 00:00:00‘,‘讲师‘,‘电子工程系‘);

 

 

 

 

 

 

 

 

 

 

 

SELECT sname,ssex,class FROM student;-- 1)查询Student表中的所有记录的SnameSsexClass列。

SELECT DISTINCT depart FROM teacher;-- 2)查询教师所有的单位即不重复的Depart列。

SELECT student.* FROM student;-- 3)查询Student表的所有记录。

SELECT score.* FROM score WHERE degree BETWEEN 60 and 80;-- 4)查询Score表中成绩在6080之间的所有记录。

SELECT score.* FROM score WHERE degree IN(‘85‘,‘86‘,‘88‘);-- 5)查询Score表中成绩为858688的记录。

 

SELECT student.* FROM student WHERE class=‘95031‘ OR ssex=‘‘;-- 6)查询Student表中“95031”班或性别为“女”的同学记录。

SELECT student.* FROM student ORDER BY class DESC;-- 7)Class降序查询Student表的所有记录。

SELECT score.* FROM score ORDER BY cno ASC,degree DESC;-- 8)Cno升序、Degree降序查询Score表的所有记录。(多个排序使用“,”逗号隔开)

SELECT score.sno,score.cno FROM score ORDER BY degree DESC LIMIT 0,1;-- 9)查询Score表中的最高分的学生学号和课程号。(排序后limit

SELECT score.sno FROM score WHERE degree>70 AND degree<90;-- 10)查询分数大于70,小于90Sno列。

 

SELECT student.sname,score.cno,score.degree FROM student INNER JOIN score WHERE student.sno=score.sno;-- 11)查询所有学生的SnameCnoDegree列。(多表查询)

SELECT score.sno,course.cname,score.degree FROM score INNER JOIN course WHERE score.cno=course.cno;-- 12)查询所有学生的SnoCnameDegree列。

SELECT student.sname,course.cname,score.degree FROM student INNER JOIN course INNER JOIN score WHERE student.sno=score.sno AND score.cno=course.cno;-- 13)查询所有学生的SnameCnameDegree列。

SELECT score.degree FROM score WHERE score.degree>(SELECT score.degree FROM score WHERE sno=‘109‘ AND cno=‘3-105‘);-- 14)查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

SELECT student.sno,student.sname,student.sbirthday FROM student WHERE sbirthday=(SELECT student.sbirthday FROM student WHERE sno=‘108‘);-- 15)查询和学号为108的同学同年出生的所有学生的SnoSnameSbirthday列。

 

SELECT score.degree FROM score INNER JOIN course WHERE score.cno=course.cno AND course.cname=‘计算机导论‘;-- 16)查询考计算机导论的学生成绩

SELECT course.cname FROM course INNER JOIN teacher WHERE course.tno=teacher.tno AND teacher.tname=‘李诚‘;-- 17)查询李诚老师教的课程名称

SELECT teacher.depart FROM teacher INNER JOIN course WHERE teacher.tno=course.tno AND course.cname=‘高等数学‘;-- 18)教高等数学的老师是哪个系的

SELECT course.cno FROM course INNER JOIN score WHERE course.cno=score.cno AND score.degree>‘85‘;-- 19)查询成绩表中存在有85分以上成绩的课程Cno.

SELECT teacher.tname ‘姓名‘,teacher.tsex ‘性别‘,teacher.tbirthday ‘出生年月‘ FROM teacher UNION SELECT student.sname,student.ssex,student.sbirthday FROM student;-- 20)查询所有教师和同学的namesexbirthday.

 

SELECT teacher.tname ‘姓名‘,teacher.tsex ‘性别‘,teacher.tbirthday ‘出生年月‘ FROM teacher WHERE teacher.tsex=‘‘ UNION SELECT student.sname,student.ssex,student.sbirthday FROM student WHERE student.ssex=‘‘;-- 21)查询所有“女”教师和“女”同学的namesexbirthday.

SELECT teacher.tname,teacher.depart FROM teacher INNER JOIN course WHERE teacher.tno=course.tno;-- 22)查询所有任课教师的TnameDepart.

SELECT student.* FROM student WHERE student.sname NOT LIKE ‘%‘;-- 23)查询Student表中不姓“王”的同学记录。

SELECT student.* FROM student ORDER BY class DESC,sbirthday DESC;-- 24)以班号和年龄从大到小的顺序查询Student表中的全部记录。

SELECT teacher.tname,course.cname FROM teacher INNER JOIN course WHERE teacher.tno=course.tno AND teacher.tsex=‘‘;-- 25)查询“男”教师及其所上的课程。

SELECT student.sname FROM student WHERE student.ssex=(SELECT student.ssex FROM student WHERE student.sname=‘李军‘)AND sname<>‘李军‘;-- 26)查询和“李军”同性别的所有同学的Sname.

以上是关于数据库查询操作练习的主要内容,如果未能解决你的问题,请参考以下文章

mysql 数据操作 单表查询 having 过滤 练习

mysql 数据操作 单表查询 group by 练习

mysql 数据操作 单表查询 limit 练习

MySQL单表查询进阶

MySQL-注释-Navicat基本使用-复杂查询练习题-解题思路-pymysql操作数据库-SQL注入-05

零基础学MySQL-- 数据库最常用的操作查询基础篇 -- 单表查询