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

MySQLのMAKE_SET()関数を使ってテーブルの列の値をセットとして取得する方法

MySQLで列の値を値のセットとして返すには?

MySQLのMAKE_SET()関数を利用すると、テーブルの各列の値を1つのセット(集合)としてまとめて取得することができます。この関数は、第1引数に渡したビットフラグ(bits)に基づいて、対応する位置にある文字列を取り出し、カンマ区切りのセット形式で結果を返します。ビットに該当する値がNULLの場合、その値は結果に含まれません。

サンプルデータの確認

ここでは、以下のようなデータを持つ「Student_Name」テーブルを例に説明します。

mysql> Select * from Student_Name;
+---------+-------+---------+
| FName   | Mname | Lname   |
+---------+-------+---------+
| Rahul   | NULL  | Singh   |
| Gaurav  | Kumar | NULL    |
| Harshit | NULL  | Khurana |
| Yash    | Pal   | Sharma  |
+---------+-------+---------+
4 rows in set (0.00 sec)

このテーブルには「FName(名)」「Mname(ミドルネーム)」「Lname(姓)」の3つの列があります。NULLが含まれている行もある点に注目してください。

FNameとLnameの値をセットとして取得する

例えば、「FName」と「Lname」の列の値だけを組み合わせてセットを作りたい場合は、次のようにビットフラグに「1|4」を指定してクエリを実行します。

mysql> Select MAKE_SET(1|4,fname,mname,lname) AS '(Fname,Lname)' from Student_name;
+-----------------+
| (Fname,Lname)   |
+-----------------+
| Rahul,Singh     |
| Gaurav          |
| Harshit,Khurana |
| Yash,Sharma     |
+-----------------+
4 rows in set (0.00 sec)

結果の解説

ビットフラグ「1|4」は、2進数で考えると「001 | 100 = 101」を意味します。つまり、1番目と3番目の引数(fname と lname)が有効になります。

  • Rahul,Singh … fname(Rahul)とlname(Singh)が両方とも有効なため、両方が返されています。
  • Gaurav … lnameがNULLのため、fname(Gaurav)のみが返されます。NULL値はセットに含まれません。
  • Harshit,Khurana … mnameがNULLですが、指定外の位置なので影響はなく、fnameとlnameが返されます。
  • Yash,Sharma … mname(Pal)は2番目の引数ですが、ビット2が立っていないため除外され、fnameとlnameのみが返されます。

このように、MAKE_SET()関数ではビットフラグの組み合わせを変えることで、必要な列だけを柔軟に選択し、セット形式の文字列として取得できます。例えば「1|2」を指定すればfnameとmnameを、「2|4」を指定すればmnameとlnameを対象にすることも可能です。

  1. MySQLテーブルのカラム名を取得する方法【SHOW・DESCRIBE活用ガイド】

    SHOWコマンドでカラム名を取得するMySQLでは、SHOWコマンドを使うことで、テーブルのカラム(列)名を簡単に確認できます。カラム名だけでなく、データ型やNULL許可、キー情報なども一緒に取得できるのが特徴です。基本構文show columns from テーブル名;サンプルテーブルの作成まず、動作確認用に「DemoTable」というテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName varchar(

  2. MySQLの関数からテーブル(結果セット)を返す方法|ストアドプロシージャの使い方

    MySQL関数ではテーブルを返せない結論から言うと、MySQLの関数(FUNCTION)からテーブルや結果セットを返すことはできません。MySQLの関数が返せるのは、文字列、整数、CHAR型などのスカラー値に限られます。テーブル形式のデータ(複数行・複数列の結果セット)を返したい場合は、関数ではなくストアドプロシージャ(Stored Procedure)を使用しましょう。この記事では、実際にサンプルテーブルを作成し、ストアドプロシージャで結果セットを取得する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> creat