典型的SQL SELECT语句的第一个逻辑组成是FROM子句。在简单的SQL SELECT语句中,FROM子句包含一个表。然而,FROM子句也可合并多个数据源和多种数据源的数据。单个SQL SELECT语句中可访问的表的最大数量是256个。
FROM子句是SQL语句其余部分的基础。要把一个表列放在输出中,或在WHERE条件下访问,或放在ORDER BY中,该表列就必须在FROM子句中。
一、可能的数据源
SQL非常灵活,且在FROM子句可接受7个截然不同类型的数据源的数据。
1、本地SQL Server表
2、子查询作为派生表,也称为子选择或内联视图。公用表表达式(CTE)(参见:http://www.cnblogs.com/kissdodog/archive/2013/06/24/3153012.html)的功能类似于子查询,但在查询中可以多次引用。
3、视图或存储的SELECT语句,可以像表一样在FROM子句中引用。
4、表值用户定义的函数返回行和列。
5、颁布式数据源使用OPENQUERY()和其他分布式函数从其他SQLServer、其他数据库平台(例如:Microsoft Access、Oracle、Forxpro)或应用程序(如Excel)中提取数据。
6、全文搜索可以返回包含有关哪些行包括特定词的信息的数据集。
7、透视在FROM子句内创建交叉表。
XML数据源使用XQuery。
SQL Server 2008添加了两个数据源:
1、行构造函数使用values()子句构建硬编码的行。
2、来自插入、更新或删除命令的插入和删除的虚拟表,可使用output子句以子查询的形式将它们传递到外部查询。
二、表别名
在FROM子句中可为数据源指派名。一旦数据源有别名,就必须使用这个新名称引用它。在某些情况下,数据源必须有别名,下面的代码访问Fun表,但有查询中用A引用它:
--From Table As Table Alias
Use Mydb --数据库名称
SELECT A.FunID,A.FunName
From fun AS A;
使用关键字AS为列或数据源指派别名,这是可选的,通常可忽略。但作为一项规则,应该总是包括AS关键字。
三、列名称
如果数据库对象的名称,如表名或列名,与SQ保留字相冲突,可以将它放在方括号内让SQL清楚它的对象名称。注意,方括号物定于SQL Server且不属于ANSI SQL标准的一部分。
虽然在数据库对象名称之间包含空格是非常低劣的做法,但它仍是可行的。如果是这种情况,指定数据库对象时必须有方括号。Northwind示例数据库中的Order Details表说明了这一点:
USE Northwind
SELECT OrderID,ProductID,Quantity
From[Order Details]
四、完全限定的名称
表的完全且正确的名称不仅是表的名称,而且称为完全限定的名称,有时非正式地称为4部分组成的名称:
Server.database.schema.table
如果表处于当前数据库中,那么不需要服务器和数据库名称,因此当SQL Server开发人员讨论限定的表名称时,通常指两部分组成的表名称。
出岔子编写较简洁的代码外,使用限定的名称有两个特别的好处:
1、同一个表可能存在于多个架构中。如果是这样的话,那么选择的架构基于用户的默认架构。限定名称可避免意外地使用了错误的表。
2、查询引擎重用查询执行计划需要限定的表名称,这对于提高性能非常重要。