join 连接查询

SQL库存查询技巧
本文介绍了一种复杂的SQL查询方法,用于精确地计算库存中物品的实际数量。通过联接多个表并利用聚合函数,该查询能够准确反映出物品的当前库存状态,包括在库数量及安全库存等关键信息。
SELECT a.ID, c.物品名称 AS 名称, a.总数, a.总数+c.数量-b.数量 AS 在库, [安全库存],[优选],[试作号],[型号], [封装], [厂商],[说明],[名称编号],[所属类别],[类别编号]
FROM
(
   (
     (SELECT ID,sum(数量) as 总数 from inputDetail group by id) AS a
      LEFT JOIN BorrowTable AS b ON a.id=b.借用物品编号
     )
      LEFT JOIN GivebackTable AS c ON a.id=c.物品编号
 )
LEFT JOIN 
( SELECT [ID],nz([InputDetail.安全库存],'') as 安全库存,[优选],[归属],nz([InputDetail.试作号],'') as 试作号,nz([InputDetail.型号],'') as 型号, nz([InputDetail.封装],'') as 封装,nz([InputDetail.厂商],'') as 厂商,
nz([InputDetail.说明],'')as 说明,[名称编号],[所属类别],[类别编号]   FROM InputDetail  GROUP BY [ID],nz([安全库存],'') ,[优选],[归属],nz([试作号],'') ,nz([InputDetail.型号],'') , nz([InputDetail.封装],''),nz([InputDetail.厂商],'') ,
 nz([说明],'') ,[名称编号],[所属类别],[类别编号]
)
AS d ON a.id=d.id
 
### JOIN连接查询使用方法 JOIN 连接查询用于将多个表中的行根据某些条件组合在一起。为了连接 n 个表在一起,最少需要 n - 1 个连接条件。例如,为了连接 4 个表,最少需要 3 个连接条件。在写一个连接表的 select 语句时,在列名前面用表名或者表的别名可以使语义清楚,并且加快了数据库访问[^1]。 ### JOIN连接查询的示例 #### 内连接(等值连接) 内连接只返回满足连接条件的数据。可以使用 `ON` 子句或 `USING` 语句。 ```sql -- 使用ON子句 SELECT e.last_name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id; -- 使用USING语句 SELECT e.last_name, department_name FROM employees e INNER JOIN departments d USING(department_id); ``` #### 左外连接 两个表在连接过程中除返回满足连接条件的行以外,还返回左表中不满足条件的行。 ```sql SELECT deptno, dname, empno, ename, job FROM dept LEFT JOIN emp USING(deptno); ``` #### 右外连接 两个表在连接过程中除返回满足连接条件的行以外,还返回右表中不满足条件的行。 ```sql SELECT deptno, dname, empno, ename, job FROM dept RIGHT JOIN emp USING(deptno); ``` #### 满外连接 两个表在连接过程中除返回满足连接条件的行以外,还返回两个表中不满足条件的所有行。 ```sql SELECT deptno, dname, empno, ename, job FROM dept FULL JOIN emp USING(deptno); ``` ### 与Oracle单行子查询返回多个行问题的关联 当使用查询作为条件时,可能会出现单行子查询返回多个行的错误。而 JOIN 连接查询可以避免这种问题。例如,原本使用查询的语句: ```sql SELECT emp.ename, emp.sal FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE dname = 'research'); ``` 如果子查询 `SELECT deptno FROM dept WHERE dname = 'research'` 返回多个 `deptno`,就会报错。可以将其转换为 JOIN 连接查询: ```sql SELECT emp.ename, emp.sal FROM emp JOIN dept ON emp.deptno = dept.deptno WHERE dept.dname = 'research'; ``` 这样就避免了单行子查询返回多个行的问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值