正在学习MySQL的你,需要练习题吗?

养成好习惯,点个赞再走

有问题,欢迎私信、评论,我看到都会回复的


从零开始学MySQL:MySQL下载安装到知识点的讲解

下面是MySQL基础知识的练习题,涵盖DDL、DML、DCL、列的约束、关键字、函数、条件筛选、排序、分组、嵌套、联合查询、分页查询…


小练习一


创建一个person表,共有四个列(字段),并向表中插入数据,

create table person(
	username varchar(20),
	address varchar(20),
	salary int(10),
	department varchar(20)
)character set utf8;
insert into person values('张三','武当',6000,'保洁部');
insert into person values('张无忌','魔教',6000,'事业部');
insert into person values('张三丰','武当',4000,'产业部');
insert into person values('周芷若','峨眉',8000,'事业部');
insert into person values('谢逊','魔教',5000,'产业部');
insert into person values('杨逍','魔教',7000,'事业部');

person表格:
在这里插入图片描述

  1. 假设person表中所有人每个月还有100元的奖金,查询出所有人的姓名、地址、年薪

在这里插入图片描述

  1. 假设person表中所有人每年还有1000元的奖金,查询出所有人的姓名、地址、年薪

在这里插入图片描述

  1. 请以下面的方式查询出所有信息:

姓名 居住地 月薪 年薪
张三 武当 6000 72000

在这里插入图片描述

  1. 请查询出所有部门为事业部的所有人信息

在这里插入图片描述

  1. 请查询出所有地址为魔教的所有人信息

在这里插入图片描述

  1. 请查询出所有工资为6000元的人的所有信息

在这里插入图片描述

  1. 请查询出所有工资在6000-8000之间的所有人的信息

在这里插入图片描述

  1. 请查询出所有工资是6000,7000,8000的所有人的信息

在这里插入图片描述

  1. 请查询出所有工资在6000-8000之间,或者姓张的所有人的基本信息

在这里插入图片描述

  1. 请查询出所有工资为6000,7000,8000,或者姓张,并且不叫张三丰的所有人的基本信息

在这里插入图片描述

  1. 请查询出所有工资为5000,或者叫张三的人的所有信息

在这里插入图片描述

  1. 请查询出所有魔教的人的信息,按照人名升序排列

在这里插入图片描述

  1. 请查询出所有工资高于5000的人员信息,按照address降序排列

在这里插入图片描述

  1. 请查询出所有人的信息,先按照salary降序排列,若一致,则按照人名升序排列

在这里插入图片描述

小练习二


先创建一个Users表格

create table users(
	员工编号 int(5),
	姓名 varchar(20),
	部门 varchar(20),
	生日 date,
	工资 int(10),
	职务 varchar(20),
	信息更新时间 date
)character set utf8;
insert into users values(1,'赵一一','C','1980-10-11',10000,'程序员',now());
insert into users values(2,'钱二二','C','1981-10-12',20000,'程序员',now());
insert into users values(3,'孙三三','C','1982-09-01',30000,'项目经理',now());
insert into users values(4,'李四四','java','1983-09-02',40000,'程序员',now());
insert into users values(5,'周五五','java','1984-11-01',50000,'程序员',now());
insert into users values(6,'吴六六','java','1985-01-01',60000,'程序员',now());
insert into users values(7,'郑七七','java','1986-11-02',70000,'项目经理',now());

users表:
在这里插入图片描述


  1. 请建立users表保存员工的相关信息(生日,信息更新时间 用date类型)

看上面

  1. 查询每个部门的最高工资,最低工资,平均工资

在这里插入图片描述

  1. 给所有项目经理工资涨10000

在这里插入图片描述

  1. 给工资低于30000的员工工资涨到30000

在这里插入图片描述

  1. 查询各部门的工资总额,平均工资,最高工资,最低工资

在这里插入图片描述

  1. c部门的项目经理离职,删除其信息

在这里插入图片描述

  1. c部门的程序员全部转入Java部门,更改信息

在这里插入图片描述

  1. 查询11月份过生日的员工

在这里插入图片描述

  1. 查询本月过生日的员工。设计一个通用的语句

在这里插入图片描述
(补充:我进行查询的时候是6月份)

  1. 查询整合部门后表中记录的所有记录,按照薪资从高到低排布

在这里插入图片描述

小练习三

先创建两个表格

emp员工表

create table emp(
empno int(10),	//编号
ename varchar(12),	//姓名
job varchar(20),	//职务
mgr int(10),	//上级
hiredare date,	//入职日期
sal int(10),	//月薪
comm int(10),	//佣金
depno int(5)	//部门
);

在emp表中添加数据:

insert into emp values(7369,'smith','clerk',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'allen','salesman',7698,'1981-2-20',1600,300,30);
insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250,500,30);
insert into emp values(7566,'jones','manager',7839,'198-4-2',2975,null,20);
insert into emp values(7654,'martin','salesman',7698,'1981-9-28',1250,1400,30);
insert into emp values(7698,'blake','manager',7839,'1981-5-1',2850,null,30);
insert into emp values(7782,'clark','manager',7839,'1981-6-9',2450,null,10);
insert into emp values(7788,'scott','analyst',7566,'1987-4-19',3000,null,20);
insert into emp values(7839,'king','president',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'turner','salesman',7698,'1981-9-8',1500,0,30);
insert into emp values(7876,'adams','clerk',7788,'1987-5-23',1100,null,20);
insert into emp values(7900,'james','clerk',7698,'1981-12-3',950,null,30);
insert into emp values(7902,'ford','analyst',7566,'1981-12-3',3000,null,20);
insert into emp values(7934,'miller','clerk',7782,'1982-1-23',1300,null,10);

emp表:
在这里插入图片描述

dept部门表

create table dept(
deptno int(5),	//部门编号
dname varchar(20),	//部门名称
loc varchar(20)	//坐落城市
);

添加数据

insert into dept values(10,'accounting','new york');
insert into dept values(20,'research','dallas');
insert into dept values(30,'sales','new chicago');
insert into dept values(40,'operations','boston');

dept表:
在这里插入图片描述

条件筛选题(emp表)

  1. 查询部门30中的雇员

在这里插入图片描述

  1. 查询所有办事员(clerk)的姓名、编号和部门

在这里插入图片描述

  1. 查询佣金(comm)高于薪金(sal)的雇员

在这里插入图片描述

  1. 查询哪些人没有佣金(comm)

在这里插入图片描述
在这里插入图片描述

  1. 查询佣金(comm)高于薪金(sal)60%的雇员

在这里插入图片描述

  1. 显示所有人的姓名,月薪,年薪(取别名)

在这里插入图片描述

  1. 找出部门10中的所有经理和部门20中的所有办事员的详细资料

在这里插入图片描述

  1. 找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员,但其薪金大于等于2000的所有雇员的资料

在这里插入图片描述
在这里插入图片描述

  1. 找出不收取佣金或收取佣金低于500的雇员

在这里插入图片描述

排序练习(emp表)

  1. 查询所有人员信息,按照工资升序排列

在这里插入图片描述

  1. 查询所有人员姓名,工资,佣金,按照工资降序排列,若工资相同则按照佣金升序排列

在这里插入图片描述

  1. 查询工资大于2000的所有员工,按照工资薪金降序排列

在这里插入图片描述

  1. 查询所有人的信息,按照姓名排序

在这里插入图片描述

  1. 查询工资在2000-3000之间的员工信息,按照雇佣日期升序排列

在这里插入图片描述

函数练习(emp表)

  1. 显示正好为6个字符的雇员姓名

在这里插入图片描述

  1. 显示所有雇员的姓名的前三个字符

在这里插入图片描述

  1. 显示所有雇员的姓名,用A代替‘a’

在这里插入图片描述

  1. 显示不带有‘r’的雇员姓名

在这里插入图片描述

在这里插入图片描述

  1. 找出早于35年之前受雇的雇员

在这里插入图片描述
(补充:查询时是2019年)

  1. 显示所有雇员的姓名以及满10年服务年限的日期

在这里插入图片描述

分组函数练习(emp表)

  1. 显示每种工作的人数

在这里插入图片描述

  1. 显示工作人数大于3的工作的平均工资

在这里插入图片描述

  1. 显示出经理有几种不同的工资

在这里插入图片描述

在这里插入图片描述

  1. 显示出30号部门有几种不同的工作

在这里插入图片描述

  1. 显示出emp表数据中不同月份雇佣的人数

在这里插入图片描述

  1. 显示出每个管理者手下带了多少个员工

在这里插入图片描述

  1. 显示收取佣金的雇员的不同工作

在这里插入图片描述

嵌套查询练习(emp表)

  1. 查询平均工资大于2900的部门中的所有员工

在这里插入图片描述

  1. 查询工资比allen多的所有员工

