カテゴリ: MySQL

検索結果: 12件

article-thumbnail

SQLのJOINで接続情報がNULL値のレコードを出力する方法

【概要】SQLのINNER JOIN等で接続する際に接続するカラムの値がNULLの場合、そのレコードは出力されません。複数テーブルを結合する際に結合するカラムの値がNULLの場合でもレコードを出力する方法についてまとめます。このドキュメントでは3つのテーブル(hoge, fuga, hogefuga)を接続する事を例とします。【詳細】・構文SELECT * FROM (テーブル1 INNER JOIN テーブル2 ON テーブル1.テーブル2_id テーブル2.id) LEFT OUTER JOIN テーブル3 ON テーブル1.テーブル3_id テーブル3.id;・例文SELECT * FROM (hoge INNER JOIN fuga ON hoge.fuga_id fuga.id) LEFT OUTER JOIN hogefuga ON hoge.hogefuga_id hogefuga.id;「LEFT OUTER JOIN」を設定する事で「hoge.hogefuga_id」もしくは「hogefuga.id」がNULLでもレコードは出力されます。上記の例ではhogeテーブルとfugaテーブルはINNER JOINで接続している為、どちらかの接続カラムがNULLの場合は出力されません。

カテゴリ: MySQL 2020-11-30 21:51:22
article-thumbnail

検索した結果をテーブルにINSERTする方法

【概要】MySQLで検索した結果を別テーブルにINSERTする方法についてまとめます。このドキュメントをまとめるきっかけは、1対多のテーブル構成から多対多のテーブルに変更する必要があり、かつそのデータを多対多のテーブルにコピーする必要があった事です。【詳細】[概要]ここでは例としてhogesテーブルとfugasテーブルが存在し、新規で多対多用のhoges_fugasテーブルを作成します。fugaテーブルにはfugasテーブルの情報とhoge_idを保有しています。よって、fugasテーブルに存在する「id」と「hoge_id」を検索し、その結果をhoges_fugasテーブルに挿入します。[クエリ]INSERT INTO hoges_fugas (hoge_id, fuga_id, created, updated)SELECT id, hoge_id, created, updated FROM fugas;これでhogeとfugaの紐づきを持った中間テーブルに全ての値が入ります。※ タイムスタンプの考慮createdやupdatedといったタイムスタンプが必須のテーブルの場合を考慮して、ここではfugasテーブルのcreatedとupdatedの値をそのままhoges_fugasテーブルに格納しています。不要な場合は外して下さい。もしくは現在時刻を入れたい方は下記のクエリを実行して下さい。INSERT INTO hoges_fugas (hoge_id, fuga_id, created, updated)SELECT id, product_id, NOW() AS created, NOW() AS updated FROM comics;

カテゴリ: MySQL 2020-10-17 01:50:19
article-thumbnail

MySQLで特定の値を持つレコードをカウントする方法

【概要】MySQLで特定の値を持つレコードをカウントする方法についてまとめています。ここではユーザーの購入回数を検索する為に、users_ordersテーブルから各userのレコード数を検索する事をサンプルとして記述します。【詳細】[クエリ]SELECT user_id, COUNT( user_id ) AS count FROM users_orders GROUP BY user_id ORDER BY count DESC;出力結果例user_id | count282 |396 | 2186 | 2205 | 2241 | 2例ではuser_id 282が3回で一番購入回数が多いとわかります。[クエリ詳細]・COUNT()カウントしたいカラムをCOUNTの引数に渡す事で設定可能です。・GROUP BYuser_id毎に計測したい為、GROUP BYでuser_idを設定する必要があります。・ORDER BY購入回数が多い順に表示したい場合、countカラムの結果をDESCに設定する必要があります。もし、購入回数が少ない順番にしたい場合、DESCではなくASCに設定して下さい。

カテゴリ: MySQL 2020-10-16 23:00:22
article-thumbnail

macで既存のDBからER図を作成する

【概要】macにて作成済みのDBからER図を作成する方法をまとめます。このドキュメントではHomebrewを使用するのでまだインストールされていない方は下記の記事を参考にインストールして下さい。macにHomebrewをインストールする【詳細】0. 前提Homebrewをアップデートしておきます。brew update1.graphvizをインストールするbrew install graphvizこれでdotコマンドがインストールされます。2. dotファイルエクスポートするSequelのエクスポート機能で対象DBのDotファイルを作成します。下記はエクスポート時の画面イメージです。3. ER図の画像を作成する・構文dot -Tpng 2で作成したdotファイル 作成するER図の画像の名・例文dot -Tpng sample-db.dot sample-db.png

カテゴリ: MySQL 2020-09-25 01:21:03
article-thumbnail

MySQLでカラムのデータをコピーする方法

【概要】DBの特定のカラムを他のカラムにコピーする方法をまとめています。このドキュメントにまとめている構文を実行すると、同じレコードのコピー元カラムの値はコピー対象のカラムに代入される事となります。仮に下記のようなテーブルがあるとします。--------------------------| id | name | full_name |--------------------------|1 | hoge | hogehoge |--------------------------|2 | huga | hugahuga |--------------------------|3 | hoga | hogahoga |--------------------------このUPDATE文を実行する事で下記のように変更されます。--------------------------| id | name | full_name |--------------------------|1 | hoge | hoge |--------------------------|2 | huga | huga |--------------------------|3 | hoga | hoga |--------------------------【詳細】・構文UPDATE `テーブル名` SET `コピー対象カラム名` `コピー元カラム名`;・例文1 - nameカラムの値をfull_nameカラムに代入します。UPDATE `user` SET `full_name` `name`;・例文2 - deleted_atカラムがNULLの場合のみ実行します。UPDATE `user` SET `full_name` `name` WHERE deleted_at IS NULL;

カテゴリ: MySQL 2020-09-16 00:34:49
article-thumbnail

MySQLサーバーのデータ使用量を確認する

【概要】MySQLサーバーのデータ使用量を確認する方法をまとめたドキュメントです。ここではSQL文での調査方法をまとめていますが、コマンドラインで調査する方法は下記のドキュメントを参考にして下さい。CentOSサーバーのディレクトリ毎のストレージ使用量を調べる【詳細】1. 全DBの使用状況を確認するi. MB単位での出力SELECTtable_schema, sum(data_length+index_length) /1024 /1024 AS MBFROMinformation_schema.tablesGROUP BYtable_schemaORDER BYsum(data_length+index_length) DESC;出力結果例+--------------------+-------------+| table_schema| MB|+--------------------+-------------+| hoge | 33.50000000 || huga | 29.45312500 |+--------------------+-------------+2 rows in set (0.05 sec) ii. GB出力SELECTtable_schema, sum(data_length+index_length) /1024 /1024/1024 as GBFROMinformation_schema.tablesGROUP BYtable_schemaORDER BYsum(data_length+index_length) DESC;出力結果例+--------------------+----------------+| table_schema| GB|+--------------------+----------------+| hoge | 33.50000000 || huga | 29.45312500 || mysql | 0.007468875498 || information_schema | 0.000152587891 || sys | 0.000015258789 || performance_schema | 0.000000000000 |+--------------------+----------------+2. DB指定指定したDBのサイズを確認する方法です。下記の「sample_database1」を確認したいDB名に変更し、実行して下さい。SELECTtable_schema, sum(data_length+index_length) /1024 /1024 AS MBFROMinformation_schema.tablesWHEREtable_schema 'sample_database1';

カテゴリ: MySQL 2020-05-16 23:25:17