【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ではbooleanはTINYINT(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)を理解しておくと、条件指定の幅が広がり、より柔軟なデータ取得が可能になります。ぜひ実際の開発でも活用してみてください。
-
MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法
はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 
-
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)レコードの挿入続い