Mysql数据库查询练习题(附带建表语句!!!)

基于mysql-5.7.27版本和Navicat Premium 15版本进行!

这里的建表语句只是简单的语句,仅供测试练习题使用!!!

sql语句作为参考,如果有错误还请及时指正…

练习题一:

student表
在这里插入图片描述
建表语句以及插入数据语句:

 CREATE  TABLE  student ( 
 id  INT(10)  NOT NULL  PRIMARY KEY  ,  #学生ID 自增
 name  VARCHAR(20)  NOT NULL ,  #学生姓名
 sex  VARCHAR(4)  , #学生性别
 birth  YEAR,  #学生出生年份
 department  VARCHAR(20) ,  #所在院系
 address  VARCHAR(50) 	#家庭住址
 ); 

INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区'); 
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区'); 
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市'); 
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市'); 
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市'); 
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');

score表

在这里插入图片描述
建表语句以及插入数据语句:

CREATE  TABLE  score ( 
id  INT(10)  NOT NULL  PRIMARY KEY  AUTO_INCREMENT , #自增ID
stu_id  INT(10)  NOT NULL , #学生ID ,外键创建可有可无
c_name  VARCHAR(20) , 	#学科名称
grade  INT(10) 	#分数
);

INSERT INTO score VALUES(NULL,901, '计算机',98); 
INSERT INTO score VALUES(NULL,901, '英语', 80); 
INSERT INTO score VALUES(NULL,902, '计算机',65); 
INSERT INTO score VALUES(NULL,902, '中文',88); 
INSERT INTO score VALUES(NULL,903, '中文',95); 
INSERT INTO score VALUES(NULL,904, '计算机',70); 
INSERT INTO score VALUES(NULL,904, '英语',92); 
INSERT INTO score VALUES(NULL,905, '英语',94); 
INSERT INTO score VALUES(NULL,906, '计算机',90); 
INSERT INTO score VALUES(NULL,906, '英语',85);

题目以及参考sql语句:

  • 3.查询student表的所有记录
  • 4.查询student表的第2条到4条记录
  • 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
  • 6.从student表中查询计算机系和英语系的学生的信息
  • 7.从student表中查询年龄1985~1990年份的学生信息
  • 8.从student表中查询每个院系有多少人
  • 9.从score表中查询每个科目的最高分
  • 10.查询李四的考试科目(c_name)和考试成绩(grade)
  • 11.用连接的方式查询所有学生的信息和考试信息
  • 12.计算每个学生的总成绩
  • 13.计算每个考试科目的平均成绩
  • 14.查询计算机成绩低于95的学生信息
  • 15.将计算机考试成绩按从高到低进行排序
  • 16.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
  • 17.查询都是北京的学生的姓名、年龄、院系和考试科目及成绩
-- 3.查询student表的所有记录
SELECT * FROM student;

-- 4.查询student表的第2条到4条记录
SELECT * FROM student WHERE id IN(902,903,904);
SELECT * FROM student LIMIT 1,3;

-- 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
SELECT id,name,department FROM student;

-- 6.从student表中查询计算机系和英语系的学生的信息
SELECT * FROM student WHERE department = '计算机系' OR department = '英语系';
SELECT * FROM student WHERE department IN ('计算机系' , '英语系');

-- 7.从student表中查询年龄1985~1990年份的学生信息
SELECT * FROM student WHERE birth BETWEEN 1985 AND 1990;

-- 8.从student表中查询每个院系有多少人
SELECT department,COUNT(1) 人数 FROM student GROUP BY department;

-- 9.从score表中查询每个科目的最高分
SELECT c_name 科目,MAX(grade) 最高分 FROM score GROUP BY 科目;

-- 10.查询李四的考试科目(c_name)和考试成绩(grade)
SELECT name,c_name,grade 
FROM score
INNER JOIN student stu
ON stu.id = stu_id
WHERE name = '李四';

-- 11.用连接的方式查询所有学生的信息和考试信息
SELECT stu.*,c_name,grade
FROM student stu
INNER JOIN score
ON stu.id = stu_id;

-- 12.计算每个学生的总成绩
SELECT stu_id,SUM(grade) FROM score GROUP BY stu_id;

-- 13.计算每个考试科目的平均成绩
SELECT c_name 考试科目,AVG(grade) 平均成绩 FROM score GROUP BY 考试科目;

-- 14.查询计算机成绩低于95的学生信息
SELECT stu.*
FROM student stu
INNER JOIN score
ON stu.id = stu_id
WHERE grade<95 AND c_name = '计算机';

