也就是说你要写出来两个代码呀
SELECT 
             studentId,nameId
       FROM
             StudentTable
       ORDEREDBY
              studentId,nameId   
SELECT 
             studentId,nameId
       FROM
             StudentTable
       WHERE
             nameId IN (1~9999)

解决方案 »

  1.   

    两个SELECT出现在同一条SQL中?请问,SELECT语句的句法是不是固定好的?
    既必须:
        SELECT 
        FROM            
        WHERE            
        GROUPBY    
        ORDEREDBY

       SELECT 
       FROM 
       ORDEREDBY           
       WHERE            
       GROUPBY   
    是错误的? 
      

  2.   

    SQL 的 WHERE, GROUP BY, ORDER BY 的顺序是固定执行的,和你怎么写没有关系,而且 GROUP BY 和 ORDER BY 必须写到 WHERE 后面,ORDER BY 则必须写到 GROUP BY 的后面。
      

  3.   

    这麽写会报错了:
         SELECT 
       FROM 
       ORDEREDBY           
       WHERE            
       GROUPBY   

    另外,能不能简单说一下
        SELECT 
        FROM            
        WHERE            
        GROUPBY    
        ORDEREDBY
    的执行流程?
      

  4.   

    SELECT 
       FROM 
       ORDEREDBY           
       WHERE            
       GROUPBY因为 ORDER BY 在 WHERE 之前,肯定会报错!你指的什么执行流程?
      

  5.   

    第二个SQL语句不对。。
    第一个流程问题??
    SELECT 
                 studentId,nameId
           FROM
                 StudentTable
           WHERE
                 nameId IN (1~9999)
           GROUPBY
                  studentId,nameId
           ORDEREDBY
                  studentId,nameId   先执行SELECT,生成一个关于studentId,nameId的临时结果集1,再执行WHERE??
    上面是按照WHERE的条件从数据表中选择相应的记录放到结果集中,group by是对上面的结果集进行分组。ORDEREDBY则是对以上得到的数据集在group by的基础上排序。不影响group by的结果。。
      

  6.   

    1、GROUP BY 是分开写的 不是连到一起写的 ORDER BY 也是。2、先从数据库中取出符合 WHERE 条件的数据,然后在这个数据中进行 GROUP BY 操作,也就是将 studentId 相同的 和 nameId 也相同的绑定成一组,这个里面再根据 ORDER BY 排序,也就是说有如下数据
    studentId     nameId
    1         2
    2         6
    1         5
    1         7
    1         3
    2         2
    2         2执行上面的查询,你会得到
    1    2
    1    3
    1    5
    1    7
    2    2
    2    6这样的结果,因为有两个 2  2  ,所以只取了其中一个。
      

  7.   

    真不好意思,我没说清楚,重说。
    假设,有一个studentInfor的表,它有四个字段,分别是name,studentId,date,sex.
     发一个SQL如下:
         SELECT
              name,studentId
         FROM 
              studentInfor
         WHERE
              studentId IN (1~999)
         GROUPBY
              name,studentId
         HAVING
              name!='jiaoyong'
         ORDEREDBY
               name
    它的执行流程是不是如下:
        1, 数据库先根据WHERE子句,从studentInfor表中将studentId在1到999的记录选出来,形成一个临时表1。
        2,再根据GROUPBY子句,将临时表1中的记录按name,studentId分组,name,studentId相同的记录合成一个记录,形成临时表2.该表只有name,student两个字段。
        3,然后,再根据HAVING子句将临时表2中符合条件进的记录取出,形成临时表3。
        4,根据SELECT,从临时表3中提取符合条件的字段,形成临时结果集。
        5,根据ORDEREDBY子句,对临时结果集进行排序,形成结果集。
    对不对啊?
    也就是说,SELECT子句执行的表是那些符合条件的记录的集合,而不是原表?
    书上说,在SELECT子句下直接出现的字段或在集合函数以及其它函数中出现的字段必须出现在GROUPBY子句中,我才有了上述的想法。
    可是,书上又列了下面一个例子:
           SELECT 
                 studentId,nameId,AVG(date) AS Adate
           FROM
                 StudentTable
           WHERE
                 nameId IN (1~9999)
           GROUPBY
                  studentId,nameId
           ORDEREDBY
                  studentId,nameId  
    date分明没出现在GROUPBY子句中,书上确说这是对的。把我搞糊涂了。这个例子与我的猜想背道而驰,因为按我的猜想,SELECT子句执行的表既然是已对记录进行选择分组合并后的表,那这个表应不含date字段,那SELECT子句怎麽执行的?若我的猜想不对,正确的对SELECT语句的执行流程是怎样的?
       
      

  8.   

    1、SELECT 只是代表这个是查询语句,他的所有执行的表都可以说是 SELECT 到的,第一个里面没有必要用 HAVING 子句,直接写到 WHERE 里就好了。2、在 SELECT 中不能出现没有 GROUP BY 的字段,这个不是所有的 SQL 服务器都这样的,在 MYSQL 中是可以读出别的字段的。而 Oracle 中不行,我不知道你用的什么数据库,所以也不能肯定你的这种写法是否正确。 GROUP BY 子句只是将记录分组,并不是说就将别的字段去掉了。
      

  9.   

    刚才又好好的测试了一下,终于理解了是怎么回事:在带有 GROUP BY 的SELECT 中,不能在 SELECT 查询的字段中直接使用没有在 GROUP BY  中出现的字段,比如:
    select id,no_groupby from test group by id;这样的是错误的,
    但是你可以对这些没有被 GROUP 的字段进行运算,并且返回运算的结果,比如这样就是正确的:
    select id,max(no_groupby),min(no_groupby),avg(no_groupby) from test group by id;明白了吗? 所以这样更解释了,你的 SELECT 执行流程根本就是错误的。
      

  10.   

    谢谢指点,那麽,正确的SELECT 执行流程是怎样的?能解释一下吗?
      

  11.   

    就是楼上说的,你知道了流程也一样无法优化,程序流程并不和你写的查询的顺序有关,只和你使用了什么子句有关系,你还是好好去研究各个子句的功能吧,那样才能真正的优化你的 SQL 查询