Day4:mysql集合运算

本文详细介绍了SQL中的UNION和JOIN操作。UNION用于剔重合并两个查询结果,而UNION ALL包含重复行。内联结INNER JOIN通过ON条件连接表,可与WHERE子句结合使用。自然连接NATURAL JOIN根据公共列自动匹配。外连接(LEFT, RIGHT, FULL OUTER JOIN)保留不匹配行。通过实例展示了各种连接类型的使用,并解释了内外连接的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表的加法–UNION(剔重)

语句样例:

SELECT product_id, product_name
  FROM product
 UNIONSELECT product_id, product_name
  FROM product2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HhOCbUii-1655900521214)(en-resource://database/1126:1)]
union取的是剔重的合并表结果。

UNION和OR

相同点:使用 UNION 对两个查询结果取并集, 和在一个查询中使用 WHERE 子句, 然后使用 OR 谓词连接两个查询条件, 能够得到相同的结果。对于同一个表的两个不同的筛选结果集, 使用 UNION 对两个结果集取并集, 和把两个子查询的筛选条件用 OR 谓词连接, 会得到相同的结果
不同点
将两个不同的表中的结果合并在一起, 就不得不使用 UNION 了.。而且, 即便是对于同一张表, 有时也会出于查询效率方面的因素来使用 UNION。

表的加法–UNION ALL(含重复行)

-- 保留重复行SELECT product_type
  FROM Product
 UNION ALLSELECT product_type
  FROM Product2;

隐式数据类型转换

SELECT product_id, product_name, '1'
  FROM Product
 UNIONSELECT product_id, product_name,sale_price
  FROM Product2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1YZOmZC-1655900521218)(en-resource://database/1128:1)]

内连结inner join

格式

FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>

业务需求:将以下两个表关联起来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x4csqG7Y-1655900521220)(en-resource://database/1134:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EDQ2mtVk-1655900521221)(en-resource://database/1136:1)]
我的代码

SELECT shop_id,shop_name,product_id,quantity
FROM shop_product
INNER JOIN product
ON shop_product.product_id=product.product_id;

报错信息
1052 - Column 'product_id' in field list is ambiguous
正确代码

SELECT SP.shop_id
       ,SP.shop_name
       ,SP.product_id
       ,P.product_name
       ,P.product_type
       ,P.sale_price
       ,SP.quantity
  FROM ShopProduct AS SP
 INNER JOIN Product AS P
    ON SP.product_id = P.product_id;

解析:

FROM ShopProduct AS SP
 INNER JOIN Product AS P

相当于 FROM 某表,通过INNER JOIN使得SP和P已经合并成一个表。

结合WHERE子句使用内连结

如果需要在使用内连结的时候同时使用 WHERE 子句对检索结果进行筛选, 则需要把 WHERE 子句写在 ON 子句的后边。

INNER JOIN总结

1、通过INNER JOIN可以使得多张表合并成一个表查询;
2、通过ON,使得内容相同的表字段关联,以达到将两个表的关联的目的;
3、按照FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY的格式,FROM在SELECT的前面,所以可以按照表名 AS 表名简写,表名.列名的方式使用,节约时间。

自然连结(NATURAL JOIN)

SELECT *  FROM shopproduct NATURAL JOIN Product

外连结(OUTER JOIN)

内外连接的区别
内连结会丢弃两张表中不满足 ON 条件的行,和内连结相对的就是外连结. 外连结会根据外连结的种类有选择地保留无法匹配到的行。
按照保留的行位于哪张表,外连结有三种形式: 左连结, 右连结和全外连结。    
左连结
FROM <tb_1> LEFT  OUTER JOIN <tb_2> ON <condition(s)>
右连结
FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
全外连结
FROM <tb_1> FULL  OUTER JOIN <tb_2> ON <condition(s)>

外连接总结
1、选出单张表中全部信息;
2、使用left、right来指定主表;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值