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

【MySQL】別のフィールドのブール値に基づいて特定のフィールドのみを取得するクエリの書き方

はじめに

MySQLでは、あるカラム(フィールド)に格納されたブール値(TRUE/FALSE)を条件として、別のカラムの値だけを抽出したいケースがよくあります。本記事では、isMarriedのようなブール型カラムを条件に、従業員名だけを取得する方法を、テーブル作成から順を追って具体例とともに解説します。

サンプルテーブルの作成

まず、デモ用のテーブルを作成します。

mysql> create table DemoTable
(
   EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   EmployeeName varchar(40),
   isMarried boolean
);
Query OK, 0 rows affected (0.57 sec)

このテーブルは、自動採番されるEmployeeId、従業員名を格納するEmployeeName、結婚しているかどうかを示すisMarriedの3つのカラムで構成されています。なお、MySQLではbooleanTINYINT(1)のエイリアスであり、TRUEは「1」、FALSEは「0」として内部的に扱われる点に注意してください。

テストデータの挿入

続いて、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable(EmployeeName,isMarried) values('Chris',true);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Robert',false);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Mike',false);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Bob',true);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Tom',true);
Query OK, 1 row affected (0.12 sec)

登録データの確認

SELECT文を使用して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、以下の出力が得られます。

+------------+--------------+-----------+
| EmployeeId | EmployeeName | isMarried |
+------------+--------------+-----------+
|          1 | Chris        |         1 |
|          2 | Robert       |         0 |
|          3 | Mike         |         0 |
|          4 | Bob          |         1 |
|          5 | Tom          |         1 |
+------------+--------------+-----------+
5 rows in set (0.00 sec)

ブール値に基づいて特定のフィールドのみを取得するクエリ

それでは本題です。isMarriedがTRUE(1)であるレコードから、EmployeeNameだけを取得するには、WHERE句で条件を指定します。

mysql> select EmployeeName from DemoTable where isMarried=true;

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

+--------------+
| EmployeeName |
+--------------+
| Chris        |
| Bob          |
| Tom          |
+--------------+
3 rows in set (0.00 sec)

覚えておきたい補足ポイント

  • where isMarried=trueは、where isMarried=1や単にwhere isMarriedと記述しても同じ結果になります。
  • 逆に未婚(FALSE)の従業員名を取得したい場合は、where isMarried=falseまたはwhere isMarried=0を指定します。
  • SELECTで必要なカラムだけを明示的に指定することで、不要なデータ転送を抑えられ、クエリのパフォーマンス向上にもつながります。

まとめ

このように、WHERE句でブール型カラムの値を条件に指定するだけで、別のフィールドの値だけを簡単に抽出できます。MySQLにおけるブール値の扱い(TRUE=1、FALSE=0)を理解しておくと、条件指定の幅が広がり、より柔軟なデータ取得が可能になります。ぜひ実際の開発でも活用してみてください。

  1. MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法

    はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 

  2. MySQLで最大の累積値とその出現回数を取得するクエリの書き方

    カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い