日期:2014-05-18  浏览次数:20791 次

一道数据库面试题
有两张表
表一AAA
字段:

类别     库存数量
A           1000
B           5000

表二   BBB

类别     售出数量
A             100
B             200
A             200
B             300

用一条SQL语句查询出个类别的剩余数量


高手请指教....

------解决方案--------------------
select ( AAA.库存数量-BBB. 售出数量) as sl from AAA,BBB where AAA.类别=BBB.类别

------解决方案--------------------
select b.cname,b.cnum-c.cnum
from (select a.cname as cname,sum(a.cnum) as cnum
from test2 a
group by a.cname) c inner join test1 b on c.cname=b.cname
其中test1是你说的那个库存量表,test2是那个售出表,你把表名改下就成
------解决方案--------------------
oracle实现:

查所有类别:
select a.类别,b.库存数量-nvl(b.售出数量,0)
from AAA a, (select c.类别,sum(c.售出数量) 售出数量 from BBB c group by(c.类别)) b
where a.类别=b.类别(+)

查某个类别:
select a.类别,b.库存数量-nvl(b.售出数量,0)
from AAA a, (select c.类别,sum(c.售出数量) 售出数量 from BBB c where c.类别=?) b
where a.类别=b.类别(+)
and a.类别=?
------解决方案--------------------
C代表这个(select a.cname as cname,sum(a.cnum) as cnum
from test2 a
group by a.cname) 语句查询出来的结果集,on后面是内联接中的条件语句
------解决方案--------------------
c 是select a.cname as cname,sum(a.cnum) as cnum from test2 a group by a.cname 这句话的结果,至于on的作用
举个例子:
假设a表和b表的数据是这样的。
a b
id name  id stock 
1  a 1 15
2 b 2 50
3 c  

select * from a inner join b on a.id=b.id
这个语法是连接查询中的内连接,它产生的结果是
两个表相匹配的记录出现在结果列表中。
根据上面的表,出现的结果是这样的
a.id name b.id stock
1   a 1 15
2 b 2 50
----------------------------
select * from a,b where a.id=b.id
这个语法是内连接的另外一种写法,其执行结果与inner join 一样

--------------------------------

select * from a left/right join b on a.id=b.id
这个是外连接语法中的左外连接或右外连接
如果是左外连接的话,它将显示a表的所有记录,
select a.*,b.* from a left join b on a.id=b.id
查询的结果是这样的:
a.id name b.id stock
1   a 1 15
2 b 2 50
3 c null null 
--------------------------------------------
如果是右外连接的话,它将显示b表的所有记录,
select a.*,b.* from a right join b on a.id=b.id
查询的结果是这样的:
a.id name b.id stock
1   a 1 15
2 b 2 50

------解决方案--------------------
完全同意 freedom2001(天翔) 的SQL语句
------解决方案--------------------
sql语句我差
------解决方案--------------------


select (aaa.库存数量-(sum(bbb.输出数量))) as num from aaa,bbb where aaa.类别=bbb.类别 group by 库存数量