数据库中有关多表查询的综合练习(含详细解答)

简介: 数据库中有关多表查询的综合练习(含详细解答)

一、概述


本文包含九道多表查询相关练习题,有一些难度较大,建议读者在复习完前面数据库的内容后再来阅读本文


二、题目所用表


EMP


E# ENAME AGE SEX ECITY
0001 李华 58 南京
0002 李丽 23 上海
0003 王建国 52 温州
0004 陈颖 32 北京
0005 刘晓华 29 上海
0006 韩梅梅 42 安徽


WORKS


E# C# SALARY
0001 C001 2500
0002 C001 3500
0003 C002 2500
0004 C002 7500
0006 C002 1300
0003 C003 1100
0005 C003 6200
0006 C001 1200


COMP


C# CNAME CITY
C001 联华公司 上海
C002 某公司 深圳
C003 学而思 上海


三、题目及详细解答


1.检索超过50岁的男职工的工号和姓名


简单的查询,这里不多加赘述,直接上语句


SELECT E#,ENAME FROM EMP WHERE AGE > 50 AND SEX = '男';

096f87c8594348da89b8c2ebc6211343.png


2.设职工只能在一个公司工作,检索工资超过1000元的男职工工号和姓名


  • 这道题我们可以用子查询,也是一个简单的多表查询
  • 从EMP表中检索E#和ENAME
  • 从WORKS检索工资超过1000元的员工且性别为男(子查询)


SELECT EMP.E#,ENAME FROM EMP WHERE E# IN (SELECT WORKS.E# FROM WORKS WHERE SALARY > 1000) AND SEX = '男';

cdc104c8cb36496a82aaf838e5c4eef6.png



3.设职工可在多个公司工作,检索在编号C002和C003兼职的职工工号和姓名


  • 这道题我们可以用子查询,也是一个简单的多表查询
  • 查询出公司编号为C002、C003的员工编号
  • 再到员工表中根据对应编号查找姓名


SELECT E#,ENAME FROM EMP WHERE  EMP.E# IN(SELECT DISTINCT E# FROM WORKS WHERE C# = 'C002' OR C# = 'C003' )

fa4abfdbfb224fbea7ae8b3ed8cd3f13.png


4.检索在“联华公司”工作、工资超过1000元的男性职工的工号和姓名


  • 这里要联合三个表格进行查询
  • 联合条件:EMP.E# = WORKS.E# AND WORKS.C# = COMP.C#
  • 三个筛选条件:COMP.CNAME = '联华公司'、WORKS.SALARY > 1000、EMP.SEX = '男'


SELECT EMP.E#,EMP.ENAME FROM EMP,WORKS,COMP WHERE EMP.E# = WORKS.E# AND WORKS.C# = COMP.C# AND COMP.CNAME = '联华公司' AND WORKS.SALARY > 1000 AND EMP.SEX = '男';

bab3de58c1614cc9a02dd09374115d3a.png


5.假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示(E#,NUM,SUM_SALARY)分别表示工号、公司数目和工资总数


这道题是简单的查询,涉及到了起别名和聚合函数的知识点


SELECT E#,COUNT(C#),SUM(SALARY) AS SUM.SALARY FROM WORKERS GROUP BY E#;

cfe579d712424a798d89f4e67fa7bcca.png


6.工号为0002的职工在多个公司工作,检索至少在0002职工兼职的所有公司工作的职工工号


  • 这也是一道嵌套查询的题目
  • 子查询为:找出0002职工所在公司编号
  • 再检索该公司中所有员工工号并去重


SELECT DISTINCT WORKS.E# FROM WORKS WHERE C# IN (SELECT DISTINCT WORKS WHERE E# = '0002')

d4080a5cfc794a0ab1c56b3d282f4411.png


7.检索联华公司中低于本公司平均工资的职工工号和姓名


  • 这道题比较复杂,要联合三个表进行查询
  • 联合条件:EMP.E# = WORKS.E# AND WORKS.C# = COMP.C#
  • 低于本公司平均工资:首先要找出本公司的编号,再根据编号查询AVG(SALARY)


SELECT EMP.E#,ENAME FROM EMP,COMP,WORKS 
WHERE EMP.E# = WORKS.E# AND WORKS.C# = COMP.C#
AND CNAME = '联华公司'
AND SALARY < (SELECT AVG(SALARY) FROM WORKS WHERE C# IN (SELECT C# FROM COMP WHERE CNAME = '联华公司'));

7a5f00b6d19d42e1ae6b1c997be0cc08.png


8.在每个公司中为50岁以上职工加薪100元


  • 数据更新操作及嵌套查询
  • 子查询内容为年龄大于50的员工的编号


UPDATE WORKS SET SALARY = SALARY + 100 WHERE E# IN (SELECT E# FROM EMP WHERE EMP.AGE > 50)

2e886744f2704f589db7566cd06087f6.png

a6b238fe5dff4458a0c056dce70b4f64.png


9.在EMP表和WOEKS表中删除年龄大于50岁的职工有关元组


  • 数据更新操作:删除
  • 子查询内容:年龄大于60的员工编号


0216f0cdd8e04634959f6429438d7f29.png

9305eb4d2fe64d5fb9ac4ca93b812c8c.png

a1e31ac6109b4385a13042f7d0079c44.png


四、结语


如果有任何问题欢迎在评论区留言评论

相关文章
|
6月前
|
SQL 存储 关系型数据库
轻松入门MySQL:数据库关联与多表查询,构建高效的业务决策引擎(6)
轻松入门MySQL:数据库关联与多表查询,构建高效的业务决策引擎(6)
163 0
|
6月前
|
SQL 关系型数据库 MySQL
⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询
⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询
214 0
|
关系型数据库 MySQL 数据库
数据库练习
数据库练习
86 0
|
5月前
|
存储 前端开发 小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
|
5月前
|
关系型数据库 MySQL 数据库
关系型数据库MySQL开发要点之多表查询2024详解
关系型数据库MySQL开发要点之多表查询2024详解
34 2
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库开发之多表查询数据准备及案例实操
MySQL数据库开发之多表查询数据准备及案例实操
47 1
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库基础第四篇(多表查询与事务)
MySQL数据库基础第四篇(多表查询与事务)
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
47 5
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(4)-实例练习、多表查询总结
MySQL数据库——多表查询(4)-实例练习、多表查询总结
146 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
253 1
下一篇
无影云桌面