-- 15.将计算机考试成绩按从高到低进行排序
SELECT grade 成绩 FROM score WHERE c_name = '计算机' ORDER BY 成绩 DESC ;

-- 16.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
SELECT stu.name,department,c_name,grade
FROM student stu
INNER JOIN score
ON stu.id = stu_id
WHERE stu.name LIKE '张%' OR stu.name LIKE'王%';

-- 17.查询都是北京的学生的姓名、年龄、院系和考试科目及成绩
SELECT stu.name,birth,department,c_name,grade
FROM student stu
INNER JOIN score
ON stu.id = stu_id
WHERE stu.address LIKE '%北京%';

练习题二

1、emp表
在这里插入图片描述
建表语句以及插入数据语句:

CREATE TABLE emp(
	empno		INT,
	ename		VARCHAR(50),
	job		VARCHAR(50),
	mgr		INT,
	hiredate	DATE,
	sal		DECIMAL(7,2),
	comm		decimal(7,2),
	deptno		INT
) ;

INSERT INTO emp values(1001,'甘宁','文员',1013,'2000-12-17',8000.00,NULL,20);
INSERT INTO emp values(1002,'黛琦丝','销售员',1006,'2001-02-20',16000.00,3000.00,30);
INSERT INTO emp values(1003,'殷天正','销售员',1006,'2001-02-22',12500.00,5000.00,30);
INSERT INTO emp values(1004,'刘备','经理',1009,'2001-04-02',29750.00,NULL,20);
INSERT INTO emp values(1005,'谢逊','销售员',1006,'2001-09-28',12500.00,14000.00,30);
INSERT INTO emp values(1006,'关羽','经理',1009,'2001-05-01',28500.00,NULL,30);
INSERT INTO emp values(1007,'张飞','经理',1009,'2001-09-01',24500.00,NULL,10);
INSERT INTO emp values(1008,'诸葛亮','分析师',1004,'2007-04-19',30000.00,NULL,20);
INSERT INTO emp values(1009,'曾阿牛','董事长',NULL,'2001-11-17',50000.00,NULL,10);
INSERT INTO emp values(1010,'韦一笑','销售员',1006,'2001-09-08',15000.00,0.00,30);
INSERT INTO emp values(1011,'周泰','文员',1008,'2007-05-23',11000.00,NULL,20);
INSERT INTO emp values(1012,'程普','文员',1006,'2001-12-03',9500.00,NULL,30);
INSERT INTO emp values(1013,'庞统','分析师',1004,'2001-12-03',30000.00,NULL,20);
INSERT INTO emp values(1014,'黄盖','文员',1007,'2002-01-23',13000.00,NULL,10);
INSERT INTO emp values(1015,'张三','保洁员',1001,'2013-05-01',80000.00,50000.00,50);

2、dept表
在这里插入图片描述
建表语句以及插入数据语句:

CREATE TABLE dept(
	deptno		INT,
	dname		varchar(14),
	loc		varchar(13)
);

INSERT INTO dept values(10, '教研部', '北京');
INSERT INTO dept values(20, '学工部', '上海');
INSERT INTO dept values(30, '销售部', '广州');
INSERT INTO dept values(40, '财务部', '武汉');

3、salgrade 表
在这里插入图片描述
建表语句以及插入数据语句:

CREATE TABLE `salgrade` (
  `grade` int(11) NOT NULL DEFAULT '0' COMMENT '工资的等级',
  `losal` decimal(7,2) DEFAULT NULL COMMENT '此等级的最低工资',
  `hisal` decimal(7,2) DEFAULT NULL COMMENT '此等级的最高工资'
) ;

INSERT INTO `salgrade` VALUES 
(1,7000.00,12000.00),(2,12010.00,14000.00),
(3,14010.00,20000.00),(4,20010.00,30000.00),(5,30010.00,99990.00);

4、年度利润表profit
在这里插入图片描述
建表语句以及插入数据语句:

CREATE TABLE `profit` (
	`year` INT,
	`zz` DECIMAL(7,2)
);

INSERT INTO `profit` VALUES(2010,100);
INSERT INTO `profit` VALUES(2011,150);
INSERT INTO `profit` VALUES(2012,250);
INSERT INTO `profit` VALUES(2013,800);
INSERT INTO `profit` VALUES(2014,1000);

