從多個表中訪問數據 我們已討論了如何訪問單個表中的數據。從多個表中訪問數據也是可能的。從多個表中訪問數據稱為連接表(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一起使用。