从多个表中访问数据 我们已讨论了如何访问单个表中的数据。从多个表中访问数据也是可能的。从多个表中访问数据称为连接表(joining a table)。 1、 CROSS JOIN(笛卡尔积) CROSS JOIN是简单地、不加任何约束条件地把表组合。CROSS JOIN后结果的行数是连接前两个表行数的乘积。如果对两个分别有好几千行的表进行连接,则结果是不可想象的。 2、 INNER JOIN INNER JOIN是组合两个表最常用的方法。INNER JOIN是基于一个判别式进行的,这个判别式称为连接条件。连接条件和WHERE子句一起定义。连接条件由来自两个表中的列组成,并使用一个比较条件来对列的值进行比较。通过比较的值包含在结果数据集中,以下是Inner JOIN的语法: 语法1:(ANSI 92) Select <select_list> FROM <table1> INNER JOIN <table2> ON <table1>.<column name> = <table2>.<column name> 语法2: Select <select_list> FROM <table1>,<table2> WHERE <table1>.<column name> = <table2>.<column name> 在FROM 子句中可为表定义别名,并在任何地方都可用别名代替真名。 注意:如果作为连接条件的列中有空值,则空值不能和任何值匹配,因此结果中不包含有空值的行。 3、 Left Outer JOIN 在Inner JOIN中,只有在两个表中匹配的行才能在结果数据集中。但在Left Outer JOIN中,所有左边表中的行都出现在结果数据集中,如果左边表中的某一行在右边表中没有匹配的行,则以空值取代右边表中的值和它连接。 语法如下:(ANSI 92) Select <select_list> FROM <table1> LEFT OUTER JOIN <table2> ON <table1>.<column name> = <table2>.<column name> 4、 Right Outer JOIN Right Out JOIN和Left Outer JOIN相似,不同的是把右边的表作为外部表(所有右边表中的行包含在结果数据集中)。 语法如下: Select <select_list> FROM <table1> RIGHT OUTER JOIN <table2> ON <table1>.<column name> = <table2>.<column name> 5、 Full Outer JOIN 在Full Outer JOIN中,所有两个表中的行都包含在结果数据集中。 语法如下: Select <select_list> FROM <table1> FULL OUTER JOIN <table2> ON <table1>.<column name> = <table2>.<column name>
Case语句 当对不同条件产生不同的结果值时,可使用Case语句。 Case语句计算所有定义的条件,并按条件是否为真而返回结果。 语法如下: CASE [<input_expression>] WHEN <when_expression> THEN <result_expression> [ELSE <else_expression>] END Input_expression是任何有效的SQL Server表达式或布尔表达式。 When_expression是任何有效的SQL Server表达式或布尔表达式。这个表达式和Input_expression比较,如果Input_expression没有定义,则When_expression应该是一个布尔表达式。 Result_expression是任何有效的SQL Server表达式。如果When_expression和Input_expression的比较返回TRUE(如果定义了Input_expression)或When_expression的值为TRUE,则计算表达式,并返回其结果。否则计算Else_expression中的表达式,并返回其结果。 例如: SELECT au_fname,au_lname, State=CASE state WHEN ‘CA’ THEN ‘California’ WHEN ‘KS’ THEN ‘Kansas’ END FROM authors
UNION
UNION语句把两个或多个查询的结果组合成一个结果集。 语法如下: SELECT <select_list> FROM <table_list> WHERE <join_condition> UNION [ALL] SELECT <table_list> FROM <table_list> WHERE <join_condition> ALL关键字指定重复的数据也将包含在最终结果数据集中。如果需要,一个查询中可以有许多UNION语句。所有Select_list应该有相同数目的列,且是相同或兼容的数据类型。
Go命令 Go命令用来标志一个查询批处理(query batch)的结束。查询批处理是TSQL语句的集合,这些语句集合在一起执行。Go与Osql或SQL Server Query Analyzer一起使用。