---
title: "SQLのAND・OR・NOTとは？排他的論理和をWHERE句で表す方法【基本情報技術者試験】"
description: "SQLのAND・OR・NOTを、真理値表とベン図の考え方で整理し、「どちらか一方だけ」を表す排他的論理和をWHERE句で作る方法を解説します。科目Aの選択肢判断と科目Bの条件式の読み方にもつながる記事です。"
last_modified_at: "2026-07-17"
canonical_url: "https://stemtazoo.github.io/fe/sql-logical-operators/"
section: "fe"
---

## まず結論

SQLの`AND`・`OR`・`NOT`は、`WHERE`句で複数の条件を組み合わせるために使います。

基本情報技術者試験では、次の対応を押さえると選択肢を切りやすくなります。

```text
A AND B
→ AとBの両方を満たす

A OR B
→ AまたはBの少なくとも一方を満たす

NOT A
→ Aを満たさない
```

さらに、**AかBのどちらか一方だけを満たす**条件は、次のように表せます。

```sql
(A OR B) AND NOT (A AND B)
```

これは排他的論理和、XORの考え方です。

## 直感的な説明

二つのグループを考えます。

```text
A：国語が平均点以上
B：数学が平均点以上
```

「どちらか一方だけ平均点以上」を選びたいなら、次の順番で考えます。

```text
1. AまたはBを満たす人を集める
2. AとBの両方を満たす人を除く
```

式にすると、次のとおりです。

```sql
(A OR B) AND NOT (A AND B)
```

ベン図では、二つの円の重なりを除いた左右の部分です。

## 定義・仕組み

### AND

`AND`は、左右の条件が両方とも真のときだけ真になります。

```sql
WHERE A AND B
```

| A | B | A AND B |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 偽 |
| 偽 | 真 | 偽 |
| 偽 | 偽 | 偽 |

### OR

`OR`は、左右の条件の少なくとも一方が真なら真になります。

```sql
WHERE A OR B
```

| A | B | A OR B |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 真 |
| 偽 | 真 | 真 |
| 偽 | 偽 | 偽 |

### NOT

`NOT`は、条件の真偽を反転します。

```sql
WHERE NOT A
```

| A | NOT A |
|---|---|
| 真 | 偽 |
| 偽 | 真 |

### 排他的論理和

排他的論理和は、AとBのどちらか一方だけが真のときに真になります。

| A | B | XOR |
|---|---|---|
| 真 | 真 | 偽 |
| 真 | 偽 | 真 |
| 偽 | 真 | 真 |
| 偽 | 偽 | 偽 |

SQLでは、次のように表せます。

```sql
WHERE (A OR B) AND NOT (A AND B)
```

```text
A OR B
→ 少なくとも一方を満たす

NOT (A AND B)
→ 両方を満たすものを除く
```

このテーマは、基本情報技術者試験の「データベース」「論理演算」「プログラミング」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、`WHERE`句の条件式を読み、どの行が抽出されるかを判断する問題が出ます。

| 日本語の条件 | SQLの考え方 |
|---|---|
| AとBの両方 | `A AND B` |
| AまたはBの少なくとも一方 | `A OR B` |
| Aではない | `NOT A` |
| AかBのどちらか一方だけ | `(A OR B) AND NOT (A AND B)` |
| AもBも満たさない | `NOT (A OR B)` |

特に注意したいのは、`OR`が「どちらか一方だけ」ではないことです。

```text
A OR B
→ 両方とも真の場合を含む
```

両方を除きたい場合は、次の形にします。

```sql
(A OR B) AND NOT (A AND B)
```

### 矛盾する条件を見抜く

次のような式は、結果が0件になります。

```sql
(A AND B) AND NOT (A AND B)
```

同じ条件と、その否定を同時に満たすことはできないからです。

```sql
(A OR B) AND NOT (A OR B)
```

これも同様に矛盾します。

## 科目Bでどう使う？

科目Bでは、疑似言語やプログラム中の条件分岐を読むときに役立ちます。

たとえば、次の条件を考えます。

```text
if (A or B) and not (A and B)
```

この条件は、AとBのどちらか一方だけが真のときに処理を実行します。

トレースするときは、次の順番で確認します。

```text
1. Aの真偽を確認する
2. Bの真偽を確認する
3. A OR Bを計算する
4. A AND Bを計算する
5. NOTを反転する
6. 最後のANDを計算する
```

複雑な条件式は、かっこの内側から小さく分けて計算すると読みやすくなります。

## よくある誤解・混同

| 誤解 | 正しい理解 |
|---|---|
| `OR`はどちらか一方だけを表す | `OR`は両方が真の場合も含む |
| `AND`は条件を広げる | `AND`は両方を満たす必要があるため、通常は対象を絞る |
| `NOT`は式全体に自動で掛かる | `NOT`がどの条件に掛かるかは、かっこで確認する |
| `(A OR B) AND NOT (A AND B)`は両方を選ぶ | 両方の重なりを除き、片方だけを選ぶ |
| 同じ条件とその否定をANDで結んでも結果が出る | 矛盾するため結果は0件になる |

### `NOT A AND B`と`NOT (A AND B)`の違い

かっこの位置にも注意します。

```sql
NOT A AND B
```

これは、通常は次のように解釈します。

```sql
(NOT A) AND B
```

一方、

```sql
NOT (A AND B)
```

は、AとBが両方とも真である場合を除く条件です。

試験では、迷いを減らすためにかっこを付けて読むのがおすすめです。

## まとめ（試験直前用）

- `AND`は両方、`OR`は少なくとも一方、`NOT`は否定
- `OR`は両方が真の場合も含む
- どちらか一方だけなら、`(A OR B) AND NOT (A AND B)`
- 同じ条件とその否定を`AND`で結ぶと、結果は0件
- 複雑な条件式は、かっこの内側から小さく分けて読む
- **ORで集めて、ANDの重なりを除けばXOR**
