码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL内、外连接练习题【牛客-SQL必知必会】11 联结表


    目录

    • 题目链接
    • SQL 96 返回顾客名称和相关订单号
      • 答案一 INNER JOIN
      • 答案二 简单的等联结语法
    • SQL 97 返回顾客名称和相关订单号以及每个订单的总价
      • 答案一
      • 答案二(优化后)
      • 答案三(子查询)
    • SQL 98 确定哪些订单购买了 prod_id 为 BR01 的产品(二)
      • 答案一
      • 答案二
      • SQL 99 返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件(二)
      • 答案
    • SQL 100 确定最佳顾客的另一种方式(二)
      • 答案一(过滤条件放在子查询外面)
      • 答案二(过滤条件放在子查询里面)


    题目链接

    https://www.nowcoder.com/exam/oj/ta?tpId=298


    SQL 96 返回顾客名称和相关订单号

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

    答案一 INNER JOIN

    SELECT cust_name, order_num
    FROM Customers c INNER JOIN Orders o ON c.cust_id = o.cust_id
    ORDER BY cust_name ASC, order_num ASC;
    
    • 1
    • 2
    • 3

    答案二 简单的等联结语法

    SELECT cust_name, order_num
    FROM Customers c, Orders o
    WHERE c.cust_id = o.cust_id
    ORDER BY cust_name ASC, order_num ASC;
    
    • 1
    • 2
    • 3
    • 4

    SQL 97 返回顾客名称和相关订单号以及每个订单的总价

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

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

    答案一

    SELECT c.cust_name,o.order_num,quantity * item_price OrderTotal
    FROM Customers c,Orders o,OrderItems oi
    WHERE c.cust_id = o.cust_id AND o.order_num = oi.order_num
    ORDER BY cust_name ASC, order_num ASC;
    
    • 1
    • 2
    • 3
    • 4

    答案二(优化后)

    这种答案是避免OrderItems表中有重复的order_num;答案一中默认OrderItems表中没有重复的order_num

    SELECT c.cust_name, o.order_num, SUM(quantity * item_price) OrderTotal
    FROM Customers c,Orders o,OrderItems os
    WHERE c.cust_id = o.cust_id AND o.order_num = os.order_num
    GROUP BY c.cust_name, o.order_num
    ORDER BY c.cust_name ASC, o.order_num ASC;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    答案三(子查询)

    SELECT c.cust_name,o.order_num,OrderTotal
    FROM Customers c, Orders o,(
        SELECT order_num,SUM(quantity*item_price) OrderTotal
        FROM OrderItems 
        GROUP BY order_num) t
    WHERE c.cust_id = o.cust_id AND o.order_num = t.order_num
    ORDER BY c.cust_name ASC, o.order_num ASC;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    SQL 98 确定哪些订单购买了 prod_id 为 BR01 的产品(二)

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

    答案一

    SELECT cust_id, order_date
    FROM Orders o1, OrderItems o2
    WHERE o1.order_num = o2.order_num
    AND prod_id = 'BR01'
    ORDER BY order_date ASC;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    答案二

    SELECT cust_id, order_date
    FROM Orders o1 JOIN OrderItems o2
    ON o1.order_num = o2.order_num
    WHERE prod_id = 'BR01'
    ORDER BY order_date ASC;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    SQL 99 返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件(二)

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

    答案

    SELECT cust_email
    FROM Customers c INNER JOIN Orders o1 ON c.cust_id = o1.cust_id
    INNER JOIN OrderItems o2 ON o1.order_num = o2.order_num
    WHERE prod_id = 'BR01';
    
    • 1
    • 2
    • 3
    • 4

    SQL 100 确定最佳顾客的另一种方式(二)

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

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

    答案一(过滤条件放在子查询外面)

    SELECT cust_name, total_price
    FROM Customers c
    JOIN Orders o1 ON c.cust_id = o1.cust_id
    JOIN (
        SELECT order_num, SUM(item_price * quantity) total_price
        FROM OrderItems
        GROUP BY order_num
    ) o2 ON o1.order_num = o2.order_num
    WHERE total_price >=1000
    ORDER BY total_price ASC;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    答案二(过滤条件放在子查询里面)

    个人感觉过滤条件放在子查询里面好一点,在形成子表的时候就已经是一个比较小的表了,再连接其他表,开销就会比较小。

    SELECT cust_name, total_price
    FROM Customers c
    JOIN Orders o1 ON c.cust_id = o1.cust_id
    JOIN (
        SELECT order_num, SUM(item_price * quantity) total_price
        FROM OrderItems
        GROUP BY order_num
        HAVING total_price >= 1000
    ) o2 ON o1.order_num = o2.order_num
    ORDER BY total_price ASC;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

  • 相关阅读:
    计算机网络(五):运输层
    【操作系统】进程是如何调度的?
    std::thread简单使用
    娄底植物细胞实验室建设基本组成要点
    从零开始学习调用百度地图网页API:二、初始化地图,鼠标交互创建信息窗口
    adb基础命令
    利用POI 解决Aspose excel转pdf四舍五入精度丢失问题
    ELK日志分析系统的详细介绍与部署
    Qt/C++原创推流工具/支持多种流媒体服务/ZLMediaKit/srs/mediamtx等
    论文-分布式-拜占庭将军问题
  • 原文地址:https://blog.csdn.net/guliguliguliguli/article/details/126175471
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号