mysql concat group_concat functions with examples
このチュートリアルでは、MySQL CONCATをSelect関数とGROUP_CONCAT関数で使用する方法を、構文と実際の例とともに説明します。
CONCATは、MySQLでサポートされている文字列関数で、2つ以上の文字列を結合または結合して、単一の値として返します。 CONCATという名前は、動詞の連結に由来します。これは、2つ以上のエンティティを結合することを意味します。
このチュートリアルでは、クエリの例とMySQLが提供するCONCAT関数の他のバリエーションを使用してCONCATの使用法を学習します。
学習内容:
MySQLCONCAT関数
構文:
CONCAT関数の構文は単純です。結合する必要のある文字列のコンマ区切りのリストが含まれているだけです。
CONCAT(string1, string2, ------ stringN)
CONCAT関数で期待される入力タイプと出力タイプはどちらも文字列です。数値が指定されている場合でも、最終的な出力は文字列になります。
例えば:
#1) 入力タイプを文字列として使用します。
SELECT CONCAT('string1', 'string2'); //Output string1string2
#二) 数値/浮動小数点数として入力します。
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
SELECTステートメントでのCONCATの使用
CONCATは、SELECTクエリと一緒に最も広く使用されており、2つ以上の列のデータを1つの列に結合できます。
古典的な例としては、firstNameフィールドとlastNameフィールドに別々の列があるテーブルがあるとします。したがって、データを表示するときに、firstNameとlastNameの代わりにFullNameを表示したいとします。 CONCATを利用して、選択したデータを適宜表示することができます。
これが実際に動作するのを見てみましょう。
経験豊富な人のためのqaテスト面接の質問
まず、フィールド(ID、名、姓、年齢、生年月日、部門)を含むStudentテーブルを作成します。
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
テーブルにダミーデータを挿入します。
INSERT INTO student values (1,'Darren', 'Still', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 'Kumar', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 'Singh', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 'Johnson', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 'Shamungam', 20, '2000-05-12', 'TRAINEE');
次に、SELECTクエリを記述して、フルネームを名とラストネームを組み合わせた連結文字列として取得します。
SELECT CONCAT(fname,lname) as fullName from student
//出力
フルネーム |
---|
ダレンスティル |
AbhishekKumar |
AmitSingh |
スティーブンスジョンソン |
KartikShamungam |
上記の出力でわかるように、名と名前の間にスペースがないため、読みにくくなっています。 CONCAT関数を更新して、連結する文字列として余分なスペース文字を含めることにより、スペースを追加できます。
SELECT CONCAT(fname, ' ', lname) as fullName from student
これにより、エントリごとに、間に余分なスペースができます。
GROUPでのCONCATの使用
MySQLは、GROUP_CONCATと呼ばれる別の関数を提供します。
これはCONCATに似ていますが、CONCATを使用して列間で値を結合する方法が異なりますが、GROUP_CONCAT関数は主に行間で値を連結するために使用されます。
MySQLGROUP_CONCAT構文
SELECT col1, col2, ..., colN GROUP_CONCAT ( (DISTINCT) col_name1 (ORDER BY clause) (SEPARATOR str_val) ) FROM table_name GROUP BY col_name2;
したがって、GROUP_CONCAT関数では、次のことがわかります。
- col_name: これは、連結する列です。値の繰り返しを避けるために、オプションのDISTINCT句があります。
- 注文者: ORDER BY句は、連結リスト内の順序を指定するために使用され、オプションです。
- セパレーター: これもオプションの句であり、連結された値の間にカスタムセパレータを定義するために使用できます。デフォルトでは、コンマ(、)が区切り文字です。
MySQLGROUP_CONCATの例
上記のStudentテーブルの例で、次のことを実行するとします。 連結された部門のリストを見つける 。
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
上記のクエリでは、
- 出力には、department列で使用可能なすべての部門のコンマ区切りのリストが含まれています。
- また、繰り返し値があります( 例えば、 ENGINEERING)DISTINCT句を指定していないため。
DISTINCT句を使用して同じ例を試してみましょう。
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
これは、部門列の個別の値を返すだけです。
次に、カスタム区切り文字を「|」として追加し、ORDER BY句を追加して、部門名を昇順で並べ替えます
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
したがって、上記のクエリでは、
- 部門名は昇順で並べ替えられます。
- 繰り返し値は返されません。
- 区切り文字が「、」から「|」に変更されました‘。
どれどれ 各部門の学生の連結値を一覧表示する別の例。
ここでは、学部の2人の学生が同じ名前を持っている可能性があるため、DISTINCTは必要ありません。
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
//出力
部門 | 学生 |
---|---|
会計 | アビシェク |
エンジニアリング | アミット|ダレン |
人事 | スティーブン |
研修生 | Kartik |
CONCATとGROUP_CONCATの組み合わせ
上記の例で、nameとlastnameのCONCATENATED値を各部門とともに表示するとします。
これを実現するために、GROUP_CONCATコマンド内でCONCATを使用できます。
以下でこれを実際に見てみましょう:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//出力
部門 | 学生 |
---|---|
会計 | Abhishek kumar |
エンジニアリング | アミット・シン|ダレン・スティル |
人事 | スティーブンジョンソン |
研修生 | Kartik shamungam |
CONCATを使用したNULL値の処理
CONCATは文字列引数を期待し、出力を文字列として返します。
CONCAT関数への入力がNULLの場合、出力もNULLになります。
SELECT CONCAT('string1','string2', NULL); //Output NULL
NULL値を処理するために、CONCAT関数内でifNullステートメントを使用できます。これにより、列のNULL値の場合にデフォルト値または空白値が保証されます。
上記の例のように、CONCATに2つの文字列と1つのNULL値があるとします。
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
上記のクエリでは、NULL値(またはNULLになる可能性のある列)を囲むifNull関数を追加しました。NULLの一致が成功した場合は「hello」を返し、それ以外の場合は実際の列値を返します。
したがって、出力では、NULL文字列について、「hello」が出力されていることがわかります。
よくある質問
Q#1)MySQLの列をマージするにはどうすればよいですか?
回答: MySQLには、1つ以上のテーブルの2つ以上の列を結合またはマージし、マージされた値を出力に返すCONCAT関数が用意されています。
Q#2)MySQLのconcatメソッドをいつどこで使用する必要がありますか?
回答: CONCATメソッドは通常、2つ以上の列を結合し、それらを1つの列として表すクエリ結果の表示に対して使用されます。
例えば、 名と名前を別々の列として含むテーブルがあり、それらをfullNameという単一のエンティティとして表示したい場合は、CONCAT関数を使用して、名前と名前の列の値をマージし、それらを一緒に表示できます。単一の列として。
Q#3)MySQL GROUP_CONCATとは何ですか?
回答: CONCATと同様に、MySQLGROUP_CONCATもテーブル全体で値を連結するために使用されます。ここでの違いは、CONCATを使用して列間で値を結合するのに対し、GROUP_CONCATは行間で値を結合する機能を提供することです。
GROUP_CONCATとCONCATの両方を組み合わせて、目的の結果を返すことができることに注意することも重要です。
GROUP_CONCATは通常、行全体で値をグループ化または結合するシナリオで使用されます。 例えば - 商品名とカテゴリを含む商品テーブルがあり、特定のカテゴリに対するすべての商品をコンマ区切り値として一覧表示する場合は、GROUP_CONCATを使用できます。
クエリ:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
Q#4)CONCATコマンドを使用して区切り文字を指定するにはどうすればよいですか?
回答: CONCATを使用すると、連結する個別の文字列として区切り文字を指定できます。
例えば: 区切り文字として「|」を使用する場合、CONCATコマンドで、連結する列名の間にこの文字列を指定できます。
SELECT CONCAT(fname, '| ', lname) as fullName from student
Q#5)CONCATコマンドとCONCAT_WSコマンドの違いは何ですか?
回答: CONCAT_WSは、MySQLが提供するCONCATの別のバリエーションであり、ユーザーが連結される列の区切り文字を指定できるようにします。
これは、より多くの列をマージし、連結されるすべての列に同じセパレーターを使用する場合に、CONCATよりも優先されます。
例: fname、lname、addressのフィールドを持つテーブルの学生がいるとします。
ここで、これら3つのフィールドすべてを連結し、「|」で区切ります。
使用する CONCAT 、連結する別の文字列としてセパレータを指定する必要があります。
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
と一緒に CONCAT_WS セパレータを1回指定するだけです。
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
結論
このチュートリアルでは、MySQLCONCAT関数とその使用法について学習しました。この関数は、通常、異なる列に対して値をマージするためのクエリ結果を表示するときに非常に役立ちます。
また、CONCAT関数の2つの異なるバリエーションについても学びました。1つはCONCAT_WSを使用して区切り文字と連結し、もう1つはMySQLGROUP_CONCAT関数を使用して行の値を連結します。