天天看點

SQL謂詞 FOR SOME SQL謂詞 FOR SOME大綱參數描述複合條件多個表

SQL謂詞 FOR SOME

确定是否根據字段值的條件測試傳回記錄。

大綱

FOR SOME (table [AS t-alias]) (fieldcondition)           

複制

參數

  • table

    -

    Table

    可以是單個表,也可以是用逗号分隔的表清單。

    括号是必須的。

  • AS t-alias

    - 可選-前一個表名的别名。

    别名必須是有效的辨別符;

    它可以是一個分隔符。

  • fieldcondition

    -

    fieldcondition

    指定一個或多個引用一個或多個字段的條件表達式。

    字段條件用括号括起來。

    可以使用

    AND(&)

    OR(!)

    邏輯操作符在字段條件中指定多個條件表達式。

描述

FOR SOME

謂詞允許根據表中一個或多個字段值的布爾條件測試來決定是否傳回記錄。

如果

fieldcondition

計算結果為

true

,則傳回記錄。

如果

fieldcondition

計算結果為

false

,則不傳回記錄。

對于表(及其可選的

t-alias

)參數,必須使用括号分隔。

分隔括号對于字段條件參數也是強制性的。

允許(但不是必需的)在這兩組括号之間使用空格。

通常,

FOR SOME

用于确定是否根據另一個表中一條記錄的内容從一個表傳回一條記錄。

FOR SOME

還可用于确定是否根據同一表中記錄的内容從表中傳回記錄。

在後一種情況下,要麼傳回所有記錄,要麼不傳回任何記錄。

在下面的示例中,

For Some

傳回

Sample.Person

表中其

Name

字段值與

Sample.Employee

表中的

Name

字段值比對的所有記錄:

SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name)
ORDER BY Name           

複制

在下面的示例中,

FOR

根據同一表的布爾測試傳回

Sample.Person

表中的某些記錄。如果至少有一條記錄的年齡值大于

65

,此程式将傳回所有

Sample.Person

記錄。否則,它不傳回任何記錄。由于

Sample.Person

中至少有一條記錄的年齡字段值大于65,是以将傳回所有

Sample.Person

記錄:

SELECT Name,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE FOR SOME (Sample.Person)(Age>65)
ORDER BY Age           

複制

與大多數謂詞一樣,可以使用NOT邏輯運算符對某些謂詞進行倒置,如下例所示:

SELECT Name,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE NOT FOR SOME (Sample.Person)(Age>65)
ORDER BY Age           

複制

複合條件

一個字段條件可以包含多個條件表達式。這組條件包含在圓括号中。使用邏輯運算符

AND

OR

指定多個條件,這些條件也可以使用

SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name AND p.Name %STARTSWITH 'A')
ORDER BY Name           

複制

SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name OR  p.Name %STARTSWITH 'A')
ORDER BY Name           

複制

在以下示例中,對于某些記錄,傳回

Sample.Person

表中其

Name

字段值與

Sample.Employee

表中的

Name

字段值比對,并且其住所(

Home_State

)與其辦公室(

Office_State

)處于相同狀态的所有記錄:

SELECT Name,Home_State,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(p.Name=e.Name AND p.Home_State=e.Office_State)
ORDER BY Name           

複制

多個表

可以在字段條件之前以逗号分隔的清單形式指定多個表。

确定是否傳回記錄的條件可以引用從中選擇資料的表,也可以引用另一個表中的字段值。

表别名通常需要将每個指定的字段與其表關聯起來。

在下面的示例中,如果

Sample.Person

表中至少有一個名稱也在

Sample.Employee

表中,則傳回所有記錄。由于至少有一條記錄滿足此條件,是以将傳回所有

Sample.Person

記錄:

SELECT Name AS PersonName,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE FOR SOME (Sample.Employee AS e,Sample.Person AS p) (e.Name=p.Name)
ORDER BY Name           

複制

在下面的示例中,如果

Sample.Person

表中至少有一個名稱也在

Sample.Company

表中找到,則傳回所有記錄。由于人名和公司名(在此資料集中)從不相同,是以此條件不适用于任何記錄。是以,不傳回

Sample.Person

記錄:

SELECT Name AS PersonName,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE FOR SOME (Sample.Company AS c,Sample.Person AS p) (c.Name=p.Name)
ORDER BY Name           

複制

繼續閱讀