-
MySQLでGROUP BYとGROUP_CONCATを使って文字列を連結する方法と区切り文字の指定方法
MySQLでGROUP BYを使用しながら文字列を連結するには、GROUP_CONCAT()関数にSEPARATORパラメータを組み合わせて使います。区切り文字にはカンマ(,)やスペース( )など、任意の文字を指定できます。基本構文SELECT yourColumnName1,GROUP_CONCAT(yourColumnName2 SEPARATOR yourValue) as anyVariableName FROM yourTableName GROUP BY yourColumnName1;それでは、実際にテーブルを作成しながらこの構文の動きを確認していきましょう。サンプルテーブルの作
-
Windows 10でMySQLコマンドラインを開く方法をわかりやすく解説
Windowsのコマンドプロンプト(cmd)からMySQLコマンドラインを開くには、ユーザー名「root」と設定済みのパスワードを使ってログインします。この記事では、初心者の方にもわかるように、手順を一つずつ丁寧に解説します。基本のコマンド構文まず全体の流れを把握しましょう。基本的な構文は以下のとおりです。cd \ (Enterキーを押す)cd Program Files\MySQL\MySQL Server 8.0\bin (Enterキーを押す)C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -uroot -p (Enterキーを押
-
MySQLクエリの出力をUTF-8に変換する方法:CONVERTとCASTの使い方
MySQLクエリの出力をUTF-8に変換する方法 MySQLクエリの出力結果をUTF-8に変換するには、CAST()関数またはCONVERT()関数を使用します。ここでは、MySQLバージョン8.0.12を使って具体的な手順を解説します。まず、使用中のバージョンを確認しておきましょう。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec) utf8ではなくutf8mb4を推奨 MySQL 8.0では「utf
-
MySQLで1文字だけをパターンマッチする方法(%の代わりに_を使用)
MySQLで任意の1文字に一致させる方法MySQLのLIKE句によるパターンマッチングでは、「%」は0文字以上の任意の文字列に一致しますが、厳密に1文字だけに一致させたい場合は、代わりにアンダースコア(_)を使用します。基本構文は以下のとおりです。SELECT *FROM yourTableName WHERE yourColumnName LIKE yourString_;この構文の動作を理解するために、実際にテーブルを作成して確認してみましょう。サンプルテーブルの作成まず、卒業年を格納するテーブルを作成します。テーブル作成クエリは次のとおりです。mysql> create table
-
MySQLでSQL ServerのSCOPE_IDENTITY()に相当する関数は?LAST_INSERT_ID()の使い方を実例付きで解説
SQL ServerのSCOPE_IDENTITY()関数に相当する機能は、MySQLではLAST_INSERT_ID()です。この関数を使うことで、直前に挿入されたレコードの自動採番ID(AUTO_INCREMENT値)を取得できます。基本構文SELECT LAST_INSERT_ID();このクエリを実行すると、そのセッション内で最後に挿入されたレコードのIDが返されます。LAST_INSERT_ID()の動作を実例で確認ここでは、主キー列を持つテーブルを作成し、last_insert_id()の実際の動作をデモ形式で確認していきます。ステップ1:2つのテーブルを作成するまず、1つ目のテー
-
【MySQL入門】行数を連番(シリアル番号)として表示する新しい列を追加する方法
MySQLでSELECT文の結果に行数を連番(シリアル番号)としてカウントした新しい列を追加したい場合、ユーザー定義変数(グローバル変数)を活用することで実現できます。本記事では、実際にテーブルを作成し、データを登録しながら具体的な手順を解説します。 1. テーブルの作成 まずはサンプル用のテーブルを作成しましょう。以下のCREATE TABLE文を実行します。 mysql> create table addColumnToCountAsSerialNumber -> ( -> Id int, -> Name varchar(20),
-
MySQLで各グループの上位2行を取得する方法|サブクエリを使った実装例
MySQLで「各グループごとに上位2行だけを取得したい」というケースは、売上ランキングや成績一覧など、実務でもよく遭遇する課題です。GROUP BYでは各グループの集計値しか取得できないため、こうした要件にはWHERE句と相関サブクエリを組み合わせる方法が有効です。この記事では、サンプルテーブルを作成しながら、具体的なSQLの書き方を順を追って解説します。1. サンプルテーブルの作成まず、名前(Name)と合計スコア(TotalScores)を持つテーブルを作成します。mysql> create table selectTop2FromEachGroup -> ( -&
-
MySQLで空文字列をNULLに変換する方法|NULLIF()関数の使い方を解説
MySQLで空文字列をNULLに変換するには?MySQLで空文字列()をNULLに変換するには、NULLIF()関数を使用します。構文は以下の通りです。SELECT NULLIF(カラム名, ) AS 任意の別名 FROM テーブル名;NULLIF()関数は、第1引数と第2引数が等しい場合にNULLを返し、等しくない場合は第1引数の値をそのまま返す関数です。上記の構文では、空文字列()と空文字列()を比較すると結果は常にNULLになります。同様に、NULLと空文字列()を比較した場合も、結果は常にNULLとなります。この特性を利用することで、空文字列をNULLへ変換できます。動作確認用テーブル
-
MySQLでint型の列をdouble型に変更する方法
MySQLでint型の列をdouble型に変更する方法MySQLでテーブル内の列(カラム)を int 型から double 型に変更するには、ALTER TABLE コマンドを使用します。基本構文NOT NULL 制約を付けたい場合は、以下の構文を使用します。ALTER TABLE yourTableName modify column yourColumnName DOUBLE NOT NULL;NULL値を許可したい場合は、上記の構文から NOT NULL を取り除いてください。ALTER TABLE yourTableName modify column yourColumnName D
-
MySQLで正規表現によるUPDATEはできる?REGEXPの制限とLIKE+REPLACEを使った代替方法
MySQLでは正規表現(REGEXP)によるUPDATEはサポートされていない結論から言うと、MySQLでは正規表現(REGEXP)を直接使ってデータを更新することはできません。UPDATE文における正規表現による置換処理はサポートされておらず、代わりにLIKE演算子とREPLACE関数を組み合わせて対応する必要があります。基本となる構文は以下の通りです。UPDATE yourTableNameSET yourColumnName = REPLACE(yourColumnName, yourValue, )WHERE yourColumnName LIKE %yourValue%;それでは、こ
-
MySQLでLENGTH()とCASE文を使ってテキストを切り詰める方法
MySQLでテキストを切り詰めて表示するには?MySQLでは、LENGTH()関数とCASE文を組み合わせることで、文字列の長さに応じてテキストを切り詰めて表示できます。例えば、文字数が7文字より長い場合は先頭7文字だけを取り出して任意の文字列を連結し、7文字以下の場合はそのまま元の値を出力する、といった処理が可能です。テーブルの作成まず、動作を確認するためのテーブルを作成しましょう。テーブル作成のクエリは以下の通りです。mysql> create table TruncateText -> ( -> Id int NOT NULL AUTO_INCREMENT,
-
MySQLで条件付きNOT NULLを扱う方法:IS NULLとIS NOT NULLの正しい使い方
MySQLでNULLを条件として扱う場合、<>(不等号)や=(等号)といった比較演算子は使用できません。NULLはMySQLにおいて特別な扱いを受ける値であり、判定には必ずIS NULLおよびIS NOT NULLを使用する必要があります。なぜ比較演算子ではNULLを判定できないのかNULLは「値が存在しない(不明である)」ことを表す特殊な状態です。そのため、SendMessage = NULLのような比較は、結果がTRUEにもFALSEにもならず、常にUNKNOWNと評価されます。これが、NULLの判定には専用の構文が必要となる理由です。実際に動作を確認するため、まずテーブルを作
-
MySQLのシステム変数とユーザー定義変数の違いとは?
MySQLには「システム変数」と「ユーザー定義変数」という2種類の変数が存在します。それぞれ有効範囲(スコープ)や型の扱い、接頭辞の記号が異なるため、本記事では両者の違いをわかりやすく解説します。 システム変数(System Variables)とは システム変数は、厳密に型付けされた変数であり、「グローバル変数」とも呼ばれます。 システム変数はサーバーのグローバルスコープで初期化され、その値はMySQLサーバーを再起動するまで保持されます。つまり、サーバーを再起動すると設定した値は失われ、デフォルト値に戻ります。なお、あらかじめ定義されているシステム変数には、@@ という記号が接頭辞として付
-
MySQLのシステム変数とローカル変数の違いをわかりやすく解説
MySQLには、ストアドプロシージャや関数の中で使う「ローカル変数」と、サーバー全体の設定を管理する「システム変数(グローバル変数)」の2種類があります。それぞれ適用される範囲(スコープ)が大きく異なるため、用途に応じて正しく使い分けることが重要です。ローカル変数とはローカル変数は、特定のステートメント、またはステートメントのブロック内でのみ有効な変数です。処理のブロックが完了すると、ローカル変数はスコープの外に出るため、それ以降は参照できなくなります。ローカル変数は、主にストアドプロシージャやストアドファンクションの中で使用され、DECLAREキーワードを使って宣言します。ローカル変数の宣言
-
PHPとMySQLでブール値を扱うには?BOOL・BOOLEAN・TINYINT(1)の違いと使い方
本記事では、MySQL 8.0.12を使用して、ブール(Boolean)値の正しい取り扱い方を解説します。まず、使用しているMySQLのバージョンを確認しておきましょう。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec) MySQLにおけるブール値の基本:BOOL・BOOLEAN・TINYINT(1) MySQLでブール値を扱うには、BOOL、BOOLEAN、またはTINYINT(1)のいずれかを使用
-
MySQLで一度に複数行を挿入する方法!バッチ挿入の基本と実例
MySQLでの一括挿入(バッチ挿入)の基本MySQLで複数のレコードを1回のクエリでまとめて挿入したい場合は、VALUES()句をカンマで区切って記述するのが基本です。この方法を使えば、INSERT文を何度も実行する必要がなく、無効なクエリになることもありません。基本的な構文INSERT INTO テーブル名 VALUES(値1),(値2),(値3),(値4),(値5),.......N;各レコードの値を () で囲み、それらをカンマで区切って並べるだけで、複数行を一度に挿入できます。非常にシンプルでありながら、大量データの登録時にパフォーマンス面でも大きなメリットがあります。実際にテーブルを
-
MySQLで日付を条件に価格の最小値・最大値を取得する方法(CASE文の活用)
日付を条件として、テーブル内の価格データから最小値と最大値を取得したい場合には、CASE文を使用します。CASE文で現在の日付が開始日〜終了日の範囲内かどうかを判定し、その結果を集計関数である MIN() および MAX() で包むことで実現できます。基本構文まずは全体の構文を見てみましょう。SELECTMIN(CASE WHEN CURDATE() BETWEEN yourStartDateColumnName AND yourEndDateColumnName THEN yourLowPriceColumnName ELSE yourHighPriceColumnName END) AS
-
MySQL(InnoDB)でグローバルロックを確認する方法【SHOW ENGINE INNODB STATUS】
MySQL(InnoDB)でグローバルロックやロックの競合状況を確認したい場合は、SHOW ENGINE INNODB STATUS コマンドを使用します。このコマンドを実行すると、ロックの所有者や待機中のトランザクションに加えて、InnoDBのトランザクションIDなど、より詳細な内部情報も併せて確認できます。確認手順MySQLのコマンドラインから、以下のクエリを実行してください。末尾の \G は、出力結果を読みやすく縦方向に整形して表示するための指定です。mysql> SHOW ENGINE INNODB STATUS\G実行結果の出力例以下は実際の出力例です。特に「TRANSACTI
-
MySQLでフィールドが空文字列かNULLかを判定する方法【CASE文活用】
MySQLにおけるNULLと空文字列の違いMySQLでは、NULLと空文字列()はまったく別のものとして扱われます。NULLは「値そのものが存在しない」状態を表し、空文字列は「長さ0の文字列が格納されている」状態を意味します。この2つを混同すると、データ検索や集計で意図しない結果を招くことがあるため注意が必要です。フィールドが空文字列なのかNULLなのか、あるいは有効な値なのかを一括で判定したい場合は、CASE文とIS NULL演算子を組み合わせるのが効果的です。まずは基本となる構文を見てみましょう。SELECT *, CASEWHEN yourColumnName = THEN yourM
-
MySQLの「AND」と「&&」の違いを徹底解説
MySQLには、論理積(AND)を求めるための演算子として「AND」と「&&」の2種類が用意されています。両者の違いは実はただ1点。「AND」が標準SQLで定められた標準の記法であるのに対し、「&&」はMySQL固有の独自構文であるという点です。この違い以外に、両者の間に機能上の差異は一切ありません。以下では、さまざまな条件における動作を具体例とともに確認していきましょう。ANDと&&の基本的な動作ANDおよび&&の演算結果は、必ず「1」か「0」のどちらかになります。どちらも論理演算子であり、複数のオペランド(被演算子)の中に1つでも値が0のものが含まれていれば結果は0となり、すべてが0以外で