MySQL 速習チュートリアル

MySQL NOT演算子

1. MySQL NOT演算子とは

NOT演算子は、WHERE句において「指定した条件に一致しない」すべてのレコードを返すために使用されます。これは、条件の結果が「真(True)」であれば「偽(False)」に、「偽(False)」であれば「真(True)」に反転させる論理操作を行います。

以下のSQLは、国(Country)が「Germany」ではないすべての顧客を選択します。

/* 国がGermanyではない顧客をすべて抽出 */
SELECT * FROM Customers
WHERE NOT Country = 'Germany';

上記の例では、NOT演算子が = 演算子と組み合わされています。
NOT演算子は、以下のように他の演算子と組み合わせて特定のデータを除外するためにも頻繁に使用されます。

  • NOT LIKE
  • NOT BETWEEN
  • NOT IN
  • IS NOT NULL
  • NOT EXISTS

2. NOT演算子の構文

SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;

3. デモ用データベース

本チュートリアルでは、Northwindサンプルデータベースを使用します。
以下は、「Customers」テーブルから抜粋したデータです。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

4. AND、OR、NOTの組み合わせ

ANDORNOT演算子を組み合わせて複雑なフィルタリングを行うことも可能です。

以下のSQLは、国が「Germany」であり、かつ都市が「Berlin」または「Stuttgart」である顧客を選択します(複雑な式には括弧を使用します)。

/* 国がGermanyで、かつ都市がBerlinまたはStuttgartのレコードを抽出 */
SELECT * FROM Customers
WHERE Country = 'Germany' AND (City = 'Berlin' OR City = 'Stuttgart');

次のSQLは、国が「Germany」ではなく、かつ「USA」でもないすべての顧客を選択します。

/* 国がGermanyでもUSAでもない顧客を抽出 */
SELECT * FROM Customers
WHERE NOT Country = 'Germany' AND NOT Country = 'USA';

5. NOT LIKE演算子

NOT LIKE演算子は、指定した文字列パターンに一致しない行を除外するために使用されます。
通常、以下の2つのワイルドカードと共に使用されます。

  • %(パーセント記号):0文字、1文字、または複数文字を表す
  • _(アンダースコア記号):単一の文字を表す

以下のSQLは、名前が「A」で始まらないすべての顧客を選択します。

/* 顧客名が 'A' で始まらないレコードを選択 */
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'A%';

6. NOT BETWEEN演算子

NOT BETWEEN演算子は、指定された範囲(境界値を含む)の外側に値がある行を選択するために使用されます。数値、テキスト、または日付値に使用できます。

以下のSQLは、CustomerIDが10から60の範囲内にはないすべての顧客を選択します。

/* CustomerIDが10から60の間にない顧客を選択 */
SELECT * FROM Customers
WHERE CustomerID NOT BETWEEN 10 AND 60;

7. NOT IN演算子

NOT IN演算子は、指定したリストまたはサブクエリの結果セットに含まれる値に一致しない行を除外するために使用されます。

以下のSQLは、都市が「Paris」でも「London」でもないすべての顧客を選択します。

/* 都市がParisまたはLondonではない顧客を選択 */
SELECT * FROM Customers
WHERE City NOT IN ('Paris', 'London');

8. 「〜より大きくない」条件(NOT Greater Than)

SQLにおいて「〜より大きくない」という条件は、通常「〜以下(<=)」として表現されますが、NOT演算子を使って記述することも可能です。

以下のSQLは、CustomerIDが50より大きくないすべての顧客を選択します。

/* CustomerIDが50を超えない(50以下の)顧客を選択 */
SELECT * FROM Customers
WHERE NOT CustomerID > 50;

9. 「〜より小さくない」条件(NOT Less Than)

同様に、「〜より小さくない」という条件は「〜以上(>=)」を意味します。

以下のSQLは、CustomerIDが50より小さくないすべての顧客を選択します。

/* CustomerIDが50未満ではない(50以上の)顧客を選択 */
SELECT * FROM Customers
WHERE NOT CustomerID < 50;