您的位置:首页 > 其它

FROM子句

2013-08-15 11:11 141 查看
对于每个SELECT子句,FROM子句是强制性的。FROM子句主要用来指定检索数据的来源,数据的来源可以是若干个表或视图,数据表之间或视图名之间用逗号分隔。下面是FROM子句的语法:

[ FROM { < table_source > } [ ,...n ] ]

< table_source > ::=

table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]

| view_name [ [ AS ] table_alias ] [ WITH ( < view_hint > [ ,...n ] ) ]

| rowset_function [ [ AS ] table_alias ]

| user_defined_function [ [ AS ] table_alias ]

| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]

| < joined_table >

< joined_table > ::=

< table_source > < join_type > < table_source > ON < search_condition >

| < table_source > CROSS JOIN < table_source >

| [ ( ] < joined_table > [ ) ]

< join_type > ::=

[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]

[ < join_hint > ]

JOIN
参数说明:

table_source :指定要在 Transact-SQL语句中使用的表或视图(带或不带别名均可)。可在语句中使用多达256 个表。可将table 变量指定为表源。如果表或视图存在于同一台运行Microsoft®
SQL Server?的计算机的其它数据库中,应按格式 database.owner.object_name 使用完全合法的名称。如果表或视图存在于本地服务器之外的一台链接的服务器上,应按以下格式使用由四部分组成的名称:linked_server.catalog.schema.object。如果由四部分构造的表(或视图)名称使用OPENDATASOURCE函数作为名称中的服务器部分,则该名称也可用于指定表源。

table_name:表名。FROM 关键字之后的表和视图的顺序并不影响返回的结果集。当 FROM子句中出现重复名称时将报告错误。

[AS] table_alias:table_name、view_name 或 rowset_function 的别名,为方便起见而使用,或用于区分自联接或子查询中的表或视图。别名通常是一个缩短了的表名,用于在联接中引用表中的特定列。如果联接中的多个表中有相同名称的列存在,SQL
Server 要求必须使用表名或别名来限定列名。(如果定义了别名则不能使用表名)。

WITH ( < table_hint > ):指定表扫描、查询优化器要使用的一个或多个索引或查询优化器要对此表、此语句使用的锁定方法。

view_name:是视图名称。视图是一个"虚拟表",通常创建为一个或多个表中列的子集。

WITH ( < view_hint > ):指定索引视图扫描。默认情况下,视图在查询优化器处理查询之前展开。视图提示只能用在 SELECT 语句中,而不能用于 UPDATE、DELETE 或 INSERT 语句。

rowset_function:指定一个行集函数,该函数返回可替代表引用的对象。

user_defined_function:指定用户定义的函数,该函数返回一个表。如果用户定义的函数是一个内置的用户定义函数,则前面必须加两个冒号,如:FROM fn_listextendedproperty:derived_table是从数据库中检索行的子查询。derived_table 用作对外部查询的输入。

column_alias:替换结果集内列名的可选别名。在选择列表中放入每个列的一个别名,并将整个列别名列表用圆括号括起来。

joined_table:由两个或更多表的积组成的结果集。对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。

join_type:指定联接操作的类型。

INNER:指定返回每对匹配的行。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。

FULL [OUTER]:指定在结果集中包含左表或右表中不满足联接条件的行,并将对应于另一个表的输出列设为NULL。这是对通常由 INNER
JOIN 返回的所有行的补充。说明按此处指定的方法指定外联接或在 WHERE子句中使用旧式非标准的 *= 和 =* 运算符都是可行的。不能在同一语句中同时使用这两种方法。

LEFT [OUTER]:指定在结果集中包含左表中所有不满足联接条件的行,且在由内联接返回所有的行之外,将另外一个表的输出列设为NULL。

RIGHT [OUTER]:指定在结果集中包含右表中所有不满足联接条件的行,且在由内联接返回的所有行之外,将与另外一个表对应的输出列设为NULL。

join_hint:指定SQL
Server查询优化器为在查询的FROM子句中指定的每个联接使用一个联接提示或执行算法。

JOIN:指明所指定的联接操作应在给定的表或视图之间执行。

ON <search_condition>:指定联接所基于的条件。尽管经常使用列和比较运算符,但此条件可指定任何谓词。

(1)从表和视图中选择

例如:查询course表的信息,在查询分析器中输入SQL语句如下:

use student

select * from course
例如:查询用户建的视图newview的信息,在查询分析器中输入SQL语句如下:

select * from newview
其中,course是表的名称;newview是视图的名称。

(2)列以表的名称作为前缀

由于FROM子句指定的数据源可以是多个表,列名可能会有重复的,所以对不同的子句中的列以表的名称作为前缀也使它变得更为直观。这样就可以帮助消除当两个或更多个表有相同的列名时所引起的混乱。

例如:查询显示student表和grade表中的几个列,在查询分析器中输入SQL语句如下:

use student

select students.学号,

studnet.姓名,grade.学号,grade.课程成绩

from students,grade
列以表的名称作为前缀主要用于多个表连接。为了直观,即使有一个表,其中的列也可以用表的名称作为前缀。

例如:查询course表中所有列的信息,在查询分析器中输入SQL语句如下:

use student

select course.* from course
(3)在一个FROM子句中使用子查询

在FROM子句中使用一个子查询的结果作为查询的源表,同时也可以给源表起一个别名。

例如:在students数据库中,查询course表作为子查询并起别名为a,然后再查询别名是a的表中某些列。在查询分析器中输入SQL语句如下:

use student

select a.课程代号,a.课程内容 from (select * from course ) a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: