-
MySQLで2つの列から重複しない値(DISTINCT)を抽出する方法
はじめにMySQLで2つの列をまたいで重複しない値(DISTINCTな値)を取得したい場合、least()関数とgreatest()関数を組み合わせて使うと便利です。この記事では、実際にテーブルを作成し、サンプルデータを使ってその方法を解説します。テーブルの作成まず、2つの列を持つテーブルを作成しましょう。mysql> create table SelectDistinctTwoColumns-> (-> StudentId int,-> EmployeeId int-> );Query OK, 0 rows affected (0.60 sec)ここでは「Stu
-
MySQLのINT(7)はどういう意味?表示幅とZEROFILLの仕組みをわかりやすく解説
MySQLのINT(7)の「7」が意味するものINT(7)のように整数型の後ろに括弧で数値を指定した場合、この数値は「表示幅」を示します。ここで重要なのは、表示幅の指定はデータの保存サイズには一切影響しないという点です。INT型は常に4バイトで格納され、扱える値の範囲も -2147483648 ~ 2147483647 で固定されています。つまり、INT(7)とINT(11)では、保存できる値の範囲も消費ストレージもまったく同じです。違いがあるのは、値を表示するときの扱いだけです。ZEROFILLを使ったINT(7)の動作確認INT(7)の実際の挙動を理解するために、ZEROFILLオプション
-
MySQLでDATETIME型の値に1日を追加する方法|DATE_ADD()関数の使い方
MySQLでは、DATETIME形式の値に1日(または任意の日数)を加算したい場合、DATE_ADD()関数を使用します。この記事では、基本的な構文から実テーブルへの応用例まで、具体的なSQLサンプルとともにわかりやすく解説します。 DATE_ADD()関数の基本構文 DATETIME値に1日を追加する際の基本的な構文は以下の通りです。 select date_add(now(),interval 1 day) as anyVariableName; now()は現在の日時を返す関数で、その結果に対してinterval 1 dayを指定することで1日後の日時を取得できます。それでは、実際にこ
-
MySQLで生年月日から年齢を計算する方法をわかりやすく解説
MySQLでは、生年月日(Date of Birth)のデータから現在の年齢を簡単に計算することができます。この記事では、YEAR()関数とRIGHT()関数を組み合わせた実用的な方法を、実際のサンプルコードとともに詳しく解説します。年齢計算に使うSQL構文生年月日から年齢を求めるには、以下のような構文を使用します。SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(yourColumnName) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(yourColumnName, 5)) as anyVariableName from y
-
MySQLでテーブルの作成日を取得する方法
MySQLでテーブルの作成日を確認するには? MySQLで特定のテーブルがいつ作成されたのか(作成日時)を調べたい場合、INFORMATION_SCHEMA.TABLES の create_time カラムを参照することで簡単に取得できます。INFORMATION_SCHEMA はデータベース内のテーブルやカラムなどのメタデータを管理しており、その中にテーブルの作成日時も記録されています。 基本構文 テーブルの作成日を取得するための基本的なSQL構文は以下のとおりです。 SELECT create_time FROM INFORMATION_SCHEMA.TABLES WHERE table
-
MySQLで累積合計(累計)列を作成する方法をわかりやすく解説
MySQLで累積合計(累計)列を作成する方法 MySQLで累積合計(累計)列を作成するには、ユーザー定義変数を作成し、初期値を0に設定するのが基本的な手法です。累積合計とは、各行の値に対して、それまでの行の値を順番に加算していった結果のことです。 本記事では、変数を使った伝統的な方法と、MySQL 8.0以降で利用できるウィンドウ関数を使ったモダンな方法の両方を、実際のコード例とともに解説します。 1. ユーザー定義変数を使った累積合計列の作成 まず、SET文を使って変数を作成し、初期化します。構文は以下の通りです。 SET @anyVariableName := 0; 続いて、SELECT
-
MySQLでテーブルのカラムのデフォルト値を変更する方法|CHANGE句の使い方を解説
MySQLでカラムのデフォルト値を変更するには? MySQLテーブルのカラムに設定されたデフォルト値を変更するには、ALTER TABLE文のCHANGE句を使用します。基本構文は以下の通りです。 ALTER TABLE テーブル名 CHANGE カラム名 カラム名 データ型 NOT NULL DEFAULT デフォルト値; CHANGE句では、既存のカラム名と新しいカラム名の両方を指定する必要があります。カラム名を変更しない場合は、同じカラム名を2回記述します。 サンプルテーブルを作成する 実際の動作を確認するため、まずはサンプル用のテーブルを作成しましょう。以下がそのクエリです。 mys
-
MySQLで複数カラムのデータ型を一度に変更する方法(ALTER TABLE+MODIFY)
MySQLでは、ALTER TABLE文にMODIFY COLUMNを組み合わせることで、複数のカラム(列)のデータ型を1つのSQL文でまとめて変更できます。カラムの追加だけでなく、既存カラムの型変更にも同じ構文が使えるため、覚えておくと非常に便利です。基本構文複数のカラムを一度に変更するには、MODIFY COLUMNをカンマで区切って並べて記述します。構文は以下の通りです。ALTER TABLE テーブル名 MODIFY COLUMN カラム名1 データ型, MODIFY COLUMN カラム名2 データ型, . . . MODIFY COLUMN カラム名N データ型;サンプルテーブルの
-
MySQLでテーブルの列(カラム)の順序を並べ替える方法をわかりやすく解説
MySQLで列の順序を並べ替える基本の考え方 MySQLでは、テーブル作成後に列(カラム)の順序を変更することができます。まず「show create」コマンドで現在の列の配置を確認し、その後「ALTER TABLE」文を使って並べ替えを行います。 現在の列の配置を確認する 列の並び順を確認するには、次のコマンドを実行します。 show create table yourTableName; 列を先頭に移動する(FIRST) 特定の列をテーブルの先頭に移動するには、以下の構文を使用します。 alter table yourTableName change column yourColumnNa
-
MySQLでカラムの末尾2文字を削除する方法
MySQLでは、SUBSTRING()関数とCHAR_LENGTH()関数を組み合わせることで、文字列の末尾から任意の文字数(ここでは2文字)を簡単に取り除くことができます。 基本構文 select yourColumnName, SUBSTRING(yourColumnName, 1, CHAR_LENGTH(yourColumnName) - 2) AS anyVariableName from yourTableName; SUBSTRING(文字列, 開始位置, 文字数)は、先頭から指定した文字数分だけ文字列を抽出する関数です。全体の文字数から2を引いた値を指定することで
-
MySQLの計算でエイリアス(別名)を使う方法を徹底解説
MySQLの計算でエイリアスを使用する方法MySQLでは、エイリアス(別名)を活用することで、計算結果や定数にわかりやすい名前を付けられます。本記事では、実際にテーブルを作成しながら、計算の中でエイリアスを設定・再利用する手順を具体的に解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。テーブル作成のクエリは以下の通りです。mysql> create table AliasDemo -> ( -> Id int -> );Query OK, 0 rows affected (0.52 sec)2. レコードの挿入次に、INSERT文を使っ
-
MySQLの価格カラムに最適なデータ型は?DECIMAL型の特徴と使い方を解説
価格カラムにはDECIMAL型が最適MySQLで金額や価格を扱うカラムを設計する場合、最も推奨されるデータ型はDECIMAL型です。DECIMAL型は数値を正確(固定小数点)に格納するため、FLOAT型やDOUBLE型のような浮動小数点型で発生しがちな誤差の問題を回避できます。金額計算において誤差は許容されないため、価格を扱うカラムには必ずDECIMAL型を使用しましょう。DECIMAL(10,2) の意味例えば DECIMAL(10,2) と指定した場合、以下のような意味になります。全体で最大10桁の数値を格納できるそのうち小数点以下は2桁つまり整数部分は最大8桁(99,999,999まで)
-
MySQLで外部キー制約の一覧を取得する方法
MySQLで外部キー制約の一覧を取得する方法 データベースを運用していると、特定のスキーマに定義されている外部キー制約だけを確認したい場面があります。例えば、「business」というデータベースに複数のテーブルが存在する場合、information_schema.referential_constraints テーブルに対してクエリを実行することで、外部キー制約のみを抽出して表示できます。 外部キー制約を取得するSQLクエリ mysql> select * -> from information_schema.referential_constraints -&g
-
MySQLで月別・年別にデータをグループ化する方法(DATE_FORMAT関数の使い方)
MySQLでは、DATE_FORMAT()関数を使用することで、日付データを月別・年別にグループ化することができます。これに加えて、GROUP BY句を組み合わせることで、集計や一覧表示が簡単に行えます。基本構文月と年でグループ化する場合の基本的な構文は以下の通りです。SELECT DATE_FORMAT(カラム名, %m-%Y) FROM テーブル名 GROUP BY MONTH(カラム名), YEAR(カラム名) DESC;%m-%Yは「月-年」の形式で表示することを意味し、DESCを指定することで降順(新しい年から)に並べ替えられます。サンプルテーブルの作成それでは、実際に動作を確認して
-
MySQLのセーフモードでDELETEを実行する方法|SQL_SAFE_UPDATESの設定手順
MySQLでは、安全更新モード(セーフアップデート)が有効になっていると、WHERE句にキー列を指定しないDELETEやUPDATEが実行できず、エラーになることがあります。このような場合は、SETコマンドを使って一時的にセーフモードを解除することで、削除処理を行えます。セーフモードを解除して削除するクエリセーフモードを解除するには、以下のクエリを実行します。SET SQL_SAFE_UPDATES = 0;動作確認用テーブルの作成まず、上記クエリの挙動を理解するために、サンプルテーブルを作成しましょう。テーブル作成のクエリは次のとおりです。mysql> create table Saf
-
MySQLのLIKE検索で大文字と小文字を区別する方法(LIKE BINARYの使い方)
MySQLのLIKE演算子は、デフォルトの照合順序(collation)では大文字と小文字を区別せずに比較します。しかし、LIKE BINARYを使うことで、強制的に大文字・小文字を区別した検索が可能になります。LIKE BINARYの基本構文大文字と小文字を区別させたい場合は、以下のようにBINARYキーワードを付けて記述します。SELECT yourColumnName LIKE BINARY anyStringValue FROM yourTableName;動作確認用のテーブルを作成する実際に動作を確認するために、テーブルを作成してみましょう。テーブル作成のクエリは次のとおりです。my
-
MySQLで重複を除いた個別の値(DISTINCT)をカウントする方法
MySQLで個別の値をカウントするには?MySQLでテーブル内の重複しない(ユニークな)値の件数を取得したい場合は、集計関数 COUNT() と DISTINCT キーワードを組み合わせることで実現できます。この方法を使えば、同じ値が複数回登録されていても、1つとしてカウントされます。基本構文SELECT COUNT(DISTINCT yourColumnName) AS anyVariableName FROM yourTableName;COUNT(DISTINCT カラム名) のように指定することで、指定したカラムの中から重複を除外した値の総数を取得できます。それでは、実際にサンプルテー
-
【MySQL】2つのカラムを指定したGROUP BYとCOUNTで重複データを集計する方法
MySQLでは、GROUP BY句に複数のカラム(フィールド)を指定することで、組み合わせごとの件数を簡単に集計できます。この記事では、実際にテーブルを作成しながら、2つのカラムに対してGROUP BYを使用し、重複データのカウントを取得する手順を詳しく解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブル「GroupByTwoFieldsDemo」を作成します。IdとNameという2つのカラムを持つシンプルな構成です。mysql> create table GroupByTwoFieldsDemo -> ( -> Id int, -&
-
【MySQL】現在から1週間以上前の日付データを抽出するクエリの書き方
1週間より前のレコードを取得する基本構文MySQLで「現在の日時から1週間以上前」のデータを抽出したい場合、NOW()関数とINTERVALを組み合わせるのが最もシンプルで確実な方法です。基本的な構文は以下のとおりです。SELECT * FROM テーブル名 WHERE カラム名 < NOW() - INTERVAL 1 WEEK;このクエリでは、指定したカラムの値が「現在日時から1週間前の時点」よりも小さい(=それ以前の)レコードだけが返されます。動作確認用テーブルの作成実際にどのように動作するのか、サンプルテーブルを作成して確認してみましょう。まずはテーブルを作成します。mysql&
-
MySQLで別のテーブルと同じ構造のテーブルを作成する方法
MySQLで別テーブルと一致するテーブルを作成するには? MySQLで既存のテーブルと同じ構造を持つ新しいテーブルを作成したい場合、CREATE TABLEコマンドにLIKE演算子を組み合わせて使用します。構文は以下の通りです。 create table 新しいテーブル名 like 元のテーブル名; この構文では、元のテーブルの構造(カラム定義、データ型、インデックスなど)のみがコピーされます。データはコピーされない点に注意してください。 データも含めてコピーする方法 テーブルの構造だけでなく、すべてのレコードも一緒にコピーしたい場合は、INSERT INTO ... SELECT * FRO