【文章內(nèi)容簡(jiǎn)介】
me, HireDate, City FROM EmployeesWHERE City = 39。London39。查詢結(jié)果如下: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如果您希望返回相反條件的員工,即返回那些不住在倫敦的員工,您應(yīng)該編寫以下語(yǔ)句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City 39。London39。您也可以使用大于、小于、大于等于、小于等于等運(yùn)算符。例如,若要獲取其雇傭日期等于某個(gè)給定日期或大于該日期的員工列表,您可以編寫以下語(yǔ)句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE HireDate = 39。1july199339。您可以得到以下結(jié)果行: 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當(dāng)然,我們可以編寫更復(fù)雜的條件:在 WHERE 子句中加入多個(gè)條件。如果我們希望了解哪些員工是在兩個(gè)給定日期之間雇傭的,我們可以編寫以下語(yǔ)句:SELECT EmployeeID, FirstName, LastName, HireDate, CityFROM EmployeesWHERE (HireDate = 39。1june199239。) AND (HireDate = 39。15december199339。)結(jié)果如下: 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 還有一個(gè)BETWEEN 運(yùn)算符,用于檢查某個(gè)值是否在兩個(gè)值之間(包括等于兩端的值)。這使我們可以將以前的查詢重新編寫為:SELECT EmployeeID, FirstName, LastName, HireDate, CityFROM EmployeesWHERE HireDate BETWEEN 39。1june199239。 AND 39。15december199339。我們也可以使用 NOT 運(yùn)算符來(lái)提取那些不在指定日期之間的行:SELECT EmployeeID, FirstName, LastName, HireDate, CityFROM EmployeesWHERE HireDate NOT BETWEEN 39。1june199239。 AND 39。15december199339。如果我們希望檢查一個(gè)列值是否等于多個(gè)值,那該怎么辦呢?如果只是兩個(gè)值,則很容易對(duì)每個(gè)值進(jìn)行測(cè)試,方法是,使用 OR 運(yùn)算符將它們連接在一起,則編寫的語(yǔ)句如下所示:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City = 39。London39。 OR City = 39。Seattle39。但是,如果您希望與三個(gè)、四個(gè)或更多值進(jìn)行比較,則上述方法就行不通了。在這種情況下,我們可以使用 IN 運(yùn)算符來(lái)對(duì)一組值進(jìn)行測(cè)試。如果我們希望查看 City 是否為 Seattle、Taa 或 Redmond,我們可以編寫以下語(yǔ)句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City IN (39。Seattle39。, 39。Taa39。, 39。Redmond39。)顯示以下結(jié)果: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我們也可以獲得所含結(jié)果的相反條件下的結(jié)果,即查詢那些 City 不在指定列表中的行:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE City NOT IN (39。Seattle39。, 39。Taa39。, 39。Redmond39。)最后要說(shuō)明的是,LIKE 運(yùn)算使我們可以使用通配符來(lái)執(zhí)行基本的模式匹配。在 Microsoft SQL Server 中,定義的通配符包含以下字符:通配符說(shuō)明_(下劃線)與任意單字符匹配%與包含一個(gè)或多個(gè)字符的字符串匹配[ ]與特定范圍(例如,[af])或特定集(例如,[abcdef])中的任意單字符匹配。[^]與特定范圍(例如,[^af])或特定集(例如,[^abcdef])之外的任意單字符匹配。以下一些示例可以幫助闡明上述規(guī)則。WHERE FirstName LIKE 39。_im39。 可以找到所有三個(gè)字母的、以 im 結(jié)尾的名字(例如,Jim、Tim)。WHERE LastName LIKE 39。%stein39。 可以找到姓以 stein 結(jié)尾的所有員工。WHERE LastName LIKE 39。%stein%39。 可以找到姓中任意位置包括 stein 的所有員工。WHERE FirstName LIKE 39。[JT]im39。 可以找到三個(gè)字母的、以 im 結(jié)尾并以 J 或 T 開始的名字(即僅有 Jim 和 Tim)WHERE LastName LIKE 39。m[^c]%39。 可以找到以 m 開始的、后面的(第二個(gè))字母不為 c 的所有姓。此處我們也選擇使用 NOT 運(yùn)算符:若要找到所有名字不以 M 或 A 開始的員工,我們可以編寫以下語(yǔ)句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesWHERE (FirstName NOT LIKE 39。M%39。) AND (FirstName NOT LIKE 39。A%39。)結(jié)果如下: 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ù):即定義一些條件,來(lái)確定哪些行將包括在從數(shù)據(jù)庫(kù)提取并返回的最終行集中。一旦我們確定了哪些列和行將包括在 SELECT 查詢的結(jié)果中,我們可能就希望控制這些行顯示的順序:對(duì)數(shù)據(jù)排序。若要對(duì)數(shù)據(jù)行排序,我們需要 ORDER BY 子句。ORDER BY 子句包括了一個(gè)或多個(gè)用于指定排序順序的列名。如果返回至第一批 SELECT 語(yǔ)句中的某條語(yǔ)句,我們可以用以下語(yǔ)句按 City 對(duì)其結(jié)果排序:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesORDER BY City默認(rèn)情況下,列的排序順序?yàn)樯颍◤淖钚≈档阶畲笾担?,上述查詢的結(jié)果如下所示: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如果我們希望列的排序順序?yàn)榻敌?,我們可以在列名后包?DESC 關(guān)鍵字。ORDER BY 子句支持使用多列。您可以包括以逗號(hào)分隔的多個(gè)列以按其排序:行將先按指定的第一列進(jìn)行排序,然后再按指定的下一列進(jìn)行排序。如果我們向 SELECT 子句添加 Country 字段并希望按 Country 和 City 排序,我們可以編寫以下語(yǔ)句:SELECT EmployeeID, FirstName, LastName, HireDate, Country, City FROM Employees ORDER BY Country, City DESC請(qǐng)注意,為了使語(yǔ)句顯得更有趣,我們已經(jīng)指定了 City 列的排序順序?yàn)榻敌颍◤淖畲笾档阶钚≈担?。Country 列的排序順序仍為升序。為了更清楚地了解到這一點(diǎn),我們可以把語(yǔ)句編寫為:SELECT EmployeeID, FirstName, LastName, HireDate, Country, City FROM Employees ORDER BY Country ASC, City DESC但是,默認(rèn)情況下,列的排序順序?yàn)樯颉K?,加上ASC不是必要的,并且很少這么做。此查詢返回的結(jié)果如下所示: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 子句中使用某一列時(shí),并不需要在選定的(返回的)多個(gè)列中包括這一列。如果我們不需要查看Country 值,只是對(duì)于將其作為主排序字段感興趣,可以編寫以下查詢:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM EmployeesORDER BY Country ASC, City DESC所得結(jié)果的排序順序與上一個(gè)查詢所得結(jié)果的排序順序相同:EmployeeIDF