MySQLのPOWER()関数を列のデータ値に対して使う方法を解説
MySQLのPOWER()関数は、通常は特定の数値同士のべき乗計算に使われますが、テーブルの列(カラム)のデータ値に対しても利用できます。その場合、第1引数(底)には列名を指定し、第2引数(指数)には任意の数値を指定します。こうすることで、該当するすべての行の値について、一括でべき乗計算を実行できるのです。
サンプルテーブル「Employee」
ここでは、以下のようなレコードを持つテーブル「Employee」を例に説明します。
mysql> Select * from Employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.00 sec)
POWER()関数で列の値をべき乗するクエリ
次のクエリでは、ID列のデータ値を2乗しています。SELECT文の中で、第1引数に列名「ID」、第2引数に指数「2」を指定している点に注目してください。
mysql> Select ID, POWER(ID,2) from Employee; +----+-------------+ | ID | POWER(ID,2) | +----+-------------+ | 1 | 1 | | 2 | 4 | | 3 | 9 | | 4 | 16 | | 5 | 25 | | 6 | 36 | | 7 | 49 | | 8 | 64 | +----+-------------+ 8 rows in set (0.63 sec)
実行結果を見ると、ID列の各行の値(1〜8)がそれぞれ2乗され(1、4、9、16、25、36、49、64)、新しい計算結果の列として表示されていることがわかります。元のテーブルのデータが書き換えられるわけではなく、あくまでクエリの実行時に計算された結果が返される点も重要です。
AS句で別名を付けるとより見やすい
出力される計算結果の列には、AS句を使って別名(エイリアス)を付けることもできます。
mysql> Select ID, POWER(ID,2) AS ID_2乗 from Employee;
このようにすると、「POWER(ID,2)」という関数名そのままではなく、わかりやすい列名で結果を確認できます。
NULL値が含まれる列を指定した場合
なお、対象の列にNULLが含まれている場合、その行のPOWER()関数の結果もNULLになります。たとえばSalary列のようにNULLを含む列を第1引数に指定すると、NULLの行だけ結果がNULLとして返されるため、必要に応じてIFNULL()関数などと組み合わせて対処するとよいでしょう。
-
MySQLでQUOTE()関数を使って列の値をシングルクォートで囲み、テーブルを更新する方法
MySQLでは、QUOTE()関数を使用することで、列の値をシングルクォート(一重引用符)で囲むことができます。さらに、このQUOTE()関数をUPDATE句と組み合わせれば、既存のテーブルの値を「引用符で囲まれた状態」に一括で更新することも可能です。 使い方は非常にシンプルで、QUOTE()関数の引数として、対象となる列名を指定するだけです。これにより、指定した列のすべての行に対して、値が自動的にシングルクォートで囲まれます。 以下の例では、「examination_btech」というテーブルの「Course」列の値をシングルクォートで囲んだうえで、テーブル全体を更新しています。 実行例
-
LPAD・RPAD関数で文字列を埋め込みながらMySQLテーブルを更新する方法
MySQLでは、LPAD()関数やRPAD()関数とUPDATE文を組み合わせることで、列の値に文字列を埋め込み(パディングし)、その結果でテーブルを直接更新することができます。ここでは、サンプルテーブル「examination_btech」を使って、具体的な手順を解説します。RPAD()関数で末尾に文字列を追加して更新する例例えば、「course」列の値の末尾に「(CSE)」という文字列を追加し、その結果でテーブル自体も更新したい場合は、次のようなクエリを実行します。mysql> Update examination_btech set course = RPAD(Course, 11