MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのSELECTクエリにおけるAND演算子とOR演算子の優先順位を解説

MySQLのSELECTクエリでは、OR演算子よりもAND演算子の方が高い優先順位を持っています。本記事では、実際のクエリ例を使いながら、MySQLがどのようにAND演算子を優先的に評価するのかを確認していきます。

検証に使用するクエリ

まず、次のようなシンプルな論理演算のクエリを実行してみましょう。

mysql> select 0 AND 0 OR 1 as Result;

実行結果は以下の通りです。

+--------+
| Result |
+--------+
| 1      |
+--------+
1 row in set (0.00 sec)

もしORが優先されていたら?

ここで、もしOR演算子の方が優先順位が高いと仮定すると、上記のクエリはMySQLによって次のように解釈されるはずです。

select 0 AND (0 OR 1) as Result;

この場合、評価の流れは以下のようになります。

  1. まず「0 OR 1」が計算され、結果は 1
  2. 続いて「0 AND 1」が計算され、結果は 0

つまり、ORが優先されるなら結果は 0 になるはずです。しかし、実際の出力は 1 でした。このことから、この仮定は正しくないことが分かります。

実際の評価順序:ANDが先に処理される

実際には、MySQLはAND演算子を先に評価します。つまり、元のクエリは以下のように括弧で囲んだ場合と同じ意味になります。

select (0 AND 0) OR 1 as Result;

評価の流れを見てみましょう。

  1. まず「0 AND 0」が計算され、結果は 0
  2. 続いて「0 OR 1」が計算され、結果は 1

このように、ANDを先に評価することで、実際の出力である 1 と一致します。

まとめ

MySQLにおける論理演算子の優先順位は、AND > OR の順になっています。複数の条件を組み合わせたWHERE句などを書く際には、意図しない評価順序によるバグを防ぐためにも、括弧「( )」を使って評価順序を明示的に指定することをおすすめします。

  1. 【MySQL】単一クエリでUNION SELECTとIN句を組み合わせる方法

    はじめにMySQLでは、UNION SELECTとIN句を単一のクエリ内で組み合わせることができます。これにより、複数のテーブルのデータを統合した上で、特定の条件に一致するレコードだけを効率的に抽出できます。本記事では、2つのテーブルを作成し、サブクエリとUNIONを活用して目的のデータを取得する手順を具体例とともに解説します。最初のテーブルを作成するまず、以下のコマンドでテーブル「DemoTable1」を作成します。mysql> create table DemoTable1 -> ( -> StudentId int, -> StudentN

  2. MySQLで行の値を合計して結果を並べ替えるクエリの書き方

    MySQLで行の値を合計し、結果を並べ替える方法テーブル内の同じキーを持つ行の値を合計し、その結果を並べ替えたい場合には、GROUP BY句とORDER BY句を組み合わせて使用します。GROUP BYで対象の列ごとにデータをグループ化し、SUM関数で合計値を算出した後、ORDER BYで並べ替えるという流れになります。ここでは、生徒名と点数が登録されたテーブルを例に、生徒ごとの合計点を降順で取得する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1499 &nb