养成好习惯,点个赞再走
有问题,欢迎私信、评论,我看到都会回复的
下面是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表格:
- 假设person表中所有人每个月还有100元的奖金,查询出所有人的姓名、地址、年薪
- 假设person表中所有人每年还有1000元的奖金,查询出所有人的姓名、地址、年薪
- 请以下面的方式查询出所有信息:
姓名 居住地 月薪 年薪
张三 武当 6000 72000
- 请查询出所有部门为事业部的所有人信息
- 请查询出所有地址为魔教的所有人信息
- 请查询出所有工资为6000元的人的所有信息
- 请查询出所有工资在6000-8000之间的所有人的信息
- 请查询出所有工资是6000,7000,8000的所有人的信息
- 请查询出所有工资在6000-8000之间,或者姓张的所有人的基本信息
- 请查询出所有工资为6000,7000,8000,或者姓张,并且不叫张三丰的所有人的基本信息
- 请查询出所有工资为5000,或者叫张三的人的所有信息
- 请查询出所有魔教的人的信息,按照人名升序排列
- 请查询出所有工资高于5000的人员信息,按照address降序排列
- 请查询出所有人的信息,先按照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表:
- 请建立users表保存员工的相关信息(生日,信息更新时间 用date类型)
看上面
- 查询每个部门的最高工资,最低工资,平均工资
- 给所有项目经理工资涨10000
- 给工资低于30000的员工工资涨到30000
- 查询各部门的工资总额,平均工资,最高工资,最低工资
- c部门的项目经理离职,删除其信息
- c部门的程序员全部转入Java部门,更改信息
- 查询11月份过生日的员工
- 查询本月过生日的员工。设计一个通用的语句
(补充:我进行查询的时候是6月份)
- 查询整合部门后表中记录的所有记录,按照薪资从高到低排布
小练习三
先创建两个表格
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表)
- 查询部门30中的雇员
- 查询所有办事员(clerk)的姓名、编号和部门
- 查询佣金(comm)高于薪金(sal)的雇员
- 查询哪些人没有佣金(comm)
- 查询佣金(comm)高于薪金(sal)60%的雇员
- 显示所有人的姓名,月薪,年薪(取别名)
- 找出部门10中的所有经理和部门20中的所有办事员的详细资料
- 找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员,但其薪金大于等于2000的所有雇员的资料
- 找出不收取佣金或收取佣金低于500的雇员
排序练习(emp表)
- 查询所有人员信息,按照工资升序排列
- 查询所有人员姓名,工资,佣金,按照工资降序排列,若工资相同则按照佣金升序排列
- 查询工资大于2000的所有员工,按照工资薪金降序排列
- 查询所有人的信息,按照姓名排序
- 查询工资在2000-3000之间的员工信息,按照雇佣日期升序排列
函数练习(emp表)
- 显示正好为6个字符的雇员姓名
- 显示所有雇员的姓名的前三个字符
- 显示所有雇员的姓名,用A代替‘a’
- 显示不带有‘r’的雇员姓名
- 找出早于35年之前受雇的雇员
(补充:查询时是2019年)
- 显示所有雇员的姓名以及满10年服务年限的日期
分组函数练习(emp表)
- 显示每种工作的人数
- 显示工作人数大于3的工作的平均工资
- 显示出经理有几种不同的工资
- 显示出30号部门有几种不同的工作
- 显示出emp表数据中不同月份雇佣的人数
- 显示出每个管理者手下带了多少个员工
- 显示收取佣金的雇员的不同工作
嵌套查询练习(emp表)
- 查询平均工资大于2900的部门中的所有员工
- 查询工资比allen多的所有员工
- 查询薪金高于公司平均薪金的所有员工姓名,部门编号,具体薪资
- 列出与scott从事相同工作的所有员工信息
- 查询薪金大于部门30中的员工最高薪金的所有员工的姓名、薪金和部门编号
- 查询在部门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);
- 查询人口数在1000到2000之间的城市所属在哪个地区
涉及到两张表city和area
select *
from city inner join area
on city.aid = area.aid
where city.citysize between 1000 and 2000;
- 查询每个国家的城市个数,按照城市个数升序排列
涉及到三张表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(*);
- 查询各地区城市人口平均数,按照人口平均数降序排列
涉及到两张表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;
- 查询各地区总人数,按照人口总数降序排列
涉及到两张表area和city
select aname,sum(citysize)
from area inner join city on area.aid = city.aid
group by aname
order by sum(citysize) desc;
- 查询人口总数超过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综合练习
文章目录
题目描述
- 设有一个数据库,包括四个表:
- 学生表(student),
- 课程表(course),
- 成绩表(score),
- 教师信息表(teacher).
- 表结构如表1-1的表(一)~表(四)所示.
- 表内数据如表1-2的表(一)~表(四)所示.
- 用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语句)
最终智慧: