從多個表中訪問數(shù)據(jù) 我們已討論了如何訪問單個表中的數(shù)據(jù)。從多個表中訪問數(shù)據(jù)也是可能的。從多個表中訪問數(shù)據(jù)稱為連接表(joining a table)。 1、 CROSS JOIN(笛卡爾積) CROSS JOIN是簡單地、不加任何約束條件地把表組合。CROSS JOIN后結(jié)果的行數(shù)是連接前兩個表行數(shù)的乘積。如果對兩個分別有好幾千行的表進(jìn)行連接,則結(jié)果是不可想象的。 2、 INNER JOIN INNER JOIN是組合兩個表最常用的方法。INNER JOIN是基于一個判別式進(jìn)行的,這個判別式稱為連接條件。連接條件和WHERE子句一起定義。連接條件由來自兩個表中的列組成,并使用一個比較條件來對列的值進(jìn)行比較。通過比較的值包含在結(jié)果數(shù)據(jù)集中,以下是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 子句中可為表定義別名,并在任何地方都可用別名代替真名。 注意:如果作為連接條件的列中有空值,則空值不能和任何值匹配,因此結(jié)果中不包含有空值的行。 3、 Left Outer JOIN 在Inner JOIN中,只有在兩個表中匹配的行才能在結(jié)果數(shù)據(jù)集中。但在Left Outer JOIN中,所有左邊表中的行都出現(xiàn)在結(jié)果數(shù)據(jù)集中,如果左邊表中的某一行在右邊表中沒有匹配的行,則以空值取代右邊表中的值和它連接。 語法如下:(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相似,不同的是把右邊的表作為外部表(所有右邊表中的行包含在結(jié)果數(shù)據(jù)集中)。 語法如下: Select <select_list> FROM <table1> RIGHT OUTER JOIN <table2> ON <table1>.<column name> = <table2>.<column name> 5、 Full Outer JOIN 在Full Outer JOIN中,所有兩個表中的行都包含在結(jié)果數(shù)據(jù)集中。 語法如下: Select <select_list> FROM <table1> FULL OUTER JOIN <table2> ON <table1>.<column name> = <table2>.<column name>
Case語句 當(dāng)對不同條件產(chǎn)生不同的結(jié)果值時,可使用Case語句。 Case語句計(jì)算所有定義的條件,并按條件是否為真而返回結(jié)果。 語法如下: CASE [<input_expression>] WHEN <when_expression> THEN <result_expression> [ELSE <else_expression>] END Input_expression是任何有效的SQL Server表達(dá)式或布爾表達(dá)式。 When_expression是任何有效的SQL Server表達(dá)式或布爾表達(dá)式。這個表達(dá)式和Input_expression比較,如果Input_expression沒有定義,則When_expression應(yīng)該是一個布爾表達(dá)式。 Result_expression是任何有效的SQL Server表達(dá)式。如果When_expression和Input_expression的比較返回TRUE(如果定義了Input_expression)或When_expression的值為TRUE,則計(jì)算表達(dá)式,并返回其結(jié)果。否則計(jì)算Else_expression中的表達(dá)式,并返回其結(jié)果。 例如: SELECT au_fname,au_lname, State=CASE state WHEN ‘CA’ THEN ‘California’ WHEN ‘KS’ THEN ‘Kansas’ END FROM authors
UNION
UNION語句把兩個或多個查詢的結(jié)果組合成一個結(jié)果集。 語法如下: SELECT <select_list> FROM <table_list> WHERE <join_condition> UNION [ALL] SELECT <table_list> FROM <table_list> WHERE <join_condition> ALL關(guān)鍵字指定重復(fù)的數(shù)據(jù)也將包含在最終結(jié)果數(shù)據(jù)集中。如果需要,一個查詢中可以有許多UNION語句。所有Select_list應(yīng)該有相同數(shù)目的列,且是相同或兼容的數(shù)據(jù)類型。
Go命令 Go命令用來標(biāo)志一個查詢批處理(query batch)的結(jié)束。查詢批處理是TSQL語句的集合,這些語句集合在一起執(zhí)行。Go與Osql或SQL Server Query Analyzer一起使用。