sql的题目

来源:百度知道 编辑:UC知道 时间:2024/04/30 04:01:59
职工表:emp1
职工号 仓库号 姓名 性别 工资
字段名: empno bno ename sex sal

仓库表:base
仓库号 城市 面积 创建时间
字段名: bno bcity mm createdate

订购单表:order1
供应商号 职工号 订购单号 订购日期 金额
字段名: sno empno ono odate money
-------------------------------------------------------
我这样做,为什么会显示出一百多行来呢??
----------------------------------------
显示城市不为空,工资在1200~2100之间,销售金额不在8000~12000之间的职工信息
SELECT emp1.empno,emp1.bno,emp1.ename,emp1.sex,emp1.sal
FROM emp1,order1,base
WHERE emp1.bno=base.bno
AND emp1.sal<1200 OR emp1.sal>2100
AND emp1.empno =order1.empno
AND order1.money<8000 OR order1.money>12000
是重复显示的

销售额应该是汇总数,而你是提取的单笔订单,所以多笔订单的会有重复,另外你遗漏了诚实非空的条件,最后你的OR条件没有用括号也会出错,修改如下:
SELECT emp1.empno,emp1.bno,emp1.ename,emp1.sex,emp1.sal, sum(money)
FROM emp1,order1,base
WHERE emp1.bno=base.bno AND base.bcity is not null
AND emp1.sal BETWEEN 1200 AND 2100
AND emp1.empno =order1.empno
GROUP BY 1,2,3,4,5 HAVING sum(money)<8000 OR sum(money)>12000