题目以及参考sql语句:

  1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
  2. 列出所有员工的姓名及其直接上级的姓名。
  3. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
  4. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
  5. 列出最低薪金大于15000的各种工作及从事此工作的员工人数。
  6. 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
  7. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
  8. 列出与庞统从事相同工作的所有员工及部门名称。
  9. 列出薪金高于在部门30工作的所有员工的薪金 的员工姓名和薪金、部门名称。
  10. 查出年份、利润、年度增长比。
-- 1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
SELECT de.deptno,de.dname,de.loc,a.cou 
FROM dept de,(SELECT deptno,count(1) cou from emp GROUP BY deptno HAVING count(1)>=1) a 
WHERE de.deptno = a.deptno;

-- 2. 列出所有员工的姓名及其直接上级的姓名
SELECT a.ename,b.ename 
FROM emp a ,emp b 
WHERE a.mgr = b.empno; 

-- 3. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称
SELECT a.empno,a.ename,de.dname,a.hiredate,b.ename,b.hiredate 
FROM emp a ,emp b,dept de 
WHERE a.mgr = b.empno AND a.deptno=de.deptno AND a.hiredate<b.hiredate; 

-- 4. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
SELECT de.dname,em.* 
FROM dept de 
LEFT JOIN emp em 
ON de.deptno=em.deptno;

-- 5. 列出最低薪金大于15000的各种工作及从事此工作的员工人数。
SELECT job,COUNT(1) 
FROM emp 
WHERE (sal+IFNULL(comm,0))>15000 
GROUP BY job;

-- 6. 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
SELECT ename 
FROM emp 
WHERE deptno= (SELECT deptno FROM dept WHERE dname='销售部');

-- 7. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
SELECT em.*,de.dname FROM emp em LEFT JOIN dept de ON em.deptno=de.deptno WHERE (sal+IFNULL(comm,0))> (SELECT AVG(sal+IFNULL(comm,0)) FROM emp);

select e1.*,e2.ename 领导,dname,grade
from emp e1 left join emp e2 
on e1.mgr=e2.empno left join dept d 
on e1.deptno=d.deptno left join salgrade 
on e1.sal between losal and hisal 
where (e1.sal+ifnull(e1.comm,0))>(select avg(sal+ifnull(comm,0))from emp);

-- 8.列出与庞统从事相同工作的所有员工及部门名称。
SELECT em.ename,de.dname 
FROM emp em 
INNER JOIN dept de 
ON em.deptno=de.deptno 
WHERE em.job= (SELECT job FROM emp WHERE ename='庞统') ;

-- 9.列出薪金高于在部门30工作的所有员工的薪金 的员工姓名和薪金、部门名称。
SELECT em.ename,em.sal,de.dname 
FROM emp em 
LEFT JOIN dept de 
ON em.deptno=de.deptno 
WHERE (sal+IFNULL(comm,0))>(SELECT MAX(sal+IFNULL(comm,0)) FROM emp WHERE deptno = 30);

-- 10.查出年份、利润、年度增长比。
SELECT a.*, CONCAT((b.zz-a.zz)/a.zz*100,'%') 增长比
FROM profit a,profit b
WHERE a.`year`+1=b.`year`;
  • 16
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包括:19道SQL语句查询题目及答案、建表SQL语句、题目相关的表截图。答案中除了包含intersect、except关键词的答案,其余都在MySQL上跑过,确保运行无误(MySQL不支持intersect、except关键词),因为脑细胞死得有些多,资源分不少请大家见谅。 题目如下: Q:Find all customers who have both an account and a loan at the Perryridge branch.(ps:MySQL不支持intersect运算符) Q:Find the number of depositors for each branch. Q:Find the names of all branches where the average account balance is more than $1,200. Q:Find the names of all branches that have greater assets than all branches located in Brooklyn. Q:Find all accounts with the maximum balance. Q:Find all branches that have greater assets than some branch located in Brooklyn. Q:Find all customers who have both an account and a loan at the bank. Q:Find all customers who have accounts at all branches located in Brooklyn. Q:Find the average account balance at the Perryridge branch. Q:Find the number of tuples in the customer relation. Q:Find the number of depositors in the bank. Q:Find the number of depositors for each branch. Q:Find all customers who have a loan at the bank but do not have an account at the bank. Q:Find all branches where the total account deposit is greater than the average of the total account deposits at all branches. Q:Find all customers who have both an account and a loan at the bank. Q:Find all customers who have at most one account at the Perryridge branch. Q:Provide as a gift for all loan customers of the Perryridge branch, a $200 savings account. Let the loan number serve as the account number for the new savings account. Q:Increase all accounts with balances over $10,000 by 6%, all other accounts receiver 5%.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值