【文章內(nèi)容簡介】
me, HireDate, City FROM EmployeesWHERE City = 39。London39。查詢結果如下:EmployeeIDFirstNameLastNameHireDateCity5StevenBuchanan17/10/1993 12:00:00 London6MichaelSuyama17/10/1993 12:00:00 London7RobertKing2/1/1994 12:00:00 London9AnneDodsworth15/11/1994 12:00:00 London如果您希望返回相反條件的員工,即返回那些不住在倫敦的員工,您應該編寫以下語句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City 39。London39。您也可以使用大于、小于、大于等于、小于等于等運算符。例如,若要獲取其雇傭日期等于某個給定日期或大于該日期的員工列表,您可以編寫以下語句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE HireDate = 39。1july199339。您可以得到以下結果行: EmployeeIDFirstNameLastNameHireDateCity5StevenBuchanan17/10/1993 12:00:00 London6MichaelSuyama17/10/1993 12:00:00 London7RobertKing2/1/1994 12:00:00 London8LauraCallahan5/3/1994 12:00:00 Seattle9AnneDodsworth15/11/1994 12:00:00 London當然,我們可以編寫更復雜的條件:在 WHERE 子句中加入多個條件。如果我們希望了解哪些員工是在兩個給定日期之間雇傭的,我們可以編寫以下語句:SELECT EmployeeID, FirstName, LastName, HireDate, CityFROM EmployeesWHERE (HireDate = 39。1june199239。) AND (HireDate = 39。15december199339。)結果如下: EmployeeIDFirstNameLastNameHireDateCity2AndrewFuller14/8/1992 12:00:00 Taa4MargaretPeacock3/5/1993 12:00:00 Redmond5StevenBuchanan17/10/1993 12:00:00 London6MichaelSuyama17/10/1993 12:00:00 LondonSQL 還有一個BETWEEN 運算符,用于檢查某個值是否在兩個值之間(包括等于兩端的值)。這使我們可以將以前的查詢重新編寫為:SELECT EmployeeID, FirstName, LastName, HireDate, CityFROM EmployeesWHERE HireDate BETWEEN 39。1june199239。 AND 39。15december199339。我們也可以使用 NOT 運算符來提取那些不在指定日期之間的行:SELECT EmployeeID, FirstName, LastName, HireDate, CityFROM EmployeesWHERE HireDate NOT BETWEEN 39。1june199239。 AND 39。15december199339。如果我們希望檢查一個列值是否等于多個值,那該怎么辦呢?如果只是兩個值,則很容易對每個值進行測試,方法是,使用 OR 運算符將它們連接在一起,則編寫的語句如下所示:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City = 39。London39。 OR City = 39。Seattle39。但是,如果您希望與三個、四個或更多值進行比較,則上述方法就行不通了。在這種情況下,我們可以使用 IN 運算符來對一組值進行測試。如果我們希望查看 City 是否為 Seattle、Taa 或 Redmond,我們可以編寫以下語句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City IN (39。Seattle39。, 39。Taa39。, 39。Redmond39。)顯示以下結果:EmployeeIDFirstNameLastNameHireDateCity1NancyDavolio1/5/1992 12:00:00 Seattle2AndrewFuller14/8/1992 12:00:00 Taa4MargaretPeacock3/5/1993 12:00:00 Redmond8LauraCallahan5/3/1994 12:00:00 Seattle我們也可以獲得所含結果的相反條件下的結果,即查詢那些 City 不在指定列表中的行:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City NOT IN (39。Seattle39。, 39。Taa39。, 39。Redmond39。)最后要說明的是,LIKE 運算使我們可以使用通配符來執(zhí)行基本的模式匹配。在 Microsoft SQL Server 中,定義的通配符包含以下字符:通配符說明_(下劃線)與任意單字符匹配%與包含一個或多個字符的字符串匹配[ ]與特定范圍(例如,[af])或特定集(例如,[abcdef])中的任意單字符匹配。[^]與特定范圍(例如,[^af])或特定集(例如,[^abcdef])之外的任意單字符匹配。以下一些示例可以幫助闡明上述規(guī)則。WHERE FirstName LIKE 39。_im39。 可以找到所有三個字母的、以 im 結尾的名字(例如,Jim、Tim)。WHERE LastName LIKE 39。%stein39。 可以找到姓以 stein 結尾的所有員工。WHERE LastName LIKE 39。%stein%39。 可以找到姓中任意位置包括 stein 的所有員工。WHERE FirstName LIKE 39。[JT]im39。 可以找到三個字母的、以 im 結尾并以 J 或 T 開始的名字(即僅有 Jim 和 Tim)WHERE LastName LIKE 39。m[^c]%39。 可以找到以 m 開始的、后面的(第二個)字母不為 c 的所有姓。此處我們也選擇使用 NOT 運算符:若要找到所有名字不以 M 或 A 開始的員工,我們可以編寫以下語句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE (FirstName NOT LIKE 39。M%39。) AND (FirstName NOT LIKE 39。A%39。)結果如下: EmployeeIDFirstNameLastNameHireDateCity1NancyDavolio1/5/1992 12:00:00 Seattle3JanetLeverling1/4/1992 12:00:00 Kirkland5StevenBuchanan17/10/1993 12:00:00 London7RobertKing2/1/1994 12:00:00 London8LauraCallahan5/3/1994 12:00:00 SeattleORDER BY 子句直到現(xiàn)在我們一直在討論篩選數(shù)據(jù):即定義一些條件,來確定哪些行將包括在從數(shù)據(jù)庫提取并返回的最終行集中。一旦我們確定了哪些列和行將包括在 SELECT 查詢的結果中,我們可能就希望控制這些行顯示的順序:對數(shù)據(jù)排序。若要對數(shù)據(jù)行排序,我們需要 ORDER BY 子句。ORDER BY 子句包括了一個或多個用于指定排序順序的列名。如果返回至第一批 SELECT 語句中的某條語句,我們可以用以下語句按 City 對其結果排序:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesORDER BY City默認情況下,列的排序順序為升序(從最小值到最大值),上述查詢的結果如下所示:EmployeeIDFirstNameLastNameHireDateCity3JanetLeverling1/4/1992 12:00:00 Kirkland5StevenBuchanan17/10/1993 12:00:00 London6MichaelSuyama17/10/1993 12:00:00 London7RobertKing2/1/1994 12:00:00 London9AnneDodsworth15/11/1994 12:00:00 London4MargaretPeacock3/5/1993 12:00:00 Redmond1NancyDavolio1/5/1992 12:00:00 Seattle8LauraCallahan5/3/1994 12:00:00 Seattle2AndrewFuller14/8/1992 12:00:00 Taa如果我們希望列的排序順序為降序,我們可以在列名后包括 DESC 關鍵字。ORDER BY 子句支持使用多列。您可以包括以逗號分隔的多個列以按其排序:行將先按指定的第一列進行排序,然后再按指定的下一列進行排序。如果我們向 SELECT 子句添加 Country 字段并希望按 Country 和 City 排序,我們可以編寫以下語句:SELECT EmployeeID, FirstName, LastName, HireDate, Country, City FROM Employees ORDER BY Country, City DESC請注意,為了使語句顯得更有趣,我們已經(jīng)指定了 City 列的排序順序為降序(從最大值到最小值)。Country 列的排序順序仍為升序。為了更清楚地了解到這一點,我們可以把語句編寫為:SELECT EmployeeID, FirstName, LastName, HireDate, Country, City FROM Employees ORDER BY Country ASC, City DESC但是,默認情況下,列的排序順序為升序。所以,加上ASC不是必要的,并且很少這么做。此查詢返回的結果如下所示:EmployeeIDFirstNameLastNameHireDateCountryCity5StevenBuchanan17/10/1993 12:00:00 UKLondon6MichaelSuyama17/10/1993 12:00:00 UKLondon7RobertKing2/1/1994 12:00:00 UKLondon9AnneDodsworth15/11/1994 12:00:00 UKLondon2AndrewFuller14/8/1992 12:00:00 USATaa1NancyDavolio1/5/1992 12:00:00 USASeattle8LauraCallahan5/3/1994 12:00:00 USASeattle4MargaretPeacock3/5/1993 12:00:00 USARedmond3JanetLeverling1/4/1992 12:00:00 USAKirkland重要的是要注意要在 ORDER BY 子句中使用某一列時,并不需要在選定的(返回的)多個列中包括這一列。如果我們不需要查看Country 值,只是對于將其作為主排序字段感興趣,可以編寫以下查詢:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesORDER BY Country ASC, City DESC所得結果的排序順序與上一個查詢所得結果的排序順序相同:EmployeeIDF