码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据库中有关多表查询的综合练习(含详细解答)


    📘本专栏文章主要是争对博主在学习《数据库原理及应用》课程时老师布置的课后练习题做出的解答,如果遇到相同的题目建议看着本文自己动手实践一遍,这样才能加深印象。
    🎈如果想要了解数据库有关知识点的话,可以点击下方链接进行查看
    🔑 本专栏地址【数据库练习题】
    🔑有关数据库的知识点请戳⏩【数据库知识点总结】
    🔑 另一个正在更新的专栏【拼图小游戏(Java)】

    文章目录

    • 一、概述
    • 二、题目所用表
    • 三、题目及详细解答
      • 1.检索超过50岁的男职工的工号和姓名
      • 2.设职工只能在一个公司工作,检索工资超过1000元的男职工工号和姓名
      • 3.设职工可在多个公司工作,检索在编号C002和C003兼职的职工工号和姓名
      • 4.检索在“联华公司”工作、工资超过1000元的男性职工的工号和姓名
      • 5.假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示(E#,NUM,SUM_SALARY)分别表示工号、公司数目和工资总数
      • 6.工号为0002的职工在多个公司工作,检索至少在0002职工兼职的所有公司工作的职工工号
      • 7.检索联华公司中低于本公司平均工资的职工工号和姓名
      • 8.在每个公司中为50岁以上职工加薪100元
      • 9.在EMP表和WOEKS表中删除年龄大于50岁的职工有关元组
    • 四、结语

    一、概述

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

    二、题目所用表

    EMP

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

    WORKS

    E#C#SALARY
    0001C0012500
    0002C0013500
    0003C0022500
    0004C0027500
    0006C0021300
    0003C0031100
    0005C0036200
    0006C0011200

    COMP

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

    三、题目及详细解答

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

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

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

    在这里插入图片描述

    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 = '男';
    
    • 1

    在这里插入图片描述

    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' )
    
    • 1

    在这里插入图片描述

    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 = '男';
    
    • 1

    在这里插入图片描述

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

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

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

    在这里插入图片描述

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

    • 这也是一道嵌套查询的题目
    • 子查询为:找出0002职工所在公司编号
    • 再检索该公司中所有员工工号并去重
    SELECT DISTINCT WORKS.E# FROM WORKS WHERE C# IN (SELECT DISTINCT WORKS WHERE E# = '0002')
    
    • 1

    在这里插入图片描述

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

    • 这道题比较复杂,要联合三个表进行查询
    • 联合条件:EMP.E# = WORKS.E# AND WORKS.C# = COMP.C#
    • 低于本公司平均工资:首先要找出本公司的编号,再根据编号查询AVG(SALARY)
    • SELECT AVG(SALARY) FROM WORKS WHERE C# IN (SELECT C# FROM COMP WHERE CNAME = '联华公司')
    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 = '联华公司'));
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

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

    • 数据更新操作及嵌套查询
    • 子查询内容为年龄大于50的员工的编号
    UPDATE WORKS SET SALARY = SALARY + 100 WHERE E# IN (SELECT E# FROM EMP WHERE EMP.AGE > 50)
    
    • 1

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

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

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

    在这里插入图片描述

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

    四、结语

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

  • 相关阅读:
    nginx实现灰度上线(InsCode AI 创作助手)
    Jellyfish and Green Apple-Codeforces Round 902 (Div. 2)
    Oracle数据迁移实用入门
    k8s gateway
    手把手教你做测开:开发Web平台之用户信息
    2022年最火的十大测试工具,你掌握了几个
    【Java】微服务——Nacos注册中心
    52_Pandas处理日期和时间列(字符串转换、日期提取等)
    【易错小点记录】坑人的for循环与逻辑或
    如何将视频压缩?快来看看这些方法
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/127738143
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号