MySQL-查询练习(题,答案)

1.练习一

1. 查询所有记录的e_no、e_name和e_salary字段值

2. 查询dept_no等于10和20的所有记录

3. 查询工资范围在800~2500之间的员工信息

4. 查询部门编号为20的部门中的员工信息

5. 查询每个部门最高工资的员工信息

6. 查询员工BLAKE所在部门和部门所在地

7. 查询所有员工的部门和部门信息

8. 计算每个部门各有多少名员工

9. 计算不同类型职工的总工资数

10. 计算不同部门的平均工资

11. 查询工资低于1500的员工信息

12. 将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列

13. 查询员工姓名以字母‘A’或‘S’开头的员工的信息

14. 查询到目前为止工龄大于等于18年的员工信息

16. 使用LIMIT查询从第3条记录开始到第6条记录的结果

17. 查询销售人员(SALSEMAN)的最低工资

18. 查询名字以字母N或者S结尾的记录

19. 查询在BeiJing工作的员工的姓名和职务

20. 使用左连接方式查询employee和dept表

21. 查询所有2001~2005年入职的员工的信息,查询部门编号为20和30的员工信息并使用UNION合并 两个查询结果

22. 使用LIKE查询员工姓名中包含字母a的记录

23. 使用REGEXP查询员工姓名中包含T、C或者M这3个字母中任意1个的记录

MySQL-查询练习(题,答案)_第1张图片

 MySQL-查询练习(题,答案)_第2张图片

1.1 建表

create table employee(
	eno int primary key auto_increment,
	ename varchar(50) not null,
	egender char(2),
	deptno int not null,
	ejob varchar(50) not null,
	esalary int not null,
	hiredate date not null 
);
alter table employee auto_increment=1001;
alter table employee add constraint fk_dept_dno foreign key employee(deptno) references dept(dno);
create table dept(
	dno int primary key auto_increment,
	dname varchar(50) not null,
	dlocal varchar(100)
);

1.2解析

--1. 查询所有记录的e_no、e_name和e_salary字段值
select eno,ename,esalary from employee;
--2. 查询dept_no等于10和20的所有记录
select * from dept where dno in (10,20);
--3. 查询工资范围在800~2500之间的员工信息
select * from employee where esalary between 800 and 2500;
--4. 查询部门编号为20的部门中的员工信息
select * from employee where deptno=20;
--5. 查询每个部门最高工资的员工信息
select *,(select max(esalary) from employee e where e.deptno=d.dno) salsry from dept d ;
--6. 查询员工BLAKE所在部门和部门所在地
select e.ename,d.dname,d.dlocal from dept d inner join employee e on e.deptno=d.dno where e.ename='blake';
--7. 查询所有员工的部门和部门信息
select e.*,d.dname,d.dlocal from dept d inner join employee e on e.deptno=d.dno;
--8. 计算每个部门各有多少名员工
select deptno,count(1) from employee group by deptno;
--9. 计算不同类型职工的总工资数
select ejob,sum(esalary) from employee group by ejob;
--10. 计算不同部门的平均工资
select ejob,avg(esalary) from employee group by ejob;
--11. 查询工资低于1500的员工信息
select * from employee where esalary<1500;
--12. 将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列
select * from employee order by deptno desc,esalary;
--13. 查询员工姓名以字母‘A’或‘S’开头的员工的信息
select * from employee where ename like 'a%' or ename like 's%';
--14. 查询到目前为止工龄大于等于18年的员工信息
select * from employee where hiredate<'2004-04-21';
--16. 使用LIMIT查询从第3条记录开始到第6条记录的结果
select * from employee limit 3,3;
--17. 查询销售人员(SALSEMAN)的最低工资
select eno,ename,ejob,min(esalary) from employee where ejob='salesman';
--19. 查询在BeiJing工作的员工的姓名和职务
select ename,ejob,'北京'dlocal from dept d inner join employee e on e.deptno=d.dno where d.dlocal='北京';
--20. 使用左连接方式查询employee和dept表
select e.*,d.* from dept d left join employee e on e.deptno=d.dno;
--21. 查询所有2001~2005年入职的员工的信息,查询部门编号为20和30的员工信息并使用UNION合并
两个查询结果
select * from employee where hirdate between '2001-01-01' and '2005-12-31'
union
select * from employee where deptno in(20,30);
--22. 使用LIKE查询员工姓名中包含字母a的记录
select * from employee where ename like '%a%';
--23. 使用REGEXP查询员工姓名中包含T、C或者M这3个字母中任意1个的记录
select * from employee where ename like  '%t%'or'%c%'or'%m%';

