1、select *form 表1 where 姓名 in(select 姓名 from 表2 where grade>60) 
这句中的in与括号里面的是什么意思2、in和Exists有何区别?3、group by的意义
比如Select id as 编号,sub(金额) as 总金额 from 表 Group by id 
似乎不加Group by id 也返回了统计的金额和id,那么加了这个Group by id 又有什么意义呢??4、Group by还有个having的判断语句,与where区别在哪里?

解决方案 »

  1.   

    楼主你好,看到你提的问题就知道你刚接触SQL,建议你到网上查点资料看看,很多,你提的都是SQL最基本的问题。查点资料系统学习对你会有好处,希望这样回答你,你能满意。
      

  2.   

    1.IN 判断姓名在后面的结果集中是否存在
      括号里面的是一个子查询,将返回一个结果集
    2.EXISTS
      指定一个子查询,检测行的存在
      IN
      确定给定的值是否与子查询或列表中的值相匹配
    3.GROUP BY 分组,你可以试试你两个语句结果是不一样的
      上语句将ID相同的进行统计,返回总金额
    4.HAVING是对结果进行过滤
      WHERE是对原始记录进行过滤具体语法和解释可见帮助
      

  3.   

    1.in 中是一个结果集select * form 表1 where 姓名 in(select 姓名 from 表2 where grade >60)
    该语句查询的是:查询成绩及格的学生的所有信息。
    其实是包括两个查询:先获取成绩及格的学生姓名: select 姓名 from 表2 where grade >60
    然后获取这些学生姓名的成绩(因为 成绩及格的学生很多,是一个结果集),用in关键字,在这个结果集中的,都查询其全部信息。2.Exists 只返回“真”或者是“假”,并不需要返回一个结果集,子查询的内容不重要,重要的是满足有该条件的数据内容是否存在,只返回 true或者fasle.
    exists用来测试集合是否为空3.group 是用来分组统计的。你可以具体用两条语句的接过来进行分析就知道了。
    where先过滤分组,having是将获得的最后分组结果再进行过滤。执行顺序为:from子句
       |
    where子句
       |
    group by子句
       |
    having子句
       |
    select子句
       |
    order by 子句这样的一个sql语句执行顺序,理解having 和where就很简单了
      

  4.   

    SQL Server 2000里面的帮助,感觉写的很清楚!LZ自己去看看,还有示例的IN
    确定给定的值是否与子查询或列表中的值相匹配。EXISTS
    指定一个子查询,检测行的存在。 GROUP BY
    将表分为组。组可包含列名、结果或计算列。HAVING
    指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。通常在 GROUP BY 子句中使用它。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。
      

  5.   

    楼上大侠,如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。这个似乎不妥吧。
    在有些情况下,还是不一样的。包含在having子句中的列必须是数据组列。
      

  6.   

    WHERE 指的是分组前的信息过滤
    HAVING指的是分组后的信息过滤