我只学过这种:SELECT 数量,价格,数量*价格 AS 总价 FROM 购物清单   //AS在SELECT里面第一条语句
SELECT 姓名,(SELECT COUNT(*) FROM 订单主表 WHERE 订单主表.客户编号 = 客户表.客户编号) AS 总数 FROM 客户表这是一条嵌套查询,AS却不在SELECT里面第二条语句
(SELECT 姓名 FROM students) AS 学生姓名    //报错
既然第一条语句,AS可以在整个语句外面,为什么第二条语句却报错,我只学过AS在SELECT里面的,请问,到底规则是怎样的?

解决方案 »

  1.   


    AS 子句可用来更改结果集列的名称或为派生列分配名称。如果结果集列是通过对表或视图中某一列的引用所定义的,则该结果集列的名称与被引用列的名称相同。AS 子句可用来为结果集列分配不同的名称或别名。这样做可以增加可读性。例如: 复制代码 
    USE AdventureWorks2008R2;
    GO
    SELECT BusinessEntityID AS "Employee Identification Number"
    FROM HumanResources.Employee;
     在选择列表中,有些列进行了具体指定,而不是指定为对列的简单引用,这些列便是派生列。除非使用 AS 子句分配了名称,否则派生列没有名称。在以下示例中,如果删除 AS 子句,则使用 DATEDIFF 函数指定的派生列将会没有名称: 复制代码 
    SELECT SalesOrderID,
           DATEDIFF(dd, ShipDate, GETDATE() ) AS DaysSinceShipped
    FROM AdventureWorks2008R2.Sales.SalesOrderHeader
    WHERE ShipDate IS NOT NULL ;
     AS 子句是在 ISO 标准中定义的语法,用来为结果集列分配名称。下面是要在 SQL Server 2005 中使用的首选语法。 复制代码 
    column_name AS column_alias
     或者 复制代码 
    result_column_expression AS derived_column_name
     为了与 SQL Server 的早期版本兼容,Transact-SQL 还支持以下语法: 复制代码 
    column_alias = column_name
     或者 复制代码 
    derived_column_name = result_column_expression
     例如,上一个示例可用下列代码替换: 复制代码 
    SELECT SalesOrderID,
           DaysSinceShipped = DATEDIFF(dd, ShipDate, GETDATE() )
    FROM AdventureWorks2008R2.Sales.SalesOrderHeader
    WHERE ShipDate IS NOT NULL
     
      

  2.   

    --第二条语句修改:
    SELECT 姓名 AS 学生姓名 FROM students 
    --虽然第一个语句(SELECT COUNT(*) FROM 订单主表 WHERE 订单主表.客户编号 = 客户表.客户编号) AS 总数 是这样,但是这个也是作为前面一个select的查询列,因此也相当于给第一个select的查询列派生别名
      

  3.   

    但是,如果把AS 放在COUNT 后面,输出结果却有变化呢?别名“总数”没有了SELECT 姓名,(SELECT COUNT(*)  AS 总数 FROM 订单主表 WHERE 订单主表.客户编号 = 客户表.客户编号) FROM 客户表
    到底是怎样的哦?
      

  4.   

    你把AS 总数放到COUNT后面只是给()里起了个别名,但是"(SELECT COUNT(*) AS 总数 FROM 订单主表 WHERE 订单主表.客户编号 = 客户表.客户编号)"这条语句你是作为外面那个SELECT语句的一个字段,如果你没有用AS起别名的话,那就是没列名的字段.
      

  5.   

    as 放在谁后面就是给谁起个别名,针对字段的时候,后面要有from的。
    as放在表后面时就是给table起个别名了。
      

  6.   


    第一条语句:
    SELECT 姓名,(SELECT COUNT(*) FROM 订单主表 WHERE 订单主表.客户编号 = 客户表.客户编号) AS 总数 FROM 客户表这是一条嵌套查询,AS却不在SELECT里面第二条语句:
    (SELECT 姓名 FROM students) AS 学生姓名 //报错
    -------------------------------------------
    第一句可以看成:
    select 姓名,
           (xxxx)  --括号里的整句其实就是一个列,后面如果跟as就是给这个列起名。同时AS也包含在最外围的SELECT语句里呢
    from 客户表第二句:
    (xxxx)--括号里是完整表,那么AS在后面的话就代表给这个表起个别名。 但是你去想,单单一个表名,你执行它,会是什么结果?