Day37:SQL练习题

SQL练习题
表1 Employee表
编号 姓名 地址 邮编 电话 电子邮件 部门 出生日期 性别
Num Name Addr Zip Tel Email Depno Birth Sex
001 王林 武汉大学 430074 87598405 Null 2 1985-2-1 男
002 王芳 华中科大 430073 62534231 Null 1 1966-3-28 男
003 张晓 武汉理工大 430072 87596985 Null 1 1972-12-9 男
004 王小燕 武汉交大 430071 85743261 [email protected] 1950-7-30 女
005 李华 华中农大 430070 87569865 Null 5 1962-10-18 男
006 李明 华中师大 430075 85362143 [email protected] 5 1955-09-28 男
007 田丽 中南财大 430076 85693265 [email protected] 1968-08-10 女
008 吴天 武汉电力 430077 36985612 [email protected] 1964-10-01 男
009 刘备 武汉邮科院 430078 69865231 Null 3 1967-04-02 男
010 张飞 武汉钢铁 430079 69865632 [email protected] 1958-09-20 男
011 赵云 学府家园 430071 68592312 Null 4 1968-11-18 男
012 貂禅 湖北工大 430074 65987654 null 4 1959-09-03 女
表2 Department
编号 部门名称 备注
Depno DepName Remark
1 财务部 Null
2 人力资源部 Null
3 经理办公室 Null
4 研发部 Null
5 市场部 Null
表3 salary
编号 收入 支出
Num InCome OutCome
001 2100.8 123.09
002 1582.62 88.03
003 2569.88 185.65
004 1987.01 79.58
005 2066.15 108.0
006 2980.7 210.2
007 3259.98 281.52
008 2860.0 198
009 2347.68 180
010 2531.98 199.08
011 2240.0 121.0
012 1980.0 100.0

练习1:SELECT语句的基本使用
(1) 查询每个雇员的所有记录;
(2) 查询前5个会员的所有记录;
(3) 查询每个雇员的地址和电话;
(4) 查询num为001的雇员地址和电话;
(5) 查询表Employee表中女雇员的地址和电话,使用AS子句将结果列中各列的标题分别指定为地址、电话;
(6) 计算每个雇员的实际收入;
(7) 找出所有性王的雇员的部门号(部门号不能重复显示);
(8) 找出所有收入在2000-3000元之间的雇员编号

#(1) 查询每个雇员的所有记录;
SELECT * FROM Employee;
#(2) 查询前5个会员的所有记录;
SELECT * FROM Employee LIMIT 0,5;
#(3) 查询每个雇员的地址和电话;
SELECT addr, tel FROM Employee;
#(4) 查询num为001的雇员地址和电话;
SELECT addr, tel FROM Employee WHERE num=1;
#(5) 查询表Employee表中女雇员的地址和电话,使用AS子句将结果列中各列的标题分别指定为地址、电话;
SELECT addr AS 地址,tel AS 电话 FROM Employee WHERE sex=‘女’;
#(6) 计算每个雇员的实际收入;
SELECT Name, InCome-OutCome AS 实际收入
FROM Employee e INNER JOIN salary s
ON e.num = s.num;
#(7) 找出所有性王的雇员的部门号(部门号不能重复显示);
SELECT DISTINCT d.depno AS 部门号, e.Name
FROM Department d INNER JOIN Employee e
ON d.Depno=e.Depno
WHERE Name LIKE ‘王%’;
#(8) 找出所有收入在2000-3000元之间的雇员编号
SELECT e.Num, InCome AS 收入
FROM Employee e INNER JOIN salary s
ON e.num = s.num
WHERE s.InCome BETWEEN 2000 AND 3000;

练习2:子查询的使用(答案可以不唯一)
(1) 查找在财务部工作的雇员情况;
(2) 查找在财务部且年龄不低于研发部任一个雇员年龄的雇员的姓名;
(3) 查找比所有财务部雇员收入都高的雇员的姓名;

#(1)查找在财务部工作的雇员情况;
SELECT * FROM Employee WHERE depno IN(
SELECT depno FROM department WHERE depname=‘财务部’);
#(2)查找在财务部且年龄不低于研发部任一个雇员年龄的雇员的姓名;
#a、先找到研发部的部门编号
#b、再通过部门编号找到研发部的雇员年龄
#c、再找到财务部的部门编号,并通过部门编号查找雇员姓名,条件是年龄不低于所有研发部雇员年龄
SELECT Name FROM Employee WHERE Depno IN(
SELECT Depno FROM Department WHERE DepName=‘财务部’)AND Birth<ALL(
SELECT Birth FROM Employee WHERE Depno IN(
SELECT Depno FROM Department WHERE DepName=‘研发部’));

#(3)查找比所有财务部雇员收入都高的雇员的姓名;
#a、查找所有财务部的雇员收入
#b、查找其他雇员编号,条件是收入比所有财务部的雇员收入都高
#c、通过编号找到姓名
SELECT Name FROM employee WHERE Depno IN(
SELECT Depno FROM salary WHERE InCome>ALL(
SELECT InCome FROM salary WHERE Depno IN(
SELECT Depno FROM employee WHERE Depno=(
SELECT Depno FROM department WHERE DepName=‘财务部’))));

练习3:连接查询的使用
(1) 查找每个雇员的情况及薪水情况;
(2) 查找财务部收入在2200元以上的雇员姓名及其薪水详细情况;

#(1)查找每个雇员的情况及薪水情况;
SELECT e., s. FROM employee e
INNER JOIN salary s
ON e.Num=s.Num;

SELECT e., s. FROM employee e, salary s WHERE e.Num=s.Num;
#(2)查找财务部收入在2200元以上的雇员姓名及其薪水详细情况;
SELECT e.name, s.* FROM salary s
INNER JOIN employee e
ON s.Num =e.Num
INNER JOIN department d
ON e.depno=d.depno
WHERE s.income>2200 AND d.depname=‘财务部’;
练习5:GROUP BY
(1) 求各部门的雇员数(要求显示,部门号、部门名称和部门雇员数);
SELECT e.depno AS 部门号,d.depname AS 部门名称,COUNT(*) AS 部门雇员数 FROM employee e
INNER JOIN department d
ON e.Depno=d.Depno
GROUP BY d.depno;

发布了108 篇原创文章 · 获赞 39 · 访问量 9360

猜你喜欢

转载自blog.csdn.net/qq_40246175/article/details/102926351