データベース

意外と間違えやすいSQLにおけるANDとORの違い

データベース

SQL文を書くときにANDやORを使ったことはありますか?
データベースを扱う上でSQLを正しく理解することは重要です。
SQLの中でもANDとORはつまづきやすいポイントの一つなので、ここで正しい理解を深めておきましょう。

ANDとORの違いとは

ANDとORはデータベースで複数の条件を指定して検索したい場合に使用し、WHEREの後にくることが多いです。
では、これら2つの違いは一体何なのでしょうか?

ANDとは?

SELECT id, name, age
FROM users
WHERE id = 1 AND age = 20

ANDを使った場合、左側の条件と右側の条件の両方を満たすデータを取得します。
日本語でいうのであれば「かつ」ですね。
上記の例では「idが1かつageが20」のデータを取得してきます。

ORとは?

SELECT id, name, age
FROM users
WHERE id = 1 OR age = 20

ORを使った場合は、左側の条件と右側の条件のどちらかを満たすデータを取得します。
日本語でいうのであれば「または」ですね。
上記の例では「idが1またはageが20」のデータを取得してきます。

例えば

シンプルなSQL文ならば間違えようがないと思いがちですが、以下のような場合はどうでしょうか?
次のようなデータがあるとします。

<usersテーブル>

idnameage
1太郎20
2花子22
3一郎21

このデータからidが1のデータとidが3のデータを取得したい場合、どのようなSQL文を書けば良いでしょうか?
正解のSQL文がこちらです。

SELECT id, name, age
FROM users
WHERE id = 1 OR id = 3

一見、ANDを使って取得できるかのように思えますが、ORを使わなければidが1と3の両方を取得できません。
ANDを使った場合、「idが1かつidが3」のデータを取得するということになります。
しかし実際には、「idが1かつidが3」のデータは存在しないので空のデータが返ってきます。
ORを使うことで「idが1またはidが3」のデータを取得するということになるので、2つのデータを取得することができます。

データを2つ取得する場合にも安易にANDを使うのではなく、日本語に直した場合に自分が望むデータが取得できるかを考えてみましょう。

まとめ

SQLに慣れてきたときほどミスをしやすくなるので、それぞれの文字がどのような働きをしているのか改めて確認することが大切です。
さまざまなSQLに触れて書き方の幅を広げていきましょう。

タイトルとURLをコピーしました