文章目录
表的加法–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来指定主表;