19

このSQLで括弧を使用する理由を誰かが知っているかどうか疑問に思っていました。したがって、形式は次のようになります。

名前がAまたはBで始まる従業員の名前、場所、およびサービスの部門(フランス語からの大まかな翻訳)。

私は次のように答えました:

SELECT service.nom_serv, localite.ville, localite.departemen
FROM service, localite, employe
WHERE service.code_loc=localite.code_loc
AND employe.service=service.code_serv
AND ((employe.nom LIKE 'A%') OR (employe.nom LIKE 'B%'))

基本的に、最後のANDがWHEREに関係している場合、名前がAまたはBで始まる従業員をSQLで選択するために、括弧なしで単純に行うことはできませんか?そのように括弧を配置すると、どのような違いがありますか?そして、なぜかっこが二重に使用されているのですか?または、ANDが先行しているため、最後の句でORを優先するのでしょうか。

4

3 に答える 3

24

SQL Serverの演算子の優先順位を見てください(指定していませんが、すべてのRDBMSで同じだと思います)。これが意味するのは、 1がORよりも緊密に結合する前に、AND(括弧なし)が評価されるということです。

したがって、特定のケースでは、括弧なしで、条件は次のようになります。

  • employe.service=service.code_serv AND employe.nom LIKE 'A%'

また

  • employe.nom LIKE 'B%'

1評価の順序はSQLで意図的に指定されていないため、左から右または優先順位の評価を保証する言語よりも多くの可能な並べ替えが可能です。

于 2011-05-11T17:02:22.463 に答える
15

優先度ではなく、句のグループ化を指定するために使用します。オプティマイザが最適な優先度を作成するため、SQLでは優先度を指定できません。

AND ()

OR1つのステートメントで両方の条件を取ります。したがって、どちらかが真の場合、それもAND真です。内側の括弧は必要ありませんが、分離を視覚化するのに役立ちます。

外側の括弧がないと、最後の句が真であるものもすべて許可されます。

于 2011-05-11T16:59:18.893 に答える
2

余分な括弧があります。数学のルールは、論理を明確にするために括弧を追加することです。この場合、括弧をすべて削除すると、間違った答えが返されます。あなたが持っているのはAND((b)OR(c))です。すべての括弧を削除すると、(a OR b)AND(a OR c)から(a AND b)ORcになります。これは正しくありません。

于 2011-05-11T17:07:27.557 に答える