2.练习二

1、 查询全部一年级的学生信息。

2、 查询全部二年级的学生的姓名和电话。

3、 查询全部一年级女同学的信息。

4、 查询课时超过60的科目信息。

5、 查询二年级的科目名称

6、 查询二年级男同学的姓名和住址。

7、 查询无电子邮件的学生姓名和年级信息。

8、 查询出生日期在1992年之后的男学生姓名和年级信息。

9、 参加了日期为2015年7月3日的“计算机基本原理”科目考试的成绩信息

10、 按照出生日期查询一年级的学生信息。

11、 按成绩由高到低的次序查询参加编号为1的科目考试信息。

12、 查询2015年7月1日参加“MySQL深入”考试的前2名学员成绩信息。

13、 查询课时最多的科目名称及课时。

14、 查询年龄最小的学生所在的年级及姓名。

15、 查询考试的最低分出现在哪个科目

16、 查询学号为“s1001”的学生参加过的所有考试信息,并按照时间前后次序显示。

18、 查询1月份过生日的学生信息

19、 查询今天过生日的学生姓名及所在年级。

20、 新生入学,为其分配一个Email地址,规则如下:S1+当前日期 [email protected]

21、 查询住址为“雁塔区”的学生姓名、电话、住址

22、 查询名称中含有“计算机”字样科目名称、学时及所属年级,并按年级由低到高显示。

23、 查询电话中含有以“130”开头的学生姓名,住址和电话。

24、 查询姓“赵”的学号、姓名和住址。

25、 统计一年级女生的总人数。

26、 查询李四总成绩

27、 学号为s1003的学生所有课总成绩

28、 学号为s1003的学生考试的平均分。

29、 查询一年级的科目“Mysql”的最高分、最低分、平均分。

30、 查询每个年级的总学时数,并按照升序排列。

31、 查询每个参加考试的学员的平均分。(Group by 学号)

32、 查询每门课程的平均分,并按照降序排列。(group by 课程)

33、 查询每个学生参加的所有考试的总分,并按照降序排列。(group by 学号)

34、 查询一年级的平均年龄。

35、 查询每个年级西安地区的学生人数。

36、 查询参加考试的学生中,平均分及格的学生记录,并按照平均成绩降序排列

37、 查询参加考试至少一次考试不及格的学生学号、姓名、不及格次数。

38、 查询学生姓名、所属年级名称及联系电话。

39、 查询年级编号为1的科目名称、年级名称及学时。

40、 查询参加科目编号为1的考试的学生姓名、分数、考试日期。

41、 查询学号为s1001的学生参加的考试科目名称、分数、考试日期。

42、 查询所有科目的参考信息(某些科目可能还没有被考试过)

43、 查询没有被考过的科目信息。

MySQL-查询练习(题,答案)_第3张图片

 MySQL-查询练习(题,答案)_第4张图片

MySQL-查询练习(题,答案)_第5张图片

 MySQL-查询练习(题,答案)_第6张图片

2.1建表

CREATE TABLE `grade`  (
  `gradeid` int(11) NOT NULL,
  `gradename` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`gradeid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of grade
-- ----------------------------
INSERT INTO `grade` VALUES (1, '一年级');
INSERT INTO `grade` VALUES (2, '二年级');
INSERT INTO `grade` VALUES (3, '三年级');
INSERT INTO `grade` VALUES (4, '四年级');

-- ----------------------------
-- Table structure for mark
-- ----------------------------
CREATE TABLE `mark`  (
  `markid` int(11) NOT NULL,
  `studentno` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `subjectid` int(11) NULL DEFAULT NULL,
  `studentscore` int(11) NULL DEFAULT NULL,
  `examdate` date NULL DEFAULT NULL,
  PRIMARY KEY (`markid`) USING BTREE,
  INDEX `fk_mark_student`(`studentno`) USING BTREE,
  INDEX `fk_mark_subjects`(`subjectid`) USING BTREE,
  CONSTRAINT `fk_mark_student` FOREIGN KEY (`studentno`) REFERENCES `student` (`studentno`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `fk_mark_subjects` FOREIGN KEY (`subjectid`) REFERENCES `subjects` (`subjectid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of mark
-- ----------------------------
INSERT INTO `mark` VALUES (1, 's1001', 1, 80, '2015-07-01');
INSERT INTO `mark` VALUES (2, 's1002', 1, 40, '2015-07-01');
INSERT INTO `mark` VALUES (3, 's1001', 2, 15, '2015-07-01');
INSERT INTO `mark` VALUES (4, 's1002', 2, 20, '2015-07-01');
INSERT INTO `mark` VALUES (5, 's1003', 1, 60, '2015-07-01');
INSERT INTO `mark` VALUES (6, 's1001', 3, 82, '2015-07-03');
INSERT INTO `mark` VALUES (7, 's1001', 4, 90, '2015-07-03');
INSERT INTO `mark` VALUES (8, 's1001', 5, 75, '2015-07-01');
INSERT INTO `mark` VALUES (9, 's1002', 3, 65, '2015-07-03');
INSERT INTO `mark` VALUES (10, 's1002', 4, 35, '2015-07-03');
INSERT INTO `mark` VALUES (11, 's1002', 5, 87, '2015-07-01');
INSERT INTO `mark` VALUES (12, 's1003', 2, 65, '2015-07-01');
INSERT INTO `mark` VALUES (13, 's1003', 3, 45, '2015-07-03');
INSERT INTO `mark` VALUES (14, 's1003', 4, 92, '2015-07-03');
INSERT INTO `mark` VALUES (15, 's1003', 5, 55, '2015-07-01');
INSERT INTO `mark` VALUES (16, 's1004', 1, 65, '2015-07-01');
INSERT INTO `mark` VALUES (17, 's1004', 2, 0, '2015-07-01');
INSERT INTO `mark` VALUES (18, 's1004', 3, 60, '2015-10-10');


-- ----------------------------
-- Table structure for student
-- ----------------------------
CREATE TABLE `student`  (
  `studentno` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `studentname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `loginpassword` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `sex` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `born` date NULL DEFAULT NULL,
  `email` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `gradeid` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`studentno`) USING BTREE,
  UNIQUE INDEX `phone`(`phone`) USING BTREE,
  INDEX `fk_student_grade`(`gradeid`) USING BTREE,
  CONSTRAINT `fk_student_grade` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('s1001', '张三', 'zhangsan', '男', '13022225555', '宿舍', '1994-01-01', '', 1);
INSERT INTO `student` VALUES ('s1002', '李四', 'l1s1', '男', '13266669999', '宿舍', '1991-07-07', NULL, 1);
INSERT INTO `student` VALUES ('s1003', '张丽', '123456', '女', '13099999999', '宿舍', '1992-05-06', NULL, 1);
INSERT INTO `student` VALUES ('s1004', '王磊', '123456', '男', '15066668888', '西安', '1991-06-07', NULL, 1);
INSERT INTO `student` VALUES ('s1005', '张丹', 'zhangsan', '女', '15036998888', '宿舍', '1992-06-07', NULL, 1);
INSERT INTO `student` VALUES ('s1006', '李亮', '123456', '男', '15022226669', '西安市雁塔区', '1993-12-01', '[email protected]', 1);
INSERT INTO `student` VALUES ('s1007', '李丹', '123456', '女', '15036699965', '宿舍', '1992-11-11', '20161201141947@126com', 1);
INSERT INTO `student` VALUES ('s1008', '王亮', '123456', '男', '15022223333', '西安科技二路', '1993-12-02', NULL, 2);
INSERT INTO `student` VALUES ('s1009', '赵龙', '123456', '男', '13022229999', '西安科技二路', '1992-06-07', NULL, 2);
INSERT INTO `student` VALUES ('s1010', '徐丹', '123456', '女', '15899996666', '宿舍', '1993-05-06', NULL, 2);

-- ----------------------------
-- Table structure for subjects
-- ----------------------------
CREATE TABLE `subjects`  (
  `subjectid` int(11) NOT NULL,
  `subjectname` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `classhour` int(11) NULL DEFAULT NULL,
  `gradeid` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`subjectid`) USING BTREE,
  INDEX `fk_subjects_grade`(`gradeid`) USING BTREE,
  CONSTRAINT `fk_subjects_grade` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of subjects
-- ----------------------------
INSERT INTO `subjects` VALUES (1, 'MySQL深入', 65, 1);
INSERT INTO `subjects` VALUES (2, 'java基础', 60, 2);
INSERT INTO `subjects` VALUES (3, '计算机基本原理', 70, 1);
INSERT INTO `subjects` VALUES (4, '毛邓概论', 61, 1);
INSERT INTO `subjects` VALUES (5, '英语', 55, 1);
INSERT INTO `subjects` VALUES (6, 'jsp', 40, 2);
INSERT INTO `subjects` VALUES (7, '数据结构', 60, 2);
INSERT INTO `subjects` VALUES (8, 'oracle', 65, 2);

SET FOREIGN_KEY_CHECKS = 1;

2.2解析

--1.查询一年级学生的信息
select * from Student where gradeid in (select gradeid from grade where gradename='一年级');
--2.查询全部二年级的学生的姓名和电话
select studentname sname,phone from student where gradeid in (select gradeid from grade where gradename='二年级');
--3.查询全部一年级女同学的信息
select * from student where gradeid in (select gradeid from grade where gradename='一年级') and sex='女';
--4.查询课时超过六十的科目信息
select * from subjects where classhour > 60;
--5.查询二年级的科目名称
select * from subjects where gradeid = (select gradeid from grade where gradename='二年级');
--6. 查询二年级男同学的姓名和住址。
select studentname sname,sex,address,'二年级' gname from student inner join grade on student.gradeid=grade.gradeid where grade.gradename='二年级' and student.sex='男';
--7.查询无电子邮件的学生姓名和年级信息。
select s.*,g.gradename from student s inner join grade g on s.gradeid=g.gradeid where s.email='' or s.email is null;
--8查询出生日期在1992年之后的男学生姓名和年级信息。
select s.studentname,g.gradename from student s inner join grade g on s.gradeid=g.gradeid where sex='男' and born > 1992;
--9 参加了日期为2015年7月3日的“计算机基本原理”科目考试的成绩信息
select * from mark where subjectid = (select subjectid from subjects where subjectname='计算机基本原理') and examdate='2015-07-03';
--10.按照出生日期查询一年级的学生信息。
select * from student order by born;
--11.按成绩由高到低的次序查询参加编号为1的科目考试信息。
select * from mark where subjectid = 1 order by studentscore;
--12.查询2015年7月1日参加“MySQL深入”考试的前2名学员成绩信息。
select m.* from mark m inner join subjects s on m.subjectid=s.subjectid where m.examdate='2015-07-01' and s.subjectname='MySQL深入' order by studentscore desc limit 2;
--13.查询课时最多的科目名称及课时。
select subjectname,classhour from subjects where classhour=(select max(classhour) from subjects);
--14.查询年龄最小的学生所在的年级及姓名。
select studentname,gradename,born from  student s inner join grade g on s.gradeid=g.gradeid where born=(select max(born) from student);
--15.查询考试的最低分出现在哪个科目
select subjectname from subjects where subjectid=(select subjectid from mark where studentscore=(select min(studentscore) from mark)) ;
--16.查询学号为“s1001”的学生参加过的所有考试信息,并按照时间前后次序显示。
select * from mark where studentno='s1001' order by examdate ; 
--18.查询6月份过生日的学生信息
select * from student where born like '_____06___'
--19.查询今天过生日的学生姓名及所在年级。
update student set born='2022-04-19'  where studentname='王磊';
select * from student where born='2022-04-19';
--20.新生入学,为其分配一个Email地址,规则如下:S1+当前日期 [email protected]
insert into student (studentname,email) values ('富贵','[email protected]');
--21.查询住址为“雁塔区”的学生姓名、电话、住址
select studentname,phone,address from student where address like '%雁塔区%';
--22.查询名称中含有“计算机”字样科目名称、学时及所属年级,并按年级由低到高显示。
select subjectname,gradename,classhour from subjects inner join grade on subjects.gradeid=grade.gradeid where subjectname like '%计算机%' order by grade.gradeid desc;
--23.查询电话中含有以“130”开头的学生姓名,住址和电话。
select studentname,address,phone from student where phone like '130%';
--24.查询姓“赵”的学号、姓名和住址。
select studentno,studentname,address from student where studentname like '赵%';
--25.统计一年级女生的总人数。
select '一年级' gname,'女' sex,count(1) num from student s inner join grade g on s.gradeid=g.gradeid where gradename='一年级' and  sex='女';
--26.查询李四总成绩
select '李四' sname,sum(studentscore) sorce from mark where studentno=(select studentno from student where studentname like'李四'); 
--27.学号为s1003的学生所有课总成绩
select 's1003' sno,(select studentname from student where studentno='s1003') sname,sum(studentscore) score from mark where studentno='s1003';
--28.学号为s1003的学生考试的平均分。
select 's1003' sno,(select studentname from student where studentno='s1003') sname,avg(studentscore) score from mark where studentno='s1003';
--29.查询一年级的科目“Mysql”的最高分、最低分、平均分。
select min(studentscore),max(studentscore),avg(studentscore) from mark m inner join subjects s on m.subjectid=s.subjectid inner join grade g on s.gradeid=g.gradeid where gradename='一年级' and subjectname='MySQL深入';   
--30.查询每个年级的总学时数,并按照升序排列。
select gradename,sum(classhour) from subjects s inner join grade g on s.gradeid=g.gradeid group by s.gradeid order by sum(classhour);
--31.查询每个参加考试的学员的平均分。(Group by 学号)
select studentno,avg(studentscore) from mark group by studentno;
--32.查询每门课程的平均分,并按照降序排列。(group by 课程)
select subjectid,avg(studentscore) from mark group by subjectid order by avg(studentscore) desc;
--33.查询每个学生参加的所有考试的总分,并按照降序排列。(group by 学号)
select studentno,sum(studentscore) from mark group by studentno order by sum(studentscore)  desc;
--34.查询一年级的平均年龄。
select gradename,avg(born) from student s inner join grade g on s.gradeid=g.gradeid group by gradename;
--35.查询每个年级西安地区的学生人数。
select gradename,count(1) from student s inner join grade g on s.gradeid=g.gradeid group by address having address like '%西安%';
--36.查询参加考试的学生中,平均分及格的学生记录,并按照平均成绩降序排列
select studentno,avg(studentscore) from mark group by studentno having avg(studentscore>60) order by avg(studentscore) desc; 
--37.查询参加考试至少一次考试不及格的学生学号、姓名、不及格次数。
select studentno,(select studentname from student where student.studentno=mark.studentno)sname,count(1) num from mark group by studentno having avg(studentscore>60)  and count(1)>1;
--38.查询学生姓名、所属年级名称及联系电话。
select studentname,gradename,phone from student s inner join grade g on s.gradeid=g.gradeid;
--39.查询年级编号为1的科目名称、年级名称及学时。
select subjectname,gradename,classhour from subjects s inner join grade g on s.gradeid=g.gradeid where g.gradeid=1;
--40.查询参加科目编号为1的考试的学生姓名、分数、考试日期。
select (select studentname from student where student.studentno=mark.studentno)sname,studentscore,examdate from mark where subjectid=1;
--41.查询学号为s1001的学生参加的考试科目名称、分数、考试日期。
select  (select subjectname from subjects where subjects.subjectid=mark.subjectid)subname,studentscore,examdate from mark where studentno='s1001';
--42.查询所有科目的参考信息(某些科目可能还没有被考试过)
select * from grade g inner join subjects s on g.gradeid=s.gradeid inner join mark m on s.subjectid=m.subjectid;
--43.查询没有被考过的科目信息。
select * from grade g inner join subjects s on g.gradeid=s.gradeid inner join mark m on s.subjectid=m.subjectid where studentscore<60 ;

你可能感兴趣的:(数据仓库)