在这里插入图片描述

  1. 查询薪金高于公司平均薪金的所有员工姓名,部门编号,具体薪资

在这里插入图片描述

  1. 列出与scott从事相同工作的所有员工信息

在这里插入图片描述

  1. 查询薪金大于部门30中的员工最高薪金的所有员工的姓名、薪金和部门编号

在这里插入图片描述

  1. 查询在部门sales工作的员工的姓名

在这里插入图片描述

小练习四


先创建三张表格

country表(存储国家信息):

create table country(
cid int(5),
cname varchar(20)
)character set utf8;

alter table country add primary key(cid);

insert into country values(1,'中国');
insert into country values(2,'美国');
insert into country values(3,'日本');

在这里插入图片描述

area表(存储地区信息):

create table area(
aid int(5),
aname varchar(20),
cid int(5)
)character set utf8;

alter table area add primary key(aid);
alter table area add constraint fk_area_country foreign key(cid) references country(cid);

insert into area values(1,'北方',1);
insert into area values(2,'南方',1);
insert into area values(3,'西部',2);
insert into area values(4,'东部',2);
insert into area values(5,'北海道',3);
insert into area values(6,'四国',3);

在这里插入图片描述
city表(存储城市信息):

create table city(
cityid int(5),
cityname varchar(20),
citysize int(10),
aid int(5)
)character set utf8;

alter table city add primary key(cityid);
alter table city add constraint fk_city_area foreign key(aid) references area(aid);

insert into city values(1,'哈尔滨',750,1);
insert into city values(2,'大连',50,1);
insert into city values(3,'北京',2000,1);
insert into city values(4,'上海',1500,2);
insert into city values(5,'杭州',800,2);
insert into city values(6,'洛杉矶',1200,3);
insert into city values(7,'休斯顿',750,3);
insert into city values(8,'纽约',1000,4);
insert into city values(9,'底特律',500,4);
insert into city values(10,'东京',1500,5);
insert into city values(11,'名古屋',50,5);
insert into city values(12,'大阪',20,6);

在这里插入图片描述


  1. 查询人口数在1000到2000之间的城市所属在哪个地区

涉及到两张表city和area

select * 
from city inner join area 
on city.aid = area.aid  
where city.citysize between 1000 and 2000;

在这里插入图片描述

  1. 查询每个国家的城市个数,按照城市个数升序排列

涉及到三张表country,area,city

select cname,count(*) 
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
group by cname 
order by count(*);

在这里插入图片描述

  1. 查询各地区城市人口平均数,按照人口平均数降序排列

涉及到两张表area和city

select aname,avg(citysize) 
from area inner join city on area.aid = city.aid 
group by aname 
order  by avg(citysize) desc;

在这里插入图片描述
4. 查询哈尔滨所在的国家的名字

涉及到三张表

select cityname,cname  
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where cityname = '哈尔滨';

在这里插入图片描述
5. 查询各地区名字和人口总数

涉及到两张表area和city

select aname,sum(citysize)
from area inner join city on area.aid = city.aid 
group by aname;

在这里插入图片描述
6. 查询美国有哪些城市,列出城市名

涉及到三张表

select cityname 
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where cname = '美国';

在这里插入图片描述
7. 查询人口最多的城市在哪个国家

涉及到三张表

select cityname,cname  
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where citysize = (select max(citysize) from city);

在这里插入图片描述
8. 查询每个国家的人口总数

涉及到三张表

select cname,sum(citysize)   
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
group by cname;

在这里插入图片描述
9. 查询城市人口总数为1500万的国家名字

涉及到三张表

select cname,cityname,citysize    
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where citysize = 1500;

在这里插入图片描述

  1. 查询各地区总人数,按照人口总数降序排列

涉及到两张表area和city

select aname,sum(citysize) 
from area inner join city on area.aid = city.aid 
group by aname 
order by sum(citysize) desc;

在这里插入图片描述

  1. 查询人口总数超过5000的国家名称

设计三张表

select cname,sum(citysize)    
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
group by cname 
having sum(citysize) > 5000;

(注意:这一题,要先分组,再条件筛选,所以用having关键字)
在这里插入图片描述
13. 查询人口数大于杭州的城市都有哪些

只涉及到city表

select cityname 
from city 
where citysize > (select citysize from city where cityname = '杭州');

在这里插入图片描述

MySQL综合练习


题目描述

  1. 设有一个数据库,包括四个表:
  • 学生表(student),
  • 课程表(course),
  • 成绩表(score),
  • 教师信息表(teacher).
  1. 表结构如表1-1的表(一)~表(四)所示.
  2. 表内数据如表1-2的表(一)~表(四)所示.
  3. 用SQL语句创建四个表并完成相关题目.

表1-1数据库的表结构
表(一)student

属性名 数据类型 含 义
sno int 学号(主键)
sname varchar 学生姓名
ssex varchar 学生性别
sbirthday date 学生出生年月
classid varchar 学生所在班级

表(二)course

属性名 数据类型 含 义
cno varchar 课程号(主键)
cname varchar 课程名称
tno int 教师编号(外键)

表(三)score

属性名 数据类型 含 义
sno int 学号(外键)
cno varchar 课程号(外键)
sdegree float 成绩

表(四) teacher

属性名 数据类型 含 义
tno int 编号(主键)
tname varchar 教师姓名
tsex varchar 教师性别
tbirthday date 教师出生年月
professional varchar 职称
department varchar 教师所在部门

表1-2数据库中的数据

表(一)student

sno sname ssex sbirthday classid
108 曾华 1996-09-01 95033
105 匡明 1995-10-02 95031
107 王丽 1996-01-23 95033
101 李军 1996-02-20 95033
109 王芳 1995-02-10 95031
103 陆君 1994-06-03 95031

表(二)course

cno cname tno
3-105 计算机导论 825
3-245 操作系统 804
6-166 数字电路 856
9-888 高等数学 831

表(三)score

sno cno sdegree
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

表(四) teacher

tno tname tsex tbirthday prof depart
804 李诚 1978-12-02 副教授 计算机系
856 张旭 1979-03-12 讲师 电子工程系
825 王萍 1982-05-05 助教 计算机系
831 刘冰 1984-08-14 助教 电子工程系


创建数据库和四张表

先创建数据库:julyone
并且设置这个数据库的编码字符集为utf-8
在这里插入图片描述
在这里插入图片描述

student表:

create table student(
	sno  int(10),
	sname varchar(10),
	ssex varchar(10),
	sbirthday date,
	classid varchar(10)
);

alter table student add primary key(sno);

在这里插入图片描述
teacher表:

create table teacher(
	tno int(10),
	tname varchar(12),
	tsex varchar(10),
	tbirthday date,
	professional varchar(20),
	department varchar(20)
);

alter table teacher add primary key(tno);

在这里插入图片描述

course表:

create table course(
	cno varchar(10),
	cname varchar(20),
	tno int(10)
);

alter table course add primary key(cno);
alter table course add constraint fk_course_teacher foreign key(tno) references teacher(tno); 

在这里插入图片描述
score表:

create table score(
	sno int(10),
	cno varchar(10),
	sdegree float(5)
);

alter table score add constraint fk_score_student foreign key(sno) references student(sno);
alter table score add constraint fk_score_course foreign key(cno) references course(cno);

在这里插入图片描述



向表中插入数据

然后向表中插入数据

insert into student (sno,sname,ssex,sbirthday,classid) 
values(108,'曾华','男','1996-9-1','95033'),(105,'匡明','男','1995-10-2','95031'),
(107,'王丽','女','1996-1-23','95033'),(101,'李军','男','1996-2-20','95033'),
(109,'王芳','女','1995-2-10','95031'),(103,'陆君','男','1994-6-3','95031');


insert into teacher(tno,tname,tsex,tbirthday,professional,department) 
values(804,'李诚','男','1978-12-2','副教授','计算机系'),
(856,'张旭','男','1979-3-12','讲师','电子工程系'),
(825,'王萍','女','1982-5-5','助教','计算机系'),
(831,'刘冰','女','1984-8-14','助教','电子工程系');


insert into course(cno,cname,tno) 
values('3-105','计算机导论',825),('3-245','操作系统',804),
('6-166','数字电路',856),('9-888','高等数学',831);


insert into score(sno,cno,sdegree) 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);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



SQL题目

– 1.查询所有学生的姓名,性别及班级编号
在这里插入图片描述

– 2.查询教师所有的部门名称,(即不重复的DEPART列)
在这里插入图片描述

– 3.查询STUDENT表的所有记录
在这里插入图片描述
– 4.查询SCORE表中成绩在60到80之间的所有记录
在这里插入图片描述
– 5.查询SCORE表中成绩为85,86或88的记录
在这里插入图片描述
– 6.查询STUDENT表中班级编号为"95031"或性别为"女"的同学记录
在这里插入图片描述

– 7.查询STUDENT表的所有记录,以班级编号降序排列
在这里插入图片描述

– 8.查询SCORE表的所有记录,先按照CNO升序排列,若相同则按照SDEGREE降序排列

在这里插入图片描述
– 9.查询班级编号为"95031"班级的学生人数

在这里插入图片描述
– 10.查询SCORE表中的最高分的学生学号和课程号
在这里插入图片描述
– 11.查询编号为"3-105"的课程平均分
在这里插入图片描述

– 12.查询SCORE表中至少有5名学生选修的并以3开头的课程的平均分数
在这里插入图片描述
– 13.查询每科成绩均在70到90之间的学生编号
在这里插入图片描述

– 14.查询所有学生的姓名,所选课程编号和成绩
在这里插入图片描述

– 15.查询所有学生的学号,所选课程名和成绩
在这里插入图片描述

– 16.查询所有学生的姓名,所选课程名和成绩
在这里插入图片描述

– 17.查询"95033"班同学所选每个课程的平均分
在这里插入图片描述

– 18.假设使用如下命令建立了一个GRADE表:
CREATE TABLE GRADE(
LOW INT(3),
UPP INT(3),
RANK VARCHAR(1)
);
INSERT INTO GRADE VALUES(90,100,‘A’);
INSERT INTO GRADE VALUES(80,89,‘B’);
INSERT INTO GRADE VALUES(70,79,‘C’);
INSERT INTO GRADE VALUES(60,69,‘D’);
INSERT INTO GRADE VALUES(0,59,‘E’);
– 现查询所有同学的学号,所选课程号和等级(RANK列)
在这里插入图片描述
– 19.查询"3-105"课程的成绩高于学号为109同学这科成绩的所有同学记录
在这里插入图片描述
– 20.查询1995年之后出生的所有学生所选学的课程名及成绩
在这里插入图片描述
– 21.查询与学号108同学同年出生的所有学生的学号,姓名和生日
在这里插入图片描述
– 22.查询"张旭"教师任课的学生成绩
在这里插入图片描述
– 23.查询选修某课程的同学人数多于5人的教师姓名
在这里插入图片描述
– 24.查询"95033"班和"95031"班全体学生的记录
在这里插入图片描述
– 25.查询存在有85分以上成绩的课程编号
在这里插入图片描述
– 26.查询出"计算机系"教师所教课程每一科成绩的平均分
在这里插入图片描述
– 27.查询"计算机系"与"电子工程系"不同职称的教师的姓名和职称

(这个题目的逻辑有点复杂啊)
在这里插入图片描述
– 28.查询所有教师和同学的姓名,性别和生日
在这里插入图片描述
– 29.查询所有"女"教师和"女"同学的姓名,性别和生日
在这里插入图片描述
– 30.查询所有任课教师的姓名和部门
在这里插入图片描述
– 31.查询所有未讲课的教师的姓名和部门
在这里插入图片描述
– 32.查询STUDENT表中不姓"王"的同学记录
在这里插入图片描述
– 33.查询STUDENT表中每个学生的姓名和年龄
在这里插入图片描述
– 34.查询STUDENT表中最大和最小的生日值
在这里插入图片描述
– 35.查询STUDENT表中的全部记录,按照班级编号降序排列,班级编号若相同则按照生日降序排列
在这里插入图片描述
– 36.查询所有"男"教师及其所上的课程名称
在这里插入图片描述
– 37.查询和"李军"同性别并同班的同学信息
在这里插入图片描述
– 38.查询所有选修"计算机导论"课程的"男"同学的成绩表
在这里插入图片描述
– 39.查询出同时选择"3-245"和"3-105"的课程的学生信息
在这里插入图片描述
– 40.查询既没有选修"3-245"课程也没有选修"3-105"课程的学生信息

注意:这个题目超级坑!!!答案是没有查询结果,empty

我很容易的就进坑了:
在这里插入图片描述
因为每个数据都是单独的!
score表中的这三条记录满足上述SQL语句的查询条件:
在这里插入图片描述
但是101,107,108都选修了3-245或者-105的课程,于是问题就这么产生了。

然后,我思考良久,未果,打游戏。

不过硬要答案的话:
凑合着看吧(来一个巧合性的SQL语句)
在这里插入图片描述
最终智慧:
在这里插入图片描述
在这里插入图片描述

发布了156 篇原创文章 · 获赞 434 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/Zhangguohao666/article/details/105112143
今日推荐