根据提供的文件信息,我们可以分析出该文档主要涉及的是SQL语言中的查询语句,特别是复杂的查询操作,包括子查询、联合查询、聚合函数以及各种类型的连接(JOIN)等高级主题。下面将对这些知识点进行详细解释。 ### SQL SELECT 语句 在SQL中,`SELECT`语句是最基本也是最重要的命令之一,用于从数据库表中检索数据。通过组合不同的子句,如`FROM`, `WHERE`, `GROUP BY`, `HAVING`, 和 `ORDER BY`等,可以构建出非常复杂的查询逻辑来满足不同的业务需求。 ### 子查询与联合查询 子查询是指在一个查询语句内部包含另一个查询语句的情况。例如: ```sql SELECT * FROM (SELECT ID, ƷNO, SUM(case when Ʒ̨.='' then -1 ELSE 1 END) AS FROM Ʒ̨ GROUP BY ID, ƷNO) a; ``` 这段代码中,括号内的部分就是一个子查询,它首先计算每个ID和ƷNO组合下特定条件下的值,并进行求和。外部查询则简单地选择这个子查询的结果集。 联合查询(`UNION`)则用于合并两个或多个`SELECT`语句的结果集。例如: ```sql SELECT * FROM ( SELECT aa AS ID, AB AS Ͽ, 0 AS FROM a UNION ALL SELECT ba AS ID, 0 AS Ͽ, bb AS FROM b ) cc GROUP BY ID USE INDEX (cc); ``` 这里,`UNION ALL`关键字被用来合并两个`SELECT`语句的结果,并且保留所有行,包括重复行。之后,结果集按照ID分组。 ### 各种类型的连接 在关系型数据库中,连接操作是必不可少的,它允许从两个或更多的表中提取数据。主要有以下几种类型: - **内连接(INNER JOIN)**:返回两个表中匹配的记录。 ```sql SELECT * FROM ͷ INNER JOIN ϸ ON ͷ.̻ = ϸ.̻ID; ``` - **全连接(FULL JOIN)**:返回左表和右表的所有记录。如果某一边没有匹配,则用NULL填充。 ```sql SELECT * FROM ͷ FULL JOIN ϸ ON ͷ.̻ = ϸ.̻ID; ``` - **左连接(LEFT OUTER JOIN)**:返回左表的所有记录和右表中匹配的记录。如果右表中没有匹配,则用NULL填充右表中的列。 ```sql SELECT * FROM ͷ LEFT OUTER JOIN ϸ ON ͷ.̻ = ϸ.̻ID; ``` - **右连接(RIGHT OUTER JOIN)**:返回右表的所有记录和左表中匹配的记录。如果左表中没有匹配,则用NULL填充左表中的列。 ```sql SELECT * FROM ͷ RIGHT OUTER JOIN ϸ ON ͷ.̻ = ϸ.̻ID; ``` ### 聚合函数 聚合函数用于执行一组行上的计算并返回单个值。常见的聚合函数包括`SUM`, `AVG`, `MAX`, `MIN`, `COUNT`等。例如: ```sql SELECT ̱.̱, ̱., SUM(a.ؿ) AS Ͽ, SUM(a.Ʊ) AS Ʊ, SUM(a.) AS FROM ̱ INNER JOIN (SELECT ID, Ͽ, 0 AS Ʊ, 0 AS FROM Ͽ UNION ALL SELECT ID, 0, Ʊ, 0 FROM Ʊ UNION ALL SELECT ID, 0, 0, FROM ) a ON ̱.̱ = a.ID GROUP BY ̱.̱, ̱. ORDER BY ̱.̱ ASC; ``` 此查询首先使用子查询构造了一个包含了不同列的新表,然后将其与原始表进行内连接。接着,使用`GROUP BY`对结果集进行分组,并使用聚合函数`SUM`计算每个组的总和。使用`ORDER BY`对结果按指定列排序。 通过这些复杂的SQL查询语句,我们可以高效地处理和检索大量数据,实现各种复杂的数据分析需求。熟练掌握这些技术对于任何从事数据库管理和开发工作的专业人士来说都是非常重要的。
select * from (select 单据ID,商品NO,sum(case when 库存商品台账.借贷='借' then -1*数量 else 数量 end) as 数量 from 库存商品台账 inner join 单据 on 库存商品台账.单据ID=单据.ID group by 单据ID,商品NO) a
select 库存商品台账.单据ID,库存商品台账.商品NO,sum(case when 库存商品台账.借贷='借' then -1*数量 else 数量 end)as 数量 from 单据 inner join 库存商品台账 on 库存商品台账.单据ID=单据.ID group by 库存商品台账.单据ID,库存商品台账.商品NO
select ID,SUM(回款) AS 回款,SUM(出库) AS 出库 FROM
(select aa as ID,AB as 回款,0 as 出库 from a
union all
select ba as ID,0 as 回款,bb as 出库 from b) cc
group by ID
use select小例
select 客商表.客商编号,客商表.客商名称,sum(a.回款数量) as 回款数量,sum(a.发票数量) as 发票数量,sum(a.出库数量) as 出库数量 from 客商表
inner join
(select 客商ID,回款数量,0 as 发票数量,0 as 出库数量 from 回款表
union all
select 客商ID,0,发票数量,0 from 发票表
union all
select 客商ID,0,0,出库数量 from 出库表) a
on 客商表.客商编号=a.客商ID
group by 客商表.客商编号,客商表.客商名称
order by 客商表.客商编号 asc
select 回款表.客商ID,回款表.回款数量,发票表.发票数量 from 回款表 inner join 发票表 on 回款表.客商ID=发票表.客商ID order by 回款表.客商ID
use select小例
select * from 回款表 inner join 出库表 on 回款表.客商ID=出库表.客商ID
select * from 回款表 full join 出库表 on 回款表.客商ID=出库表.客商ID
select * from 回款表 left outer join 出库表 on 回款表.客商ID=出库表.客商ID
select * from 回款表 right outer join 出库表 on 回款表.客商ID=出库表.客商ID
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助