第二题:以下三个SQL语句的结果有什么不同?还是相同?(1)select table1.id,table1.数量,table2.名称
from table2 left outer join table1
on table2.id=table1.id and table1.数量>35---table1.数量>35 的所有行都被显示
(2)select table1.id,table1.数量,table2.名称
from table1 left outer foin table2
on table2.id=table1.id and table1.数量>35
---table2 的所有行都被显示
(3)select table1.id, table1.数量,table2.名称
from table1 left outer join table2
on table2.id=table1.id
where table1.数量>35
---同(1)

解决方案 »

  1.   

    (1)Select 编码,名称,sum(数量) as 数量 from
    (select 编码,名称,数量 from tableA
    union
    select 编码,名称,数量 from tableB)
    as a group by 编码,名称
    (2)select 编码,名称,sum(数量) as 数量 from
    (select 编码,名称,sum(数量) as 数量 from tableA group by 编码,名称union
    select 编码,名称,sum(数量) as 数量 from tableB group by 编码,名称)
    as a group by 编码,名称---结果相同
      

  2.   

    第一题:结果有可能不相同(1)如果有相同的行就会去掉再统计,结果不精准
    (2)如果子统计有相同的行也会去掉再统计,也不准确第二题:
    (1)table2与table1中数量>35的行作left outer join,显示table2中的所有记录,与table1相关数据>35的值将显示,其它为NULL(2)table1与table2作left outer join,显示table1中的所有记录,但显示table2中的值时只与table1相关数据>35的值,其它为NULL(3)table1的数据>35的行与table2作left outer join
      

  3.   

    第一題若遇到相同的行就不精确,把union 改成 union all就一樣了.第二题:以下三个SQL语句的结果有什么不同?还是相同?(1)select table1.id,table1.数量,table2.名称
    from table2 left outer join table1
    on table2.id=table1.id and table1.数量>35---table1.数量>35 的所有行都被显示
    (2)select table1.id,table1.数量,table2.名称
    from table1 left outer foin table2
    on table2.id=table1.id and table1.数量>35
    ---table2 的所有行都被显示
    (3)select table1.id, table1.数量,table2.名称
    from table1 left outer join table2
    on table2.id=table1.id
    where table1.数量>35
    ---同(1)
      

  4.   

    我想说的是,第2题的解说中,yown(yong)回答的是正确的。而xhy818(zh1860)的回答是错误的。(3)与(1)是不同的。