集合运算
集合:表、视图、查询的执行结果称为集合
注意点
- 集合运算的记录的列数需一致
- 集合运算的运算对象中列的类型需一致
- 可以使用where、group by、having语句,但order by只能在最后一次select语句使用
集合运算的基本用法:
select 列1,列2,...------------次数列数和对应列的类型(列1,列11的数据类型一致)须一致
from 表1
集合运算符
select 列11,列22,...
from 表2
表的加减法
表的并(加法)——union
包含重复行:union all
两个表:
select 商品id,商品名称
from Products
union
select 商品id,商品名称
from Product2;
表的交(选取表的公共部分)——intersect
保留重复行:instersect all
AND应用于一张表,intersect应用于2个表
select 商品id,商品名称
from Products
intersect --------运算符
select 商品id,商品名称
from Product2;
表的差——except
except相当于集合运算中的A-B(A交非B)
select 商品id,商品名称
from Products
except --------运算符
select 商品id,商品名称
from Product2;
联结——join
——将表的列添加到另一个表中
导致列的变化
内联结——inner join
关键子句:
- from子句:
from 表1 as 别名1 inner join 表2 as 别名2
。把两个表连接在一起 - on子句:
on 别名1.列名1=别名2.列名2
。指定条件,即按哪列把2个表连在一起。 - select子句:
select 别名1.列1,别名2.列2,...
。指定联结后的新表需要显示的列指标
- 内联结只会读取在2张表中都存在的列指标对应的行信息。
例:从Products表中提取商品对应的商店信息
select sp.商店id,sp.商店名称,p.商品id,p.商品名称,p.销售单价
from ShopProduct as sp inner join Products as p
on p.商品id=sp.商品id
where sp.商店id='000A';-------也可指定条件,只显示部分符合条件的联结结果
如果后续想使用联结产生的表要创建视图,否则select语句执行后,表也不存在了
外联结——right/left outer join
- 当数据只存在于1张表时,外联结可以将其读取出来
- 主表用
right、lift
关键字指定
select sp.商店id,sp.商店名称,p.商品id,p.商品名称,p.销售单价
from ShopProduct as sp right outer join Products as p
on p.商品id=sp.商品id;
多张表的联结(>=3)
例:内连结
select 别名1.列1,别名1.列2,..,别名2.列3,别名2.列4,...,别名3.列5,别名3.列6
FROM 表1 as 别名1 inner join 表2 as 列名2
on 别名1.列名1=别名2.列名1
inner join 表3 as 列名3
on 别名1.列名1=别名3.列名1