-
MySQLの単一データベースでInnoDBとMyISAMのテーブルを混在させることはできる?
はい、可能です。MySQLでは1つのデータベースの中にInnoDBとMyISAMという異なるストレージエンジンのテーブルを混在させて使用できます。用途に応じてエンジンを使い分けることは、実務上も推奨されるアプローチです。この記事では、単一のデータベース内でInnoDBとMyISAMの両方のテーブルを作成し、実際にそれぞれのエンジンタイプを確認するまでの手順をデモ形式で解説します。1. データベースの作成まず、両方のエンジン用テーブルを格納するためのデータベース「BothInnoDBandMyISAM」を作成します。データベースを作成するクエリは以下のとおりです。mysql> create
-
MySQLで特定の値を先頭に並べ替える方法【ORDER BY句の活用】
MySQLで特定の値を持つレコードを検索結果の一番上に表示したい場合は、ORDER BY句に比較式を組み合わせることで実現できます。 基本構文 特定の値を先頭にソートするには、以下の構文を使用します。 SELECT *FROM yourTableName ORDER BY yourColumnName=yourValue DESC,yourIdColumnName; 構文のポイント 比較式の評価結果:「yourColumnName=yourValue」は、条件に一致すれば1、一致しなければ0を返す論理式として扱われます。 DESCによる降順ソート:降順で並べることで、評価結果が1(一致)のレ
-
MySQLで文字列と整数が混在するカラムから最大値を取得する方法
MySQLで文字列と整数が混在するカラムから最大値を取得する方法「INV129」や「INV145」のように、接頭辞(プレフィックス)付きの文字列と整数が混在するカラムから最大値を取得したいケースはよくあります。しかし、単純にMAX()関数を使うだけでは正しい結果が得られません。文字列として比較されるため、「INV9」より「INV10」の方が小さいと判断されてしまうからです。この問題を解決するには、SUBSTRING()関数で数値部分だけを取り出し、CAST()関数で符号なし整数型(UNSIGNED)に変換した上でMAX()関数を適用します。基本構文SELECT MAX(CAST(SUBSTRI
-
MySQLクエリで複数の合計値を取得し、別々の列として表示する方法
MySQLクエリで複数の合計(SUM)を1回のクエリで取得し、それぞれを独立した列として表示したい場合には、CASE文を活用します。CASE文を使うことで、条件に一致する行だけを集計対象にでき、プレイヤーごとの合計スコアのように、カテゴリ別の合計値を横並びの列として一度に取り出すことが可能です。基本構文まずは基本となる構文を見てみましょう。SELECT SUM( CASE WHEN 列名1 = 値1 THEN 列名2 END ) AS 別名1, SUM( CASE WHEN 列名1 = 値2 THEN 列名2 END ) AS 別名2, SUM( CASE WHEN 列名1 = 値
-
MySQLでアルファベットを先に、数字を後に並べ替える方法
はじめにMySQLでデータを並べ替える際、「アルファベットで始まるレコードを先に表示し、数字で始まるレコードを後ろに表示したい」というケースがあります。このような並べ替えを実現するには、ORDER BY句と正規表現(RLIKE)を組み合わせて使用します。本記事では、具体的なサンプルコードとともに、その実装方法をわかりやすく解説します。基本構文ORDER BY句で正規表現を使用する場合の基本構文は以下の通りです。SELECT *FROM yourTableName ORDER BY IF(yourColumnName RLIKE ^[a-z], 1, 2),yourColumnName;この構文
-
MySQLで条件に一致する最後のレコードを削除する方法(ORDER BY DESCとLIMITの使い方)
MySQLで条件に一致する最後のレコードを削除する方法MySQLのテーブルから、特定の条件に一致する「最後のレコード」を削除したい場合は、DELETE文にORDER BY DESCとLIMITを組み合わせて使用します。この方法を使えば、条件を満たすレコードの中で最も新しい(または最も古い)1件だけを簡単に削除できます。基本構文DELETE FROM テーブル名 WHERE カラム名1=値 ORDER BY カラム名2 DESC LIMIT 1;この構文では、指定したカラムを降順(DESC)でソートし、その先頭の1件を削除します。降順ソートの先頭に来るのは「最も新しいレコード」なので、結果として
-
【MySQL入門】別のユーザーとしてログインする方法をわかりやすく解説
MySQLで別のユーザーとしてログインしたい場合は、mysql -u ユーザー名 -p コマンドを使用します。この記事では、新しいユーザーの作成から、作成したユーザーでのログイン方法まで、手順を追って詳しく解説します。別のユーザーとしてログインするための基本構文別のユーザーとしてMySQLにログインする際の基本構文は以下の通りです。> mysql -u yourUsername -pEnter password:コマンドを実行してEnterキーを押すと、パスワードの入力を求められます。ここに該当ユーザーのパスワードを入力すればログインできます。ステップ1:新しいユーザーを作成するまずは、
-
MySQLでクエリ結果からテーブルにデータを挿入する方法
INSERT INTO ~ SELECT 構文とはMySQLでは、INSERT INTO ~ SELECT構文を使うことで、別テーブルのクエリ結果をそのまま既存のテーブルへ挿入できます。大量のデータを手作業で入力する必要がなく、テーブル間でのデータ移行や集計結果の保存などに非常に便利な構文です。基本の書式は以下のとおりです。INSERT yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,..........N) SELECT yourColumnName1,yourColumnName2,yourColumnName3,
-
【MySQL】LIMIT句の後に別のカラムで並べ替える方法(サブクエリ活用)
MySQLでLIMIT句の後に別の順序で並べ替える方法MySQLでは、LIMIT句で取得する行数を絞り込んだ後、さらに別のカラムを基準に並べ替えたいケースがあります。このような場合にはサブクエリ(副問い合わせ)を使用します。内側のSELECT文で対象の行を取得し、外側のSELECT文で目的の順序に並べ替えるという、2段階の処理を行うのがポイントです。なお、単一のクエリ内で「ORDER BY → LIMIT → 別のORDER BY」という順序を直接記述することはできません。そのため、一度サブクエリでLIMITを適用した結果セットを作成し、それを外側のクエリで再度並べ替えるという手法が用いられま
-
ターミナル(コマンドプロンプト)からMySQLデータベースにSQLファイルを実行する方法
MySQLデータベースでSQLファイルを実行したい場合、コマンドライン(ターミナルやコマンドプロンプト)から簡単に実行できます。この記事では、具体的な手順をスクリーンショット付きの手順解説に沿って紹介します。 SQLファイルを実行するための基本構文 データベースにSQLファイルをインポート・実行するには、以下の構文を使用します。 mysql -u ユーザー名 -p データベース名 < ファイル名.sql 各オプションの意味は以下のとおりです。 -u:MySQLに接続するユーザー名を指定します -p:パスワード入力を求めるプロンプトを表示します <:指定したSQLファイルの中身を
-
【MySQL】UPPER()・LOWER()で大文字と小文字を区別しないDISTINCTを実現する方法
MySQLで大文字・小文字を区別しないDISTINCTを実現する方法MySQLのDISTINCT句は、デフォルトでは大文字と小文字を区別して比較を行います。そのため、「John@gmail.com」と「john@gmail.com」のような値は別々のデータとして扱われてしまいます。大文字と小文字を区別せずに重複を除外したい場合は、UPPER()関数またはLOWER()関数を組み合わせて使うのが定番の手法です。方法1:UPPER()関数を使う(大文字に統一)カラムの値をすべて大文字に変換した上でDISTINCTを適用します。構文は以下のとおりです。SELECT DISTINCT UPPER(yo
-
MySQLのINSERTでMAX()+1を実装する方法|COALESCE関数を使った連番採番テクニック
MySQLで新しいレコードを挿入する際、特定の条件における既存カラムの最大値(MAX)に1を加えた値を自動的に設定したいケースはよくあります。例えば、グループごとに連番を振りたい場合などが該当します。このような処理を実現するには、COALESCE()関数を使用します。COALESCE()関数を使った基本構文COALESCE()関数は、引数の中から最初にNULLではない値を返す関数です。これにより、テーブルにレコードが存在しない場合(MAXの結果がNULLの場合)でも、初期値として0を扱うことができます。基本的な構文は以下の通りです。INSERT INTO yourTableName(yourC
-
MySQLのORDER BY句でIFNULL関数を組み合わせて使う方法【サンプルコード付き】
MySQLのORDER BY句とIFNULL関数の併用についてMySQLでは、IFNULL関数をORDER BY句と組み合わせて使用することが可能です。これにより、NULL値を含むカラムを別のカラムの値で代替しながらソート処理を行えるため、データの並び順を柔軟に制御できます。基本構文基本的な構文は以下の通りです。SELECT *FROM yourTableName ORDER BY IFNULL(yourColumnName1,yourColumnName2);この構文では、第1引数のカラム(yourColumnName1)がNULLだった場合に、第2引数のカラム(yourColumnName
-
【MySQL】ログイン日時を1時間ごとにグループ化して、直近の時間帯にログインしたユーザーレコードを取得する方法
はじめにMySQLでは、サブクエリとJOIN条件を組み合わせることで、ユーザーのログイン日時を1時間単位でグループ化し、各時間帯の中で最も新しい(直近の)ログインレコードだけを抽出することができます。本記事では、その具体的な手法をサンプルコードとともに解説します。基本となるクエリの構文まず、基本となる構文を見てみましょう。サブクエリで時間ごとの最大タイムスタンプを取得し、それをもとに元のテーブルと結合します。SELECT yourTablevariableName.*FROM( SELECT MAX(UNIX_TIMESTAMP(yourDateTimeCol
-
MySQLでWHERE句とHAVING COUNT(*) > 1を組み合わせたGROUP BYの使い方
はじめに MySQLでは、GROUP BY句とWHERE句を組み合わせることで、条件に合致するレコードをグループ化し、さらにHAVING句を使ってグループごとの件数を絞り込むことができます。本記事では、実際にテーブルを作成しながら、その具体的な使い方を解説します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。以下のクエリを実行して、テーブル「GroupByWithWhereClause」を作成します。 mysql> create table GroupByWithWhereClause -> ( -> Id int NOT NULL
-
MySQLのCONV()関数で基数(進数)を変換する方法【16進数→10進数の実例つき】
MySQLのCONV()関数による基数変換とはMySQLでは、CONV()関数を使うことで、ある基数(進数)で表現された数値を、別の基数へ簡単に変換できます。例えば、基数16(16進数・ヘキサデシマル)から基数10(10進数・デシマル)への変換が可能です。第2引数に「変換元の基数」、第3引数に「変換先の基数」を指定します。基本構文SELECT CAST(CONV(yourColumnName,16,10) AS UNSIGNED INTEGER) as anyAliasName FROM yourTableName;この構文では、文字列として格納された16進数の値をCONV()関数で10進数に
-
MySQLでタイムスタンプから特定の年のレコードを抽出する方法
MySQLでは、YEAR()関数を使うことで、タイムスタンプ(timestamp)型のカラムから年だけを取り出し、特定の年のレコードを簡単に抽出できます。基本構文YEAR()関数を使用した基本的な構文は以下のとおりです。SELECT yourColumnName FROM yourTableName WHERE YEAR(yourTimestampColumnName) = yourYearValue;サンプルテーブルの作成それでは、実際に動作を確認するためにテーブルを作成してみましょう。テーブル作成用のクエリは次のとおりです。mysql> create table getYearOut
-
SQLのBINARYキーワード活用術!WHERE句で大文字・小文字を区別する比較方法を徹底解説
MySQLでは、WHERE句にBINARYキーワードを使用することで、値を大文字・小文字まで厳密に区別した比較が可能になります。通常の文字列比較では大文字と小文字が同一視されますが、BINARYキーワードを付けることでバイト単位の完全一致比較を実現できます。ケース1:通常の比較(大文字・小文字を区別しない)まずは、通常の比較の挙動を確認してみましょう。次のクエリを実行します。mysql> select 'joHN'='JOHN' as Result;実行結果は以下の通りです。+--------+ | Result | +--------+ | 1
-
MySQLで2つのテーブルをLEFT JOINで結合する方法
MySQLでは、LEFT JOINを使うことで、左側のテーブルの全レコードを保持しながら、右側のテーブルと条件に一致するデータを結合できます。一致するデータが存在しない場合、その列はNULLとして返されます。本記事では、外部キー制約で関連付けた2つのテーブルを実際に作成し、LEFT JOINで結合する手順をサンプルコード付きで解説します。 1. 親テーブル(ParentTable)の作成 まず、2つのテーブルを作成し、外部キー制約で関連付けます。最初のテーブル(親テーブル)を作成するクエリは以下の通りです。 mysql> create table ParentTable ->
-
MySQLで複数の行を1つのカンマ区切りリスト列にまとめる方法(GROUP_CONCAT活用)
MySQLのGROUP_CONCAT()で行をカンマ区切りのリストに変換する MySQLでは、GROUP_CONCAT() 関数を使うことで、複数の個別の行を1つのカンマ区切りのリスト列にまとめることができます。レポート作成やデータの集約表示など、グループごとに値を一覧化したい場面で非常に便利な関数です。 基本構文 基本的な構文は以下の通りです。 SELECT yourColumnName1,yourColumnName2,yourColumnName3,..N, GROUP_CONCAT(yourColumnName4) as anyAliasName FROM yourTableName