假设有三张表
1)商品表(商品ID,商品名称)
2)入库表(商品ID,入库数量,入库时间)
3)出库表(商品ID,出库数量,出库时间)
要求列出所有商品名称、商品ID及其当前库存余额
SQL查询语句如下:
select 商品表.商品名称,商品表.商品ID,b.库存余额
from 商品表 left join
(select a.商品ID,sum(a.数量)as 库存余额 from
(select 商品ID,入库数量 as 数量 from 入库表 union all
select 商品ID,-1*出库数量 from 出库表) a group by a.商品ID) b
on 商品表.商品ID=b.商品ID
-- 说明上述语句中的“a”和“b”分别是两个中间过渡查询结果集取的表别名,也就所谓的虚拟表。
一使用SELECT子句进行多表查询SELECT 字段名 FROM 表1,表2 … WHERE 表1字段 = 表2字段 AND 其它查询条件SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id
注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现。
1、联合查询可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNION ALL。联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
2、在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
3、在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:查询1 UNION (查询2 UNION 查询3)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)