阿里云AI训练营SQL入门与实践Task4

本文介绍了SQL中的集合运算,包括UNION、UNION ALL、交集和差集,并详细讲解了各种JOIN操作,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,还提供了相关练习题来巩固概念。
摘要由CSDN通过智能技术生成
  • 表的加减法

    表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。

    在标准 SQL 中, 分别对检索结果使用 UNIONINTERSECT, EXCEPT 来将检索结果进行并,交和差运算, 像**UNION,INTERSECT**, **EXCEPT**这种用来进行集合运算的运算符称为集合运算符。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xnpEpSE4-1640243090299)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4356ea0e-245b-4a51-a80e-eeb82c896b32/Untitled.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZI2mx36-1640243090301)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8a33a134-cb68-46d2-925c-92cc90681af5/Untitled.png)]

    • 表的加法

      • UNION

        UNION 会对两个查询的结果集进行合并和去重, 这种去重不仅会去掉两个结果集相互重复的, 还会去掉一个结果集中的重复行

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWacdlRv-1640243090302)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ea984434-f10b-4604-86ea-b88fc023ff59/Untitled.png)]

        --例子:
        --分别使用 UNION 或者 OR 谓词,找出毛利率不足 30%或毛利率未知的商品.
        -- 参考答案:
        SELECT * 
          FROM product 
         WHERE sale_price / purchase_price < 1.3
         
         UNION
        SELECT * 
          FROM product 
         WHERE sale_price / purchase_price IS NULL;
        
      • 包含重复行的UNION ALL

        需要不去重的并集, 在 UNION 的结果中保留重复行的语法其实非常简单,只需要在 UNION 后面添加 ALL 关键字就可以了.

        -- 商店决定对product表中利润低于50%和售价低于1000的商品提价
        SELECT * 
          FROM product 
         WHERE sale_price < 1000
         UNION ALL
        SELECT * 
          FROM product 
         WHERE sale_price < 1.5 * purchase_price
        
    • 对称差

      -- 使用 NOT IN 实现两个表的差集
      SELECT * 
        FROM product
       WHERE product_id NOT IN (SELECT product_id FROM product2)
      UNION
      SELECT * 
        FROM product2
       WHERE product_id NOT IN (SELECT product_id FROM product)
      
  • 连结(JOIN)

    连结(JOIN)就是使用某种关联条件(一般是使用相等判断谓词"="), 将其他表中的列添加过来, 进行“添加列”的集合运算。

    • 内连接(INNER JOIN)

      要点一: 进行连结时需要在 FROM 子句中使用多张表.

      要点二:必须使用 ON 子句来指定连结条件.

      要点三: SELECT 子句中的列最好按照 表名.列名 的格式来使用.

      --例子:
      SELECT  SP.shop_id
             ,SP.shop_name
             ,SP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值