web-dev-qa-db-ja.com

OR句でのSQL括弧の使用

この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を優先しますか?

18
angela

SQL Serverの Operator Precedence を見てください(指定していませんが、すべてのRDBMSで同じだと思います)。これが意味することは、そのAND(括弧なし)です。 前に評価されます1 ORよりも強く結合します。

したがって、特定のケースでは、括弧がない場合、条件は次のとおりです。

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

OR

  • employe.nom LIKE 'B%'

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

22

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

AND ()

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

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

13
Dustin Laine

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

1
Dave