<?xml version="1.0" encoding="utf-8" ?><rss version="2.0">
<channel>
<title>MySQL 入門</title>
<link>https://mysql.sql55.com/</link>
<language>ja</language>
<item><title>MySQL で変数を定義する</title><link>https://mysql.sql55.com/sql/mysql-variables.php</link><description>MySQL で変数を定義する&lt;br&gt;&lt;br&gt;MySQL を使って開発をしていると、変数を定義して使いたい時が出てきますよね。&lt;br&gt;&lt;br&gt;ここでは MySQL で変数を定義する方法をご説明します。&lt;br&gt; &lt;br&gt;目次&lt;br&gt;ユーザー定義変数の基本と定義する方法&lt;br&gt;ローカル変数の基本と定義する方法&lt;br&gt;ユーザー定義変数の基本と定義する方法&lt;br&gt;MySQL のユーザー定義変数は、変数を定義して、同じセッション内であればどこでも使うことができます。&lt;br&gt;&lt;br&gt;定義する際に型の宣言は不要で、型情報は保持されません。コンテキストによってデータ型が解釈されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;ユーザー定義変数は SET 文を使って次のように定義できます。&lt;br&gt;&lt;br&gt;SET @変数名 = 値;&lt;br&gt;ユーザー定義変数の変数名は @ から始まり、名前には英数字と「.」「_」「$」の記号が使えます。&lt;br&gt;&lt;br&gt;また、変数名は 64 文字以内でなくてはならず、ケースセンシティブではありません。&lt;br&gt;&lt;br&gt;&lt;br&gt;以下のように連続して定義することも可能です。&lt;br&gt;&lt;br&gt;SET @変数名1 = 値1, @変数名2 = 値2, @変数名3 = 値3, .. &lt;br&gt;全く同じ方法で SELECT 文でも定義できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、ユーザー定義変数を定義して使ってみます。&lt;br&gt;&lt;br&gt;SET @value1 = 5;&lt;br&gt;SET @value2 = 10;&lt;br&gt;&lt;br&gt;SELECT @value1 * @value2 AS Result;&lt;br&gt;[実行結果]&lt;br&gt;MySQL で変数を定義する 1&lt;br&gt;&lt;br&gt;SET 文で @value1 と @value2 というユーザー定義変数を定義し、整数を代入しています。&lt;br&gt;&lt;br&gt;それに続く SELECT 文で、@value1 * @value2 を計算しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;SET @date1 = &#039;2025-08-01&#039;;&lt;br&gt;&lt;br&gt;SELECT 	@date1 AS date1,&lt;br&gt;        DATE_ADD(@date1, INTERVAL 1 DAY) AS date2;&lt;br&gt;[実行結果]&lt;br&gt;MySQL で変数を定義する 2&lt;br&gt;&lt;br&gt;この例では、SET 文で @date1 というユーザー定義変数を定義し、日付の文字列を代入しています。&lt;br&gt;&lt;br&gt;それに続く SELECT 文で、DATE_ADD 関数を使って @date1 に1 日足しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;ローカル変数の基本と定義する方法&lt;br&gt;MySQL のローカル変数は、定義した変数を、定義したストアドプログラムの BEGIN ... END 内でのみ使うことができます。&lt;br&gt;&lt;br&gt;ユーザー定義変数と違い、定義する際に型を宣言します。&lt;br&gt;&lt;br&gt;&lt;br&gt;ローカル変数は DECLARE 文を使って次のように定義できます。&lt;br&gt;&lt;br&gt;DECLARE 変数名 データ型 [DEFAULT 値];&lt;br&gt;ユーザー定義変数と違い、ローカル変数は変数名の前に @ はつきません。&lt;br&gt;&lt;br&gt;宣言と同時に値を代入したい時は DEFAULT 句を使います。&lt;br&gt;&lt;br&gt;DEFAULT 句がない場合は値は NULL になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;ローカル変数を使ったユーザー定義関数の例をご紹介します。&lt;br&gt;&lt;br&gt;これは、以前「MySQL のユーザー定義関数」の記事で作った、税込の値段を入力引数として渡して、税抜きの値段を返す get_before_tax_price という名前のユーザー定義関数です。&lt;br&gt;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE FUNCTION get_before_tax_price (&lt;br&gt;	after_tax_price DECIMAL(13,2)&lt;br&gt;)&lt;br&gt;RETURNS DECIMAL(13,2)&lt;br&gt;DETERMINISTIC&lt;br&gt;BEGIN&lt;br&gt;	&lt;br&gt;    DECLARE before_tax_price DECIMAL(13,2);&lt;br&gt;    DECLARE sale_tax_percent DECIMAL(5,2) DEFAULT 10; -- 10%&lt;br&gt;    &lt;br&gt;    SET before_tax_price = IFNULL(after_tax_price, 0) * 100 / (sale_tax_percent + 100) ;&lt;br&gt;    RETURN before_tax_price;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;9 行目で before_tax_price と言う名前の DECIMAL(13,2) 型のローカル変数を定義しています。&lt;br&gt;&lt;br&gt;10 行目では、sale_tax_percent という名前で DECIMAL(5,2) 型のローカル変数を定義し、DEFAULT 句を使って、10 を代入しています。&lt;br&gt;&lt;br&gt;定義した後はローカル変数に SET 文などで値を代入できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;DECLARE 文はストアドプログラム外で使って変数を定義しようとすると、次のようにエラーになります。&lt;br&gt;&lt;br&gt;DECLARE before_tax_price DECIMAL(13,2);&lt;br&gt;[実行結果]&lt;br&gt;MySQL で変数を定義する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;ちなみに、ユーザー定義変数もローカル変数も、次のような感じで SELECT INTO 文を使っても変数に値を代入できます。&lt;br&gt;&lt;br&gt;SET @full_name = &#039;&#039;;&lt;br&gt;&lt;br&gt;SELECT 	CONCAT(first_name, &#039; &#039;, last_name) INTO @full_name&lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id = 1;&lt;br&gt;&lt;br&gt;SELECT @full_name;&lt;br&gt;[実行結果]&lt;br&gt;MySQL で変数を定義する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で変数を定義する方法をご説明しました。&lt;br&gt;&lt;br&gt;</description><pubDate>Thu, 31 Jul 2025 04:27:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のビューの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-views.php</link><description>MySQL のビューの一覧を取得する&lt;br&gt;&lt;br&gt;ここでは MySQL でデータベース内のビュー (VIEW) の一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;SHOW FULL TABLES でビューの一覧を取得する&lt;br&gt;SHOW CREATE VIEW でビューの定義を取得する&lt;br&gt;INFORMATION_SCHEMA.VIEWS でビューの一覧を取得する&lt;br&gt;MySQL Workbench でビューを確認・編集する&lt;br&gt;SHOW FULL TABLES でビューの一覧を取得する&lt;br&gt;MySQL の SHOW TABLES 文を使うと、データベース内のテーブルとビューの一覧を取得することができます。&lt;br&gt;</description><pubDate>Mon, 28 Jul 2025 03:39:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で改行を削除する方法</title><link>https://mysql.sql55.com/query/mysql-how-to-remove-carriage-returns.php</link><description>MySQL で改行を削除する方法&lt;br&gt;&lt;br&gt;データベースに保存されたテキストデータの中に、意図しない改行が入っていて困ったことはありませんか？&lt;br&gt;&lt;br&gt;この記事では、MySQL で 文字列中の改行を削除する方法と、その際の注意点についてご紹介します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;改行を削除する基本的な方法&lt;br&gt;REPLACE() と CHAR() 関数を使って改行を削除する&lt;br&gt;複数の改行コードをまとめて削除する&lt;br&gt;文字列の最後にある改行コードのみを削除する</description><pubDate>Fri, 11 Jul 2025 00:50:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL で改行を挿入する方法</title><link>https://mysql.sql55.com/query/mysql-how-to-insert-carriage-return.php</link><description>MySQL で改行を挿入する方法&lt;br&gt;&lt;br&gt;データベースに文字列を保存する時や、エラーメッセージなどを生成するときに、「改行を入れたい」と思ったことはありませんか？&lt;br&gt;&lt;br&gt;今回は、MySQL で改行を挿入する方法と、それに関連する注意点についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;OS ごとの改行コードの違いについて&lt;br&gt;\n または \r\n を使って改行を挿入する&lt;br&gt;CHAR() 関数を使って改行を挿入する&lt;br&gt;REPLACE() 関数を使って改行コードを置き換える&lt;br&gt;OS ごとの改行コードの違いについて&lt;br&gt;改行はテキストの中で行を区切るための特殊な文字で、環境によって次のように異なります。&lt;br&gt;&lt;br&gt;Unix/Linux/macOS は \n - (LF)&lt;br&gt;Windows は \r\n - (CR+LF)&lt;br&gt;VS Code などのモダンなエディタでは、どちらの環境で、どちらの改行コードでも、ちゃんと改行されて表示されるようになってはきています。&lt;br&gt;&lt;br&gt;&lt;br&gt;\n または \r\n を使って改行を挿入する&lt;br&gt;MySQLでは、文字列中に \n または \r\n を含めることで改行を挿入できます。&lt;br&gt;&lt;br&gt;例えば、私は今 macOS を使っているので、「1行目のテキスト」と「2行目のテキスト」の間に改行を入れたい場合は次のようにできます。&lt;br&gt;&lt;br&gt;SET @message = &#039;1行目のテキスト\n2行目のテキスト&#039;;&lt;br&gt;SELECT @message;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQLで改行を挿入する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;改行が入っていることを確認するために、結果の文字列をコピーして、テキストエディタに貼り付けてみました。&lt;br&gt;&lt;br&gt;MySQLで改行を挿入する方法 2&lt;br&gt;&lt;br&gt;「1行目のテキスト」と「2行目のテキスト」の間に改行が入っていることがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;CHAR() 関数を使って改行を挿入する&lt;br&gt;MySQLで、CHAR() 関数を使っても、文字列中に改行を入れることができます。&lt;br&gt;&lt;br&gt;CHAR(10) が Line Feed: LF で、CHAR(13) が Carriage Return: CR です。&lt;br&gt;&lt;br&gt;&lt;br&gt;macOS の環境で、CHAR(10) を使って改行を入れたい場合は次のようにできます。&lt;br&gt;&lt;br&gt;SET @message := &#039;&#039;;&lt;br&gt;SET @message = CONCAT(@message, &#039;1行目のテキスト&#039;, CHAR(10), &#039;2行目のテキスト&#039;);&lt;br&gt;SELECT @message;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQLで改行を挿入する方法 3&lt;br&gt;&lt;br&gt;1 行目で @message を明示的に変数を文字列型として初期化しています。&lt;br&gt;&lt;br&gt;そうしないと、CHAR(10) は BINARY 型として扱われる可能性があり、CONCAT() に BINARY 型の引数が含まれると、結果も BINARY になり、型は BLOB になってしまうためです。&lt;br&gt;&lt;br&gt;BLOB 型になるのを避けるには、変数を文字列型で初期化するか、CAST() や CONVERT() を使うのが安全です。&lt;br&gt;&lt;br&gt;&lt;br&gt;結果の文字列をコピーして、テキストエディタに貼り付けると、先ほどと同様に改行が入っています。&lt;br&gt;&lt;br&gt;MySQLで改行を挿入する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;REPLACE() 関数を使って改行コードを置き換える&lt;br&gt;改行コードはOSによって異なるため、データのやりとりや外部システムとの連携時に注意が必要です。&lt;br&gt;&lt;br&gt;例えば、Windows から取り込んだ CSV ファイルでは \r\n が使われていることが多く、そのまま保存されてしまいます。&lt;br&gt;&lt;br&gt;必要に応じて、REPLACE() 関数で改行コードを統一することも可能です。&lt;br&gt;&lt;br&gt;SET @message = &#039;1行目のテキスト\r\n2行目のテキスト&#039;;&lt;br&gt;SET @message = REPLACE(@message, &#039;\r\n&#039;, &#039;\n&#039;);&lt;br&gt;SELECT @message;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQLで改行を挿入する方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で改行を挿入する方法と、それに関連する注意点についてご説明しました。</description><pubDate>Wed, 09 Jul 2025 03:02:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL のインデックスの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-indexes.php</link><description>MySQL のインデックスの一覧を取得する&lt;br&gt;&lt;br&gt;ここでは MySQL でデータベース内のインデックスの一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;INFORMATION_SCHEMA.STATISTICS でインデックスの一覧を取得する&lt;br&gt;SHOW INDEX でインデックスの一覧を取得する&lt;br&gt;MySQL Workbench でインデックスを確認・生成・削除する&lt;br&gt;INFORMATION_SCHEMA.STATISTICS でインデックスの一覧を取得する&lt;br&gt;MySQL の INFORMATION_SCHEMA.STATISTICS システムビューから、インデックスの一覧を取得することができます。&lt;br&gt;</description><pubDate>Tue, 08 Jul 2025 05:17:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のトリガーの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-triggers.php</link><description>MySQL のトリガーの一覧を取得する&lt;br&gt;&lt;br&gt;ここでは MySQL でデータベース内のトリガーの一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;SHOW TRIGGERS でトリガーの一覧を取得する&lt;br&gt;SHOW CREATE TRIGGER でトリガーの定義を取得する&lt;br&gt;INFORMATION_SCHEMA.TRIGGERS でトリガーの一覧を取得する&lt;br&gt;MySQL Workbench でトリガーを確認する</description><pubDate>Sun, 06 Jul 2025 18:05:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で整数の年・月・日 から DATE 型の日付を生成する方法</title><link>https://mysql.sql55.com/query/mysql-how-to-get-date-from-year-month-day.php</link><description>MySQL で整数の年・月・日 から DATE 型の日付を生成する方法&lt;br&gt;&lt;br&gt;ここでは、MySQL で整数の年・月・日 から、DATE 型日付の値を生成する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の STR_TO_DATE() 関数の使い方&lt;br&gt;STR_TO_DATE() 関数 で整数の年・月・日 から DATE 型の日付を生成する&lt;br&gt;DATE() 関数 で整数の年・月・日 から DATE 型の日付を生成する&lt;br&gt;MySQL の STR_TO_DATE() 関数の使い方&lt;br&gt;MySQL で整数の年・月・日 から、DATE 型日付の値を生成するには、いろいろな方法があります。&lt;br&gt;&lt;br&gt;ここでは、STR_TO_DATE() 関数を使った方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;STR_TO_DATE() 関数は指定したフォーマットで文字列を日付型の値に変換して返す関数です。&lt;br&gt;&lt;br&gt;STR_TO_DATE(文字列, フォーマット文字列)&lt;br&gt;フォーマット文字列に日付と時間が含まれている場合は DATETIME 型の値が返ります。&lt;br&gt;&lt;br&gt;フォーマット文字列に日付しか含まれていない場合は DATE 型の値が返ります。&lt;br&gt;&lt;br&gt;フォーマット文字列に時間しか含まれていない場合は TIME 型の値が返ります。&lt;br&gt;&lt;br&gt;文字列が日付にできない場合はエラーにはならず、null を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;フォーマット文字列には次のようなものがあります。&lt;br&gt;&lt;br&gt;MySQL で整数の年・月・日 から DATE 型の日付を生成する方法 1&lt;br&gt;&lt;br&gt;MySQL Reference Manual - Date and Time Functions より&lt;br&gt;&lt;br&gt;&lt;br&gt;STR_TO_DATE() 関数 で整数の年・月・日 から DATE 型の日付を生成する&lt;br&gt;それでは、STR_TO_DATE() 関数を使って、年・月・日 整数から日付 DATE 型を生成してみます。&lt;br&gt;&lt;br&gt;今回は 4 桁の年・月・日から日付型を生成するので、フォーマット文字列には %Y・%m・%d を使います。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、年: 2024、月: 10、日: 5 から DATE 型の値を生成したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SET @year = 2024;&lt;br&gt;SET @month = 10;&lt;br&gt;SET @day = 5;&lt;br&gt;&lt;br&gt; SELECT STR_TO_DATE(CONCAT_WS(&#039;-&#039;, @year, @month, @day), &#039;%Y-%m-%d&#039;) AS ResultDate;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で整数の年・月・日 から DATE 型の日付を生成する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;まずは、CONCAT_WS() 関数を使って、@year, @month, @day を - でつなげて &#039;2024-10-5&#039; を生成しています。&lt;br&gt;&lt;br&gt;CONCAT_WS() 関数の使い方については「MySQL の CONCAT_WS() 関数の使い方」をご覧ください。&lt;br&gt;&lt;br&gt;そして、STR_TO_DATE() 関数に CONCAT_WS() 関数で生成した文字列と、それに合うフォーマット文字列 &#039;%Y-%m-%d&#039; を渡して、日付型の値 2024-10-05 を取得しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;DATE() 関数 で整数の年・月・日 から DATE 型の日付を生成する&lt;br&gt;DATE() 関数を使っても、 整数の年・月・日から DATE 型の値を生成することができます。&lt;br&gt;&lt;br&gt;SET @year = 2024;&lt;br&gt;SET @month = 10;&lt;br&gt;SET @day = 5;&lt;br&gt;&lt;br&gt; SELECT DATE(CONCAT_WS(&#039;-&#039;, @year, @month, @day)) AS ResultDate;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で整数の年・月・日 から DATE 型の日付を生成する方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;こちらも、CONCAT_WS() 関数を使って、@year, @month, @day を - でつなげて &#039;2024-10-5&#039; を生成しています。&lt;br&gt;&lt;br&gt;そして、DATE() 関数に CONCAT_WS() 関数で生成した文字列を渡して、日付型の値 2024-10-05 を取得しています。&lt;br&gt;&lt;br&gt;DATE() 関数も、引数が日付に変換できない値でも、エラーにはならず null が返ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で整数の年・月・日 から DATE 型の日付を生成する方法をご説明しました。</description><pubDate>Wed, 27 Mar 2024 06:49:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL のファンクションの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-functions.php</link><description>MySQL のファンクションの一覧を取得する&lt;br&gt;&lt;br&gt;ここでは MySQL でデータベース内のファンクション一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;SHOW FUNCTION STATUS でファンクション一覧を取得する&lt;br&gt;SHOW CREATE FUNCTION でファンクションの定義を取得する&lt;br&gt;INFORMATION_SCHEMA.ROUTINES でファンクション一覧を取得する&lt;br&gt;MySQL Workbench でファンクションの一覧を確認・編集する&lt;br&gt;SHOW FUNCTION STATUS でファンクション一覧を取得する&lt;br&gt;MySQL の SHOW FUNCTION STATUS 文を使うと、データベース内のファンクションの一覧を取得することができます。&lt;br&gt;&lt;br&gt;SHOW FUNCTION STATUS; とだけ実行すると、全データベースのファンクションの一覧が取得できます。&lt;br&gt;&lt;br&gt;ユーザーが定義したファンクションだけでなく、システムのファンクションも含まれます。&lt;br&gt;&lt;br&gt;SHOW FUNCTION STATUS;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;データベースを指定して、ファンクションの一覧を取得したい時は、WHERE 句で Db = [データベース名] のよう指定することができます。&lt;br&gt;&lt;br&gt;例えば test_db データベースのファンクションの一覧を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW FUNCTION STATUS WHERE Db = &#039;test_db&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;ファンクション名をキーワードで検索して一覧を取得したい時は、LIKE &#039;キーワード&#039; のよう指定することができます。&lt;br&gt;&lt;br&gt;例えば get という言葉がファンクション名に入ったファンクションの一覧を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW FUNCTION STATUS LIKE &#039;%get%&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;SHOW CREATE FUNCTION でファンクションの定義を取得する&lt;br&gt;見つけたファンクションの定義を取得したい場合は SHOW CREATE FUNCTION 文が使えます。&lt;br&gt;&lt;br&gt;ファンクションが存在するデータベースを選択して実行します。&lt;br&gt;&lt;br&gt;例えば、get_before_tax_price という名前のファンクションの定義を取得したい場合は、次のようにできます。&lt;br&gt;&lt;br&gt;SHOW CREATE FUNCTION get_before_tax_price;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 4&lt;br&gt;&lt;br&gt;結果セットの Create Function カラムにファンクションの定義があります。&lt;br&gt;&lt;br&gt;CREATE DEFINER=`root`@`localhost` FUNCTION `get_before_tax_price`(&lt;br&gt;	after_tax_price DECIMAL(13,2)&lt;br&gt;) RETURNS decimal(13,2)&lt;br&gt;    DETERMINISTIC&lt;br&gt;BEGIN&lt;br&gt;	&lt;br&gt;    DECLARE before_tax_price DECIMAL(13,2);&lt;br&gt;    DECLARE sale_tax_percent DECIMAL(5,2) DEFAULT 10; -- 10%&lt;br&gt;    &lt;br&gt;    SET before_tax_price = IFNULL(after_tax_price, 0) * 100 / (sale_tax_percent + 100) ;&lt;br&gt;    RETURN  before_tax_price;&lt;br&gt;    &lt;br&gt;END&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.ROUTINES でファンクション一覧を取得する&lt;br&gt;MySQL の INFORMATION_SCHEMA.ROUTINES システムビューからも、ファンクションの一覧を取得することができます。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.ROUTINES には、次のようにシステム用のファンクションやストアドプロシージャも含まれます。&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;ファンクションのみを取得するには、ROUTINE_TYPE = &#039;FUNCTION&#039; を指定します。&lt;br&gt;&lt;br&gt;データベースを指定するには ROUTINE_SCHEMA = &#039;データベース名&#039; のようにフィルターします。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、INFORMATION_SCHEMA.ROUTINES から test_db データベースのファンクション一覧を取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM	INFORMATION_SCHEMA.ROUTINES &lt;br&gt;WHERE 	ROUTINE_TYPE = &#039;FUNCTION&#039; &lt;br&gt;		AND ROUTINE_SCHEMA = &#039;test_db&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 6&lt;br&gt;&lt;br&gt;SPECIFIC_NAME と ROUTINE_NAME がファンクション名で、同じ値を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;ROUTINE_DEFINITION カラムにもファンクションの定義が入っていますが、BEGIN から END までで引数の定義は入っていません。&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 7&lt;br&gt;&lt;br&gt;BEGIN&lt;br&gt;	&lt;br&gt;	DECLARE before_tax_price DECIMAL(13,2);&lt;br&gt;	DECLARE sale_tax_percent DECIMAL(5,2) DEFAULT 10; -- 10%&lt;br&gt;	&lt;br&gt;	SET before_tax_price = IFNULL(after_tax_price, 0) * 100 / (sale_tax_percent + 100) ;&lt;br&gt;	RETURN  before_tax_price;&lt;br&gt;	&lt;br&gt;END&lt;br&gt;&lt;br&gt;MySQL Workbench でファンクションの一覧を確認・編集する&lt;br&gt;MySQL Workbench の Schema タブの [Database] &gt; [Functions] でも、ファンクションの一覧を確認することができます。&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 8&lt;br&gt;&lt;br&gt;&lt;br&gt;編集するには、編集したいファンクションを選択して右クリックし [Alter Function...] を選択します。&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 9&lt;br&gt;&lt;br&gt;&lt;br&gt;編集画面が開くので、変更して [Apply] ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のファンクションの一覧を取得する 10&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でファンクションの一覧を取得する方法ご説明しました。</description><pubDate>Tue, 26 Mar 2024 08:58:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のストアドプロシージャの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-stored-procedures.php</link><description>MySQL のストアドプロシージャの一覧を取得する&lt;br&gt;&lt;br&gt;ここでは MySQL でデータベース内のストアドプロシージャ一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;SHOW PROCEDURE STATUS でストアドプロシージャ一覧を取得する&lt;br&gt;SHOW CREATE PROCEDURE でストアドプロシージャの定義を取得する&lt;br&gt;INFORMATION_SCHEMA.ROUTINES でストアドプロシージャ一覧を取得する&lt;br&gt;MySQL Workbench でストアドプロシージャの一覧を確認・編集する&lt;br&gt;SHOW PROCEDURE STATUS でストアドプロシージャ一覧を取得する&lt;br&gt;MySQL の SHOW PROCEDURE STATUS 文を使うと、データベース内のストアドプロシージャの一覧を取得することができます。&lt;br&gt;&lt;br&gt;SHOW PROCEDURE STATUS; とだけ実行すると、全データベースのストアドプロシージャの一覧が取得できます。&lt;br&gt;&lt;br&gt;ユーザーが定義したストアドプロシージャだけでなく、システムのストアドプロシージャも含まれます。&lt;br&gt;&lt;br&gt;SHOW PROCEDURE STATUS;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;データベースを指定して、ストアドプロシージャの一覧を取得したい時は、WHERE 句で Db = [データベース名] のよう指定することができます。&lt;br&gt;&lt;br&gt;例えば test データベースのストアドプロシージャの一覧を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW PROCEDURE STATUS WHERE Db = &#039;test&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;ストアドプロシージャ名をキーワードで検索して一覧を取得したい時は、LIKE &#039;キーワード&#039; のよう指定することができます。&lt;br&gt;&lt;br&gt;例えば insert という言葉がストアドプロシージャ名に入ったストアドプロシージャの一覧を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW PROCEDURE STATUS LIKE &#039;%insert%&#039;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;SHOW CREATE PROCEDURE でストアドプロシージャの定義を取得する&lt;br&gt;見つけたストアドプロシージャの定義を取得したい場合は SHOW CREATE PROCEDURE 文が使えます。&lt;br&gt;&lt;br&gt;insert_exam という名前のストアドプロシージャの定義を取得したい場合は、次のようにできます。&lt;br&gt;&lt;br&gt;SHOW CREATE PROCEDURE insert_exam;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 4&lt;br&gt;&lt;br&gt;結果セットの Create Procedure カラムにストアドプロシージャの定義があります。&lt;br&gt;&lt;br&gt;CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_exam`(&lt;br&gt;	in_exam_name_en VARCHAR(50),&lt;br&gt;	in_exam_name_jp VARCHAR(50),&lt;br&gt;    OUT out_result VARCHAR(50)&lt;br&gt;)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	INSERT INTO exams&lt;br&gt;		( exam_name_en, exam_name_jp )&lt;br&gt;    VALUES  &lt;br&gt;		(in_exam_name_en, in_exam_name_jp);&lt;br&gt;        &lt;br&gt;	SET out_result = &#039;テスト&#039;;&lt;br&gt;    &lt;br&gt;END&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.ROUTINES でストアドプロシージャ一覧を取得する&lt;br&gt;MySQL の INFORMATION_SCHEMA.ROUTINES システムビューからも、ストアドプロシージャの一覧を取得することができます。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.ROUTINES には、次のようにシステム用のストアドプロシージャやファンクションも含まれます。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;ストアドプロシージャのみを取得するには、ROUTINE_TYPE = &#039;PROCEDURE&#039; を指定します。&lt;br&gt;&lt;br&gt;データベースを指定するには ROUTINE_SCHEMA = &#039;データベース名&#039; のようにフィルターします。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、INFORMATION_SCHEMA.ROUTINES から test データベースのストアドプロシージャ一覧を取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM	INFORMATION_SCHEMA.ROUTINES &lt;br&gt;WHERE 	ROUTINE_TYPE = &#039;PROCEDURE&#039; &lt;br&gt;		AND ROUTINE_SCHEMA = &#039;test&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 6&lt;br&gt;&lt;br&gt;SPECIFIC_NAME と ROUTINE_NAME がストアドプロシージャ名で、同じ値を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;ROUTINE_DEFINITION カラムにもストアドプロシージャの定義が入っていますが、BEGIN から END までで引数の定義は入っていません。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 7&lt;br&gt;&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;INSERT INTO exams&lt;br&gt;	( exam_name_en, exam_name_jp )&lt;br&gt;	VALUES  &lt;br&gt;	(in_exam_name_en, in_exam_name_jp);&lt;br&gt;			&lt;br&gt;SET out_result = &#039;&#039;テスト&#039;&#039;;&lt;br&gt;	&lt;br&gt;END&lt;br&gt;&lt;br&gt;MySQL Workbench でストアドプロシージャの一覧を確認・編集する&lt;br&gt;MySQL Workbench の Schema タブの [Database] &gt; [Stored Procedures] でも、ストアドプロシージャの一覧を確認することができます。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 8&lt;br&gt;&lt;br&gt;&lt;br&gt;編集するには、編集したいストアドプロシージャを選択して右クリックし [Alter Stored Procedure...] を選択します。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 9&lt;br&gt;&lt;br&gt;&lt;br&gt;編集画面が開くので、変更して [Apply] ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャの一覧を取得する 10&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でストアドプロシージャの一覧を取得する方法ご説明しました。</description><pubDate>Fri, 22 Mar 2024 07:21:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法</title><link>https://mysql.sql55.com/env/mysql-workbench-how-to-export-data-to-csv-file.php</link><description>MySQL のクエリーで取得したデータを CSV などの形式でファイルにエクスポートしたい時ありますよね。&lt;br&gt;&lt;br&gt;ここでは、MySQL Workbench を使って、クエリー結果をファイルにエクスポートする方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;まず、MySQL Workbench でデータベースサーバに接続して、データベースを選択し、SQL タブを開きます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;データを取得するクエリーを実行します。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;Result Grid の上部にある Export ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;Export Resultset のポップアップ画面が表示されるので、Save As にファイル名、Format に今回は CSV を選択して Save ボタンをクリックします。&lt;br&gt;&lt;br&gt;CSV 以外にも、Excel やタブ区切り、JSON、XML などのフォーマットでも保存できます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;生成された test.csv ファイルを開いてみると、CSV形式でクエリー結果が保存されていますね。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL Workbench を使って、クエリー結果をファイルにエクスポートする方法をご紹介しました。</description><pubDate>Tue, 14 Mar 2023 20:51:00 GMT</pubDate><category>MySQL Workbench の使い方</category></item>
<item><title>MySQL Workbench の使い方</title><link>https://mysql.sql55.com/env/how-to-use-mysql-workbench.php</link><description>MySQL Workbench は、公式の MySQL データベースシステムを使った開発や管理などを行うための統合管理ツールです。&lt;br&gt;&lt;br&gt;このサイトでは、MySQL Workbench を使って、ローカルにインストールした MySQL データベースサーバに接続して、クエリーを実行しながら MySQL を学んでいきます。&lt;br&gt;&lt;br&gt;まだ、MySQL と MySQL Workbench をインストールしていない方は、以下のページをご参考にインストールしておいてください。&lt;br&gt;&lt;br&gt;MySQL と MySQL Workbench のインストール方法 - Windows&lt;br&gt;MySQL のインストール方法 - Mac&lt;br&gt;MySQL Workbench のインストール方法 - Mac&lt;br&gt;&lt;br&gt;ここでは、MySQL Workbench の使い方をご説明していきます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリー結果を CSV ファイルにエクスポートする方法</description><pubDate>Tue, 14 Mar 2023 20:49:00 GMT</pubDate><category>MySQL Workbench の使い方</category></item>
<item><title>MySQL の IS NULL / IS NOT NULL</title><link>https://mysql.sql55.com/sql/mysql-is-null-operator.php</link><description>ここでは MySQL の IS NULL と IS NOT NULL 演算子についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の IS NULL 演算子&lt;br&gt;MySQL の IS NOT NULL 演算子&lt;br&gt;MySQL の IS NULL 演算子&lt;br&gt;MySQL でクエリーでデータを取得する際に、あるカラムの値が NULL のレコードを取得したい時があると思います。&lt;br&gt;&lt;br&gt;そんな時に WHERE 句で [カラム名] = NULL のように書いても、そのカラムの値が NULL のレコードを取得することはできません。&lt;br&gt;&lt;br&gt;値が NULL のレコードを取得したい時は IS NULL 演算子を使って、[カラム名] IS NULL のように指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;IS NULL 演算子を使ってテーブルからデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の IS NULL / IS NOT NULL 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この exam_results テーブルから score が NULL のデータのみを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	score IS NULL;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IS NULL / IS NOT NULL 2&lt;br&gt;&lt;br&gt;score が NULL のレコードのみが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;ちなみに、IS NULL の代わりに = NULL を使うと次のようになります。&lt;br&gt;&lt;br&gt;MySQL の IS NULL / IS NOT NULL 3&lt;br&gt;&lt;br&gt;score = NULL は常に False になるので、取得されたレコードは 0 行です。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の IS NOT NULL 演算子&lt;br&gt;先ほどとは反対で、あるカラムの値が NULL ではないレコードを取得したい時があると思います。&lt;br&gt;&lt;br&gt;そんな時に WHERE 句で [カラム名] &lt;&gt; NULL のように書いても、そのカラムの値が NULL ではないレコードを取得することはできません。&lt;br&gt;&lt;br&gt;値が NULL ではないレコードを取得したい時は IS NOT NULL 演算子を使って、[カラム名] IS NOT NULL のように指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;IS NOT NULL 演算子を使ってテーブルからデータを取得してみましょう。&lt;br&gt;&lt;br&gt;exam_results テーブルから score が NULL ではないデータのみを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	score IS NOT NULL;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IS NULL / IS NOT NULL 4&lt;br&gt;&lt;br&gt;score が NULL 以外のレコードが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;IS NOT NULL の代わりに &lt;&gt; NULL を使うと次のようになります。&lt;br&gt;&lt;br&gt;MySQL の IS NULL / IS NOT NULL 5&lt;br&gt;&lt;br&gt;score &lt;&gt; NULL は常に False になるので、レコードはひとつも取得されません。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の IS NULL と IS NOT NULL 演算子についてご説明しました。</description><pubDate>Wed, 01 Mar 2023 07:46:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でクエリー結果から JSON を生成する</title><link>https://mysql.sql55.com/query/mysql-convert-query-result-to-json.php</link><description>MySQL でクエリー結果から JSON を生成する&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは、MySQL のクエリーの結果から、JSON を生成する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL でクエリー結果から JSON を生成する&lt;br&gt;MySQL でクエリー結果からネストした JSON を生成する&lt;br&gt;MySQL でクエリー結果から JSON を生成する&lt;br&gt;MySQL には JSON を生成するための組み込み関数が用意されています。&lt;br&gt;&lt;br&gt;今回はクエリー結果から JSON を生成するのに、JSON_OBJECT() と JSON_ARRAYAGG() 関数を使います。&lt;br&gt;&lt;br&gt;&lt;br&gt;JSON_OBJECT() 関数は次のように引数にキーと値の対を指定しすると、キーバリューペアの JSON オブジェクトを返す関数です。&lt;br&gt;&lt;br&gt;JSON_OBJECT([key1, value1[, key2, value2] ...])&lt;br&gt;キーと値のセットを二個指定すると、{&quot;key1&quot;: &quot;value1&quot;, &quot;key2&quot;: &quot;value2&quot;} のような JSON オブジェクトが返ります。&lt;br&gt;&lt;br&gt;キーが NULL だったり、引数の数が偶数でないとエラーになります。&lt;br&gt;&lt;br&gt;キーと値のセットの順番は、引数として渡した順番と変わる可能性があります。&lt;br&gt;&lt;br&gt;同じキーを複数回指定してしまった場合は、最後に指定したキーと値のセットのみが返ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;JSON_ARRAYAGG() 関数は結果セットをひとつの JSON 配列にして返す集計関数です。&lt;br&gt;&lt;br&gt;JSON_ARRAYAGG(col_or_expr) [over_clause]&lt;br&gt;今回は、JSON_ARRAYAGG() に JSON_OBJECT() で生成した JSON オブジェクトを渡して、複数の JSON オブジェクトをひとつの JSON につなげます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、実際にクエリーの結果セットから JSON_OBJECT() と JSON_ARRAYAGG() 関数 を使って JSON を生成してみます。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でクエリー結果から JSON を生成する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルの、student_number、first_name、last_name を含む JSON を生成するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT  JSON_ARRAYAGG(&lt;br&gt;			JSON_OBJECT(&lt;br&gt;				&#039;studentNumber&#039;, student_number, &lt;br&gt;				&#039;firstName&#039;, first_name,&lt;br&gt;                &#039;lastName&#039;, last_name&lt;br&gt;			)&lt;br&gt;		) AS student_json&lt;br&gt;FROM 	students;&lt;br&gt;&lt;br&gt; &lt;br&gt;SELECT 文で JSON_OBJECT() に、キーの名前と対応するカラムのセットを三つ続けて渡しています。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;それの戻り値を JSON_ARRAYAGG() に渡して、JSON をつなげてひとつの JSON オブジェクトにしています。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、次のような結果が得られます。&lt;br&gt;&lt;br&gt;[{&quot;lastName&quot;: &quot;Tanaka&quot;, &quot;firstName&quot;: &quot;Yuta&quot;, &quot;studentNumber&quot;: &quot;S000001&quot;}, {&quot;lastName&quot;: &quot;Hata&quot;, &quot;firstName&quot;: &quot;Sakura&quot;, &quot;studentNumber&quot;: &quot;S000002&quot;}, {&quot;lastName&quot;: &quot;Tanaka&quot;, &quot;firstName&quot;: &quot;Aya&quot;, &quot;studentNumber&quot;: &quot;S000003&quot;}, {&quot;lastName&quot;: &quot;Suzuki&quot;, &quot;firstName&quot;: &quot;Hiroki&quot;, &quot;studentNumber&quot;: &quot;S000004&quot;}, {&quot;lastName&quot;: &quot;Sasaki&quot;, &quot;firstName&quot;: &quot;Yuri&quot;, &quot;studentNumber&quot;: &quot;S000005&quot;}, {&quot;lastName&quot;: &quot;Saito&quot;, &quot;firstName&quot;: &quot;Ryo&quot;, &quot;studentNumber&quot;: &quot;S000006&quot;}]&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL でクエリー結果から JSON を生成する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;見やすいようにフォーマットすると次のようになっています。&lt;br&gt;&lt;br&gt;[&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Tanaka&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Yuta&quot;,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000001&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Hata&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Sakura&quot;,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000002&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Tanaka&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Aya&quot;,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000003&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Suzuki&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Hiroki&quot;,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000004&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Sasaki&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Yuri&quot;,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000005&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Saito&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Ryo&quot;,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000006&quot;&lt;br&gt;   }&lt;br&gt;]&lt;br&gt;&lt;br&gt;MySQL でクエリー結果からネストした JSON を生成する&lt;br&gt;次は MySQL の JSON_OBJECT() と JSON_ARRAYAGG() 関数を使って、ネストした JSON を生成してみます。&lt;br&gt;&lt;br&gt;&lt;br&gt;students テーブルのほかに、次のような exams テーブルと exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でクエリー結果から JSON を生成する 3&lt;br&gt;&lt;br&gt;MySQL でクエリー結果から JSON を生成する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;students テーブルの、student_number、first_name、last_name に加えて、その学生のテスト結果として、exams テーブルから exam_name_en カラムの値と、exam_results テーブルから score カラムの値を、examResults 要素として JSON に配列で追加するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT	JSON_ARRAYAGG(&lt;br&gt;			JSON_OBJECT(&lt;br&gt;			&#039;studentNumber&#039;, s.student_number,&lt;br&gt;			&#039;firstName&#039;, s.first_name,&lt;br&gt;			&#039;lastName&#039;, last_name,&lt;br&gt;			&#039;examResults&#039;, (SELECT	JSON_ARRAYAGG(&lt;br&gt;										JSON_OBJECT(&lt;br&gt;											&#039;examName&#039;, e.exam_name_en,&lt;br&gt;											&#039;score&#039;, er.score&lt;br&gt;										)&lt;br&gt;									)   &lt;br&gt;							FROM 	exam_results AS er&lt;br&gt;										INNER JOIN exams AS e&lt;br&gt;											ON er.exam_id = e.exam_id&lt;br&gt;							WHERE  	er.student_id = s.student_id)&lt;br&gt;			)&lt;br&gt;		) AS student_json&lt;br&gt; FROM	students AS s;&lt;br&gt;&lt;br&gt; &lt;br&gt;6 ~ 15 行目が新しく追加された箇所で、examResults というキーに対して、値に JSON_ARRAYAGG() と JSON_OBJECT() を使って、exam_results と exams テーブルを JOIN した結果セットから JSON を生成したものを指定しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、次のような結果が得られます。&lt;br&gt;&lt;br&gt;[{&quot;lastName&quot;: &quot;Tanaka&quot;, &quot;firstName&quot;: &quot;Yuta&quot;, &quot;examResults&quot;: [{&quot;score&quot;: 85, &quot;examName&quot;: &quot;Math 1&quot;}, {&quot;score&quot;: 77, &quot;examName&quot;: &quot;English 1&quot;}], &quot;studentNumber&quot;: &quot;S000001&quot;}, {&quot;lastName&quot;: &quot;Hata&quot;, &quot;firstName&quot;: &quot;Sakura&quot;, &quot;examResults&quot;: [{&quot;score&quot;: 60, &quot;examName&quot;: &quot;Math 1&quot;}], &quot;studentNumber&quot;: &quot;S000002&quot;}, {&quot;lastName&quot;: &quot;Tanaka&quot;, &quot;firstName&quot;: &quot;Aya&quot;, &quot;examResults&quot;: [{&quot;score&quot;: 92, &quot;examName&quot;: &quot;English 1&quot;}], &quot;studentNumber&quot;: &quot;S000003&quot;}, {&quot;lastName&quot;: &quot;Suzuki&quot;, &quot;firstName&quot;: &quot;Hiroki&quot;, &quot;examResults&quot;: [{&quot;score&quot;: 98, &quot;examName&quot;: &quot;Math 1&quot;}, {&quot;score&quot;: 81, &quot;examName&quot;: &quot;English 1&quot;}], &quot;studentNumber&quot;: &quot;S000004&quot;}, {&quot;lastName&quot;: &quot;Sasaki&quot;, &quot;firstName&quot;: &quot;Yuri&quot;, &quot;examResults&quot;: [{&quot;score&quot;: 73, &quot;examName&quot;: &quot;Math 1&quot;}], &quot;studentNumber&quot;: &quot;S000005&quot;}, {&quot;lastName&quot;: &quot;Saito&quot;, &quot;firstName&quot;: &quot;Ryo&quot;, &quot;examResults&quot;: null, &quot;studentNumber&quot;: &quot;S000006&quot;}]&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL でクエリー結果から JSON を生成する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;見やすいようにフォーマットすると次のようになっています。&lt;br&gt;&lt;br&gt;[&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Tanaka&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Yuta&quot;,&lt;br&gt;      &quot;examResults&quot;:[&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:85,&lt;br&gt;            &quot;examName&quot;:&quot;Math 1&quot;&lt;br&gt;         },&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:77,&lt;br&gt;            &quot;examName&quot;:&quot;English 1&quot;&lt;br&gt;         }&lt;br&gt;      ],&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000001&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Hata&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Sakura&quot;,&lt;br&gt;      &quot;examResults&quot;:[&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:60,&lt;br&gt;            &quot;examName&quot;:&quot;Math 1&quot;&lt;br&gt;         }&lt;br&gt;      ],&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000002&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Tanaka&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Aya&quot;,&lt;br&gt;      &quot;examResults&quot;:[&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:92,&lt;br&gt;            &quot;examName&quot;:&quot;English 1&quot;&lt;br&gt;         }&lt;br&gt;      ],&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000003&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Suzuki&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Hiroki&quot;,&lt;br&gt;      &quot;examResults&quot;:[&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:98,&lt;br&gt;            &quot;examName&quot;:&quot;Math 1&quot;&lt;br&gt;         },&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:81,&lt;br&gt;            &quot;examName&quot;:&quot;English 1&quot;&lt;br&gt;         }&lt;br&gt;      ],&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000004&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Sasaki&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Yuri&quot;,&lt;br&gt;      &quot;examResults&quot;:[&lt;br&gt;         {&lt;br&gt;            &quot;score&quot;:73,&lt;br&gt;            &quot;examName&quot;:&quot;Math 1&quot;&lt;br&gt;         }&lt;br&gt;      ],&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000005&quot;&lt;br&gt;   },&lt;br&gt;   {&lt;br&gt;      &quot;lastName&quot;:&quot;Saito&quot;,&lt;br&gt;      &quot;firstName&quot;:&quot;Ryo&quot;,&lt;br&gt;      &quot;examResults&quot;:null,&lt;br&gt;      &quot;studentNumber&quot;:&quot;S000006&quot;&lt;br&gt;   }&lt;br&gt;]&lt;br&gt;&lt;br&gt;以上、MySQL のクエリーの結果から、JSON を生成する方法をご説明しました。</description><pubDate>Sat, 23 Jul 2022 05:39:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL のカラムの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-columns.php</link><description>MySQL のカラムの一覧を取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でカラムの一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;SHOW COLUMNS でカラムの一覧を取得する&lt;br&gt;DESC でカラムの一覧を取得する&lt;br&gt;INFORMATION_SCHEMA.COLUMNS でカラムの一覧を取得する&lt;br&gt;SHOW COLUMNS でカラムの一覧を取得する&lt;br&gt;MySQL の SHOW COLUMNS 文を使うと、指定したテーブルのカラムの一覧を取得することができます。&lt;br&gt;&lt;br&gt;SHOW COLUMNS FROM テーブル名; のように指定すると、現在選択されているデータベースの指定したテーブルのカラム一覧が取得できます。&lt;br&gt;&lt;br&gt;SHOW COLUMNS 文では、テーブル名は必須です。&lt;br&gt;&lt;br&gt;テーブル名の代わりにビュー名を指定して、ビューのカラム情報を取得することも可能です。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、SHOW COLUMNS 文を使って、school_db データベースを選択した状態で students テーブルのカラムの情報を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW COLUMNS FROM students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;他のデータベースのテーブルのカラム一覧を取得したい時は SHOW COLUMN FROM テーブル名 FROM データベース名; のように指定して取得できます。&lt;br&gt;&lt;br&gt;例えば、school_db データベースを選択した状態で test データベースの student テーブルのカラム一覧を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW COLUMNS FROM student FROM test;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;指定した文字を含むカラムだけを取得したい時は SHOW COLUMNS FROM テーブル名 LIKE &#039;pattern&#039;; を使って取得することができます。&lt;br&gt;&lt;br&gt;例えば、school_db データベース内の students テーブル名の中で、カラム名に name が入っているカラムの情報を取得したい場合は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW COLUMNS FROM students LIKE &#039;%name%&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;DESC でカラムの一覧を取得する&lt;br&gt;MySQL の DESC 文を使っても、カラムの一覧を取得することができます。&lt;br&gt;&lt;br&gt;DESC テーブル名; のように指定すると、現在選択されているデータベースの指定したテーブルのカラム一覧が取得できます。&lt;br&gt;&lt;br&gt;DESC の代わりに DESCRIBE や EXPLAIN を使っても同様の結果が得られます。&lt;br&gt;&lt;br&gt;得られるカラムの情報は SHOW COLUMNS 文と同じです。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、DESC 文を使って、school_db データベースを選択した状態で students テーブルのカラムの情報を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;DESC students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.COLUMNS でカラムの一覧を取得する&lt;br&gt;MySQL の INFORMATION_SCHEMA.COLUMNS システムビューからも、カラムの一覧を取得することができます。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.COLUMNS を使うと、現在選択されているデータベースに関係なく、次のようにシステム用のデータベースも含んだ全データベースのカラムの情報が取得できます。&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;特定のデータベースを指定するには TABLE_SCHEMA = &#039;データベース名&#039; のようにフィルターします。&lt;br&gt;&lt;br&gt;テーブルを指定するには TABLE_NAME = &#039;テーブル名&#039; のようにフィルターします。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、INFORMATION_SCHEMA.COLUMNS を使って、school_db データベースの students テーブルのカラム一覧を取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS&lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;school_db&#039;&lt;br&gt;		AND TABLE_NAME = &#039;students&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 6&lt;br&gt;&lt;br&gt;COLUMN_NAME がカラム名で、取得できるカラムの情報も SHOW COLUMNS 文より多いですね。&lt;br&gt;&lt;br&gt;&lt;br&gt;テーブルを超えてカラムを検索できるので、データベース内で指定したカラム名を持つテーブルの一覧を取得したいような時にも便利です。&lt;br&gt;&lt;br&gt;例えば、INFORMATION_SCHEMA.COLUMNS から school_db データベース内で id という文字が含まれるカラム一覧を取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS&lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;school_db&#039;&lt;br&gt;		AND COLUMN_NAME LIKE &#039;%id%&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のカラムの一覧を取得する 7&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でカラムの一覧を取得する方法をご説明しました。</description><pubDate>Fri, 15 Jul 2022 04:39:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のテーブルの一覧を取得する</title><link>https://mysql.sql55.com/sql/mysql-list-all-tables.php</link><description>&lt;br&gt; ホーム&lt;br&gt;MySQL の基礎&lt;br&gt;MySQL のテーブルの一覧を取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でデータベース内のテーブル一覧を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;SHOW TABLES でテーブル一覧を取得する&lt;br&gt;INFORMATION_SCHEMA.TABLES でテーブル一覧を取得する&lt;br&gt;SHOW TABLES でテーブル一覧を取得する&lt;br&gt;MySQL の SHOW TABLES 文を使うと、データベース内のテーブルの一覧を取得することができます。&lt;br&gt;&lt;br&gt;SHOW TABLES; とだけ実行すると、今選択されているデータベースのテーブルの一覧が取得できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、school_db データベースを選択した状態で SHOW TABLES; を実行すると以下のようになります。&lt;br&gt;&lt;br&gt;SHOW TABLES;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のテーブルの一覧を取得する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;他のデータベースのテーブル一覧を取得したい時は SHOW TABLES FROM データベース名; のように指定して取得できます。&lt;br&gt;&lt;br&gt;例えば、school_db データベースを選択した状態で test データベースのテーブル一覧を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW TABLES FROM test;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のテーブルの一覧を取得する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;指定した文字を含むデータベースだけを取得したい時は SHOW TABLE LIKE &#039;pattern&#039;; を使って取得することができます。&lt;br&gt;&lt;br&gt;例えば、school_db データベース内で、テーブル名が exam で始まるテーブルのみを取得したい場合は次のようにできます。&lt;br&gt;&lt;br&gt;SHOW TABLES LIKE &#039;exam%&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のテーブルの一覧を取得する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.TABLES でテーブル一覧を取得する&lt;br&gt;MySQL の INFORMATION_SCHEMA.TABLES からも、テーブルの一覧を取得することができます。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.TABLES には、次のようにシステム用のテーブルやビューも含まれます。&lt;br&gt;&lt;br&gt;MySQL のテーブルの一覧を取得する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;データベースを指定するには TABLE_SCHEMA = &#039;データベース名&#039; のようにフィルターします。&lt;br&gt;&lt;br&gt;ビューではなく、テーブルのみを取得するには TABLE_TYPE = &#039;BASE TABLE&#039; のレコードを取得します。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、INFORMATION_SCHEMA.TABLES から school_db データベースのテーブル一覧を取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	INFORMATION_SCHEMA.TABLES &lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;school_db&#039;&lt;br&gt;		AND TABLE_TYPE = &#039;BASE TABLE&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のテーブルの一覧を取得する 5&lt;br&gt;&lt;br&gt;TABLE_NAME カラムがテーブルの名前です。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でデータベース内のテーブルの一覧を取得する方法ご説明しました。</description><pubDate>Wed, 13 Jul 2022 06:26:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で数値をフォーマットされた通貨の文字列に変換する</title><link>https://mysql.sql55.com/query/mysql-format-number-as-currency.php</link><description>MySQL で数値をフォーマットされた通貨の文字列に変換する&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは、MySQL で数値をフォーマットされた通貨の文字列に変換する方法をご説明します。&lt;br&gt;&lt;br&gt;数値をフォーマットされた通貨の文字列に変換する&lt;br&gt;MySQL で数値をフォーマットされた通貨の文字列に変換するには CONCAT() と FORMAT() 関数を使うことで取得することができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;CONCAT() 関数は引数として渡した文字列をつなげた文字列を返す関数です。&lt;br&gt;&lt;br&gt;CONCAT(文字列1, 文字列2, ...)&lt;br&gt;&lt;br&gt;FORMAT() 関数は数値を指定した小数点で四捨五入して、3 桁ごとにカンマで区切った文字列を返す関数です。&lt;br&gt;&lt;br&gt;FORMAT(数値, 小数点以下桁数[, ロケール])&lt;br&gt;ロケールはオプショナルの引数で、ドイツやイタリアなどカンマやピリオドのフォーマットが日本円とは反対の通貨の時に、ロケールを指定することで正しいフォーマットで取得できます。&lt;br&gt;&lt;br&gt;ロケールに指定できる値は MySQL のお使いのバージョンのリファレンスマニュアルの「MySQL Server のロケールサポート」のページでご確認ください。&lt;br&gt;&lt;br&gt;ロケールが指定されていない場合のデフォルト値は en_US です。&lt;br&gt;&lt;br&gt;US ドルと日本円のカンマとピリオドの使い方は同じなので、日本円に変換する時はロケールを指定しなくても大丈夫です。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、CONCAT() と FORMAT() 関数を使って、数値を通貨表記の文字列に変換してみます。&lt;br&gt;&lt;br&gt;SET @value = 12345.6789;&lt;br&gt;&lt;br&gt;SELECT 	CONCAT(&#039;Y&#039;, FORMAT(@value, 0)) AS JPY,&lt;br&gt;		CONCAT(&#039;$&#039;, FORMAT(@value, 2)) AS USD,&lt;br&gt;        CONCAT(&#039;Euro&#039;, FORMAT(@value, 2, &#039;de_DE&#039;)) AS EUR;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で数値をフォーマットされた通貨の文字列に変換する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;3 行目では、CONCAT(&#039;Y&#039;, FORMAT(@value, 0)) で値を日本円に変換しています。&lt;br&gt;&lt;br&gt;4 行目では、CONCAT(&#039;$&#039;, FORMAT(@value, 2)) で値を US ドルに変換しています。&lt;br&gt;&lt;br&gt;5 行目では、ドイツのロケールの de_DE を第三引数に指定して、CONCAT(&#039;Euro&#039;, FORMAT(@value, 2, &#039;de_DE&#039;)) でユーロに変換しています。&lt;br&gt;&lt;br&gt;Euro12.345,68 とカンマとピリオドが日本円とは逆になっていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で数値をフォーマットされた通貨の文字列に変換する方法をご説明しました。</description><pubDate>Sat, 09 Jul 2022 08:20:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL はケース・センシティブ？</title><link>https://mysql.sql55.com/sql/mysql-case-sensitivity.php</link><description>ここでは MySQL がケース・センシティブなのかどうかについてご説明します。&lt;br&gt;&lt;br&gt;MySQL はケース・センシティブ？&lt;br&gt;MySQL のオブジェクトには、ケース・センシティブでないものと、OS によってケース・センシティブなものがあります。&lt;br&gt;&lt;br&gt;ケース・センシティブではないもの&lt;br&gt;カラム、インデックス、ストアドプロシージャやユーザー定義関数、イベント、パティションなどはケース・センシティブではありません。&lt;br&gt;&lt;br&gt;&lt;br&gt;OS によってケース・センシティブなもの&lt;br&gt;OS によってケース・センシティブなものには、データベース、テーブル、トリガー、テーブルエイリアス、ログファイルグループ名などがあります。&lt;br&gt;&lt;br&gt;どの OS だとケース・センシティブになるかは、ファイルシステムがケース・センシティブかどうかによります。&lt;br&gt;&lt;br&gt;Windows ではケース・センシティブではなく、macOS も、デフォルトのファイルシステムで使っている場合はケース・センシティブではありません。&lt;br&gt;&lt;br&gt;多くの Unix ではケース・センシティブになります。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、次のようなクエリーは Windows では大丈夫ですが、Unix ではエラーになる可能性が高いです。&lt;br&gt;&lt;br&gt;SELECT 	S.first_name&lt;br&gt;FROM 	students AS s&lt;br&gt;&lt;br&gt;MySQL には、lower_case_table_names というシステム変数があり、その値によってテーブル名やデータベース名が小文字に変換されるかどうかなどの設定ができ、OS によってデフォルト値がちがいます。&lt;br&gt;&lt;br&gt;OS による違いを避けるために、MySQL のオブジェクトを作ったり参照する時には、小文字で統一しておくのが推奨されています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL がケース・センシティブかどうかについてご説明しました。</description><pubDate>Fri, 08 Jul 2022 09:30:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の UPPER()・LOWER()</title><link>https://mysql.sql55.com/sql/mysql-upper-lower.php</link><description>MySQL の UPPER()・LOWER()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う文字列関数の UPPER() と LOWER() 関数についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の UPPER() 関数の使い方&lt;br&gt;MySQL の LOWER() 関数の使い方&lt;br&gt;MySQL で一文字目だけ大文字にして、残りの文字を小文字にする方法&lt;br&gt;MySQL の UPPER() 関数の使い方&lt;br&gt;MySQL の UPPER() 関数は、引数として渡した文字列を、大文字に変換した文字列を返す関数です。&lt;br&gt;&lt;br&gt;UPPER(文字列)&lt;br&gt;文字列が NULL の時は NULL が返ります。&lt;br&gt;&lt;br&gt;UCASE() は UPPER() のシノニムなので、UCASE() を使っても同じ結果になります。&lt;br&gt;&lt;br&gt; シノニム (synonym) とは、他のデータベースオブジェクトにつけた別名のことで、その別名を使って元のオブジェクトにアクセスすることができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、UPPER() 関数を使って、文字列を大文字に変換してみます。&lt;br&gt;&lt;br&gt;SELECT 	UPPER(&#039;abcde&#039;),&lt;br&gt;		UPPER(&#039;hello&#039;),&lt;br&gt;        UPPER(&#039;Apple&#039;),&lt;br&gt;        UPPER(&#039;TEST&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の UPPER()・LOWER() 1&lt;br&gt;&lt;br&gt;文字列が全て大文字に変換されています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の LOWER() 関数の使い方&lt;br&gt;MySQL の LOWER() 関数は、引数として渡した文字列を、小文字に変換した文字列を返す関数です。&lt;br&gt;&lt;br&gt;LOWER(文字列)&lt;br&gt;文字列が NULL の時は NULL が返ります。&lt;br&gt;&lt;br&gt;LCASE() は LOWER() のシノニムなので、LOWER() を使っても同じ結果になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどと同じクエリーを、LOWER() 関数に変えて、小文字に変換した文字列を取得してみます。&lt;br&gt;&lt;br&gt;SELECT 	LOWER(&#039;abcde&#039;),&lt;br&gt;		LOWER(&#039;hello&#039;),&lt;br&gt;        LOWER(&#039;Apple&#039;),&lt;br&gt;        LOWER(&#039;TEST&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の UPPER()・LOWER() 2&lt;br&gt;&lt;br&gt;文字列が全て小文字に変換されています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で一文字目だけ大文字にして、残りの文字を小文字にする方法&lt;br&gt;文字列の一文字目だけ大文字にして、残りの文字を小文字にしたいことがあるかもしれません。&lt;br&gt;&lt;br&gt;そんな時は UPPER() と LOWER()を使って変換することができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、japan と TOYOTA いう文字列の一文字目だけを大文字にして、残りを小文字にするクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SET @str1 = &#039;japan&#039;;&lt;br&gt;SET @str2 = &#039;TOYOTA&#039;;&lt;br&gt;&lt;br&gt;SELECT 	CONCAT(UPPER(LEFT(@str1, 1)), LOWER(SUBSTRING(@str1, 2))),&lt;br&gt;		CONCAT(UPPER(LEFT(@str2, 1)), LOWER(SUBSTRING(@str2, 2)));&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の UPPER()・LOWER() 3&lt;br&gt;&lt;br&gt;LEFT(@str1, 1) で一番左の一文字を取得し、UPPER() で大文字に変換しています。&lt;br&gt;&lt;br&gt;SUBSTRING(@str1, 2) で 2 文字目から最後までの文字列を取得し、LOWER() で小文字に変換しています。&lt;br&gt;&lt;br&gt;それらを CONCAT() でつなげることによって、一文字目が大文字で、残りの文字が小文字の文字列を取得しています。&lt;br&gt;&lt;br&gt;japan は Japan に、TOYOTA は Toyota になっていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の UPPER() と LOWER() 関数についてご説明しました。</description><pubDate>Tue, 05 Jul 2022 07:52:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の LEFT()・RIGHT()</title><link>https://mysql.sql55.com/sql/mysql-left-right.php</link><description>&lt;br&gt; ホーム&lt;br&gt;MySQL の基礎&lt;br&gt;MySQL の LEFT()・RIGHT()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う文字列関数の LEFT() と RIGHT() 関数についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の LEFT() 関数の使い方&lt;br&gt;MySQL の RIGHT() 関数の使い方&lt;br&gt;MySQL の LEFT() 関数の使い方&lt;br&gt;MySQL の LEFT() 関数は、文字列の左側から、指定した長さ分の文字列を返す関数です。&lt;br&gt;&lt;br&gt;LEFT(文字列, 長さ)&lt;br&gt;文字列の長さより長い「長さ」を指定すると、文字列がそのまま返ります。&lt;br&gt;&lt;br&gt;指定した長さが 0 以下の場合は、空文字列が返ります。&lt;br&gt;&lt;br&gt;文字列と長さのどちらかが NULL の時は NULL が返ります。&lt;br&gt;&lt;br&gt;LEFT() 関数はマルチバイトセーフなので、指定する文字列がマルチバイトでも問題ありません。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、LEFT() 関数を使って、実際に左側から指定した文字数分の文字列を取得してみます。&lt;br&gt;&lt;br&gt;SELECT  LEFT(&#039;ABCDEFG&#039;, 3),&lt;br&gt;		LEFT(&#039;ABCDEFG&#039;, 10),&lt;br&gt;        LEFT(&#039;ABCDEFG&#039;, -1),&lt;br&gt;        LEFT(NULL, 3),&lt;br&gt;        LEFT(&#039;日本総領事館&#039;, 3);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LEFT()・RIGHT() 1&lt;br&gt;&lt;br&gt;1 行目の LEFT(&#039;ABCDEFG&#039;, 3) は、左から 3 文字分の &#039;ABC&#039; を返しています。&lt;br&gt;&lt;br&gt;2 行目の LEFT(&#039;ABCDEFG&#039;, 10) では、10 は &#039;ABCDEFG&#039; の長さの 7 より長いので、&#039;ABCDEFG&#039; をそのまま返しています。&lt;br&gt;&lt;br&gt;3 行目の LEFT(&#039;ABCDEFG&#039;, -1) では、長さがマイナスなので、空文字列を返しています。&lt;br&gt;&lt;br&gt;4 行目の LEFT(NULL, 3) は、文字列が NULL なので NULL を返しています。&lt;br&gt;&lt;br&gt;5 行目の LEFT(&#039;日本総領事館&#039;, 3) も、左から 3 文字分の &#039;日本総&#039; を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の RIGHT() 関数の使い方&lt;br&gt;MySQL の RIGHT() 関数は、文字列の右側から、指定した長さ分の文字列を返す関数です。&lt;br&gt;&lt;br&gt;右から指定した長さの文字列を取得するか、左から指定した長さの文字列を取得するかが違うだけで、使い方は LEFT() 関数と同じです。&lt;br&gt;&lt;br&gt;RIGHT(文字列, 長さ)&lt;br&gt;LEFT() 関数と同様に、文字列の長さより長い「長さ」を指定すると、文字列がそのまま返ります。&lt;br&gt;&lt;br&gt;指定した長さが 0 以下の場合は、空文字列が返ります。&lt;br&gt;&lt;br&gt;文字列と長さのどちらかが NULL の時は NULL が返ります。&lt;br&gt;&lt;br&gt;RIGHT() 関数もマルチバイトセーフなので、指定する文字列がマルチバイトでも問題ありません。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどと同じクエリーを、RIGHT() 関数に変えて、右側から指定した文字数分の文字列を取得してみます。&lt;br&gt;&lt;br&gt;SELECT  RIGHT(&#039;ABCDEFG&#039;, 3),&lt;br&gt;		RIGHT(&#039;ABCDEFG&#039;, 10),&lt;br&gt;        RIGHT(&#039;ABCDEFG&#039;, -1),&lt;br&gt;        RIGHT(NULL, 3),&lt;br&gt;        RIGHT(&#039;日本総領事館&#039;, 3);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LEFT()・RIGHT() 2&lt;br&gt;&lt;br&gt;1 行目の RIGHT(&#039;ABCDEFG&#039;, 3) は、右から 3 文字分の &#039;EFG&#039; を返しています。&lt;br&gt;&lt;br&gt;2 行目の RIGHT(&#039;ABCDEFG&#039;, 10) では、10 は &#039;ABCDEFG&#039; の長さの 7 より長いので、&#039;ABCDEFG&#039; をそのまま返しています。&lt;br&gt;&lt;br&gt;3 行目の RIGHT(&#039;ABCDEFG&#039;, -1) では、長さがマイナスなので、空文字列を返しています。&lt;br&gt;&lt;br&gt;4 行目の RIGHT(NULL, 3) は、文字列が NULL なので NULL を返しています。&lt;br&gt;&lt;br&gt;5 行目の RIGHT(&#039;日本総領事館&#039;, 3) も、右から 3 文字分の &#039;領事館&#039; を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の LEFT() と RIGHT() 関数についてご説明しました。</description><pubDate>Fri, 17 Jun 2022 09:09:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で指定したカラム名を持つテーブルを取得する方法</title><link>https://mysql.sql55.com/query/mysql-how-to-find-tables-by-column-name.php</link><description>MySQL で指定したカラム名を持つテーブルを取得する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは、MySQL で指定したカラム名を持つテーブルを取得する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;指定したカラム名を持つテーブルを取得する&lt;br&gt;MySQL で指定したカラム名を持つテーブルを取得するには、INFORMATION_SCHEMA テーブルのひとつの INFORMATION_SCHEMA.COLUMNS テーブルを使って取得することができます。&lt;br&gt;&lt;br&gt; INFORMATION_SCHEMA テーブルは、データベース、テーブル、カラム、権限などのデータベースの情報にアクセスできる、システムのテーブル達です。&lt;br&gt;&lt;br&gt;&lt;br&gt;指定したカラム名を持つテーブルを取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	TABLE_SCHEMA,&lt;br&gt;		TABLE_NAME,&lt;br&gt;		COLUMN_NAME,&lt;br&gt;        DATA_TYPE,&lt;br&gt;        CHARACTER_MAXIMUM_LENGTH&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS&lt;br&gt;WHERE 	COLUMN_NAME LIKE &#039;%カラム名の一部%&#039;&lt;br&gt;        AND TABLE_SCHEMA=&#039;データベース名&#039;&lt;br&gt;ORDER BY TABLE_SCHEMA,&lt;br&gt;		 TABLE_NAME,&lt;br&gt;		 COLUMN_NAME;&lt;br&gt;カラム名を完全一致で指定したい時は COLUMN_NAME LIKE &#039;%カラム名の一部%&#039; を COLUMN_NAME = &#039;カラム名&#039; にしてください。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、school_db データベース内で、カラム名の一部に name が入ってるテーブルを取得するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SELECT 	TABLE_SCHEMA,&lt;br&gt;		TABLE_NAME,&lt;br&gt;		COLUMN_NAME,&lt;br&gt;        DATA_TYPE,&lt;br&gt;        CHARACTER_MAXIMUM_LENGTH&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS&lt;br&gt;WHERE 	COLUMN_NAME LIKE &#039;%name%&#039;&lt;br&gt;        AND TABLE_SCHEMA=&#039;school_db&#039;&lt;br&gt;ORDER BY TABLE_SCHEMA,&lt;br&gt;		 TABLE_NAME,&lt;br&gt;		 COLUMN_NAME;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL 指定したカラム名を持つテーブルを取得する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;テーブルの情報のみ取得したい時は、DISTINCT を使って次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	DISTINCT &lt;br&gt;		TABLE_SCHEMA,&lt;br&gt;		TABLE_NAME&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS&lt;br&gt;WHERE 	COLUMN_NAME LIKE &#039;%name%&#039;&lt;br&gt;        AND TABLE_SCHEMA=&#039;school_db&#039;&lt;br&gt;ORDER BY TABLE_SCHEMA,&lt;br&gt;		 TABLE_NAME;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL 指定したカラム名を持つテーブルを取得する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で指定したカラム名を持つテーブルを取得する方法をご説明しました。</description><pubDate>Tue, 05 Apr 2022 07:18:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL のよく使う日付関数 3 - DATEDIFF()・TIMEDIFF()</title><link>https://mysql.sql55.com/sql/mysql-date-functions-3.php</link><description>MySQL のよく使う日付関数 3 - DATEDIFF()・TIMEDIFF()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う集計関数の DATEDIFF()、TIMEDIFF() についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の 日付関数 DATEDIFF() の使い方&lt;br&gt;MySQL の 日付関数 TIMEDIFF() の使い方&lt;br&gt;MySQL の 日付関数 DATEDIFF() の使い方&lt;br&gt;MySQL の DATEDIFF() は日付や日時型の値を二つ、入力引数として受け取り、その差分の日数で返す日付関数です。&lt;br&gt;&lt;br&gt;DATEDIFF(date1, date2)&lt;br&gt;差分の日数は date1 - date2 で計算されます。&lt;br&gt;&lt;br&gt;入力引数を datetime で指定しても、時間の部分は無視されて、日付の部分だけを使って計算されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、DATEDIFF() を使って、差分の日数を取得してみましょう。&lt;br&gt;&lt;br&gt;SELECT 	DATEDIFF(&#039;2023-01-01 00:00:00&#039;, &#039;2022-12-31 23:59:59&#039;) AS Case1,&lt;br&gt;		DATEDIFF(&#039;2023-01-01 12:30:00&#039;, &#039;2023-01-05&#039;) AS Case2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 3 - DATEDIFF()・TIMEDIFF() 1&lt;br&gt;&lt;br&gt;Case1 では 2023-01-01 00:00:00 と 2022-12-31 23:59:59 の差分の日数を取得していて、1 を返しています。&lt;br&gt;&lt;br&gt;実際には 1 分差しかありませんが、時間の部分は無視されて、日付のみが比較されるので 1 日差ということになります。&lt;br&gt;&lt;br&gt;Case2 では、2023-01-01 12:30:00 と 2023-01-05 の差分の日数を取得していて、第一引数マイナス第二引数になるので -4 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の 日付関数 TIMEDIFF() の使い方&lt;br&gt;MySQL の TIMEDIFF() は日時や時間型の値を二つ、入力引数として受け取り、その差分の時間を返す日付関数です。&lt;br&gt;&lt;br&gt;TIMEDIFF(time1, time2)&lt;br&gt;差分の時間は time1 - time2 で計算されます。&lt;br&gt;&lt;br&gt;入力引数を datetime で指定すると、日付の部分も考慮して時間の差分が計算されます。&lt;br&gt;&lt;br&gt;第一引数と第二引数のデータ型は同じでなければならず、データ型が違うと NULL を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、TIMEDIFF() を使って、差分の時間を取得してみましょう。&lt;br&gt;&lt;br&gt;SELECT 	TIMEDIFF(&#039;2023-02-01 00:00:00&#039;, &#039;2022-12-31 23:59:59&#039;) AS Case1,&lt;br&gt;		TIMEDIFF(&#039;2023-01-01 12:30:00&#039;, &#039;13:30:00&#039;) AS Case2,&lt;br&gt;        TIMEDIFF(&#039;2023-01-01&#039;, &#039;2023-01-05&#039;) AS Case3,&lt;br&gt;		TIMEDIFF(&#039;10:00:00&#039;, &#039;12:30:05&#039;) AS Case4;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 3 - DATEDIFF()・TIMEDIFF() 2&lt;br&gt;&lt;br&gt;Case1 では 2023-02-01 00:00:00 と 2022-12-31 23:59:59 の差分の時間を取得していて、744:00:01 を返しています。&lt;br&gt;&lt;br&gt;Case2 では、2023-01-01 12:30:00 と 13:30:00 を引数に指定していて、datetime と time 型 とデータ型が違うので NULL を返しています。&lt;br&gt;&lt;br&gt;Case3 では、2023-01-01 と 2023-01-05 を引数に指定すると、NULL にはならず、日付の違いはありますが、差分は 00:00:00 になっています。&lt;br&gt;&lt;br&gt;Case4 では、10:00:00 と 12:30:05 の差分の時間を取得していて、-02:30:05 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のよく使う日付関数の DATEDIFF()、TIMEDIFF() についてご説明しました。</description><pubDate>Wed, 16 Mar 2022 05:03:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB()</title><link>https://mysql.sql55.com/sql/mysql-date-functions-2.php</link><description>MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う集計関数の DATE_ADD()、DATE_SUB() についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の 日付関数 DATE_ADD() の使い方&lt;br&gt;MySQL の 日付関数 DATE_SUB() の使い方&lt;br&gt;MySQL の 日付関数 DATE_ADD() の使い方&lt;br&gt;MySQL の DATE_ADD() は日時の値と、追加するインターバルの数値と単位を受け取り、日時の値に、数値を指定された単位で足した日時を返す日付関数です。&lt;br&gt;&lt;br&gt;DATE_ADD(日時の値, INTERVAL 数値 単位)&lt;br&gt;&lt;br&gt;単位に指定できる値と、その時に期待される数値のフォーマットは以下の通りです。&lt;br&gt;&lt;br&gt;単位	数値のフォーマット&lt;br&gt;MICROSECOND	MICROSECONDS&lt;br&gt;SECOND	SECONDS&lt;br&gt;MINUTE	MINUTES&lt;br&gt;HOUR	HOURS&lt;br&gt;DAY	DAYS&lt;br&gt;WEEK	WEEKS&lt;br&gt;MONTH	MONTHS&lt;br&gt;QUARTER	QUARTERS&lt;br&gt;YEAR	YEARS&lt;br&gt;SECOND_MICROSECOND	&#039;SECONDS.MICROSECONDS&#039;&lt;br&gt;MINUTE_MICROSECOND	&#039;MINUTES:SECONDS.MICROSECONDS&#039;&lt;br&gt;MINUTE_SECOND	&#039;MINUTES:SECONDS&#039;&lt;br&gt;HOUR_MICROSECOND	&#039;HOURS:MINUTES:SECONDS.MICROSECONDS&#039;&lt;br&gt;HOUR_SECOND	&#039;HOURS:MINUTES:SECONDS&#039;&lt;br&gt;HOUR_MINUTE	&#039;HOURS:MINUTES&#039;&lt;br&gt;DAY_MICROSECOND	&#039;DAYS HOURS:MINUTES:SECONDS.MICROSECONDS&#039;&lt;br&gt;DAY_SECOND	&#039;DAYS HOURS:MINUTES:SECONDS&#039;&lt;br&gt;DAY_MINUTE	&#039;DAYS HOURS:MINUTES&#039;&lt;br&gt;DAY_HOUR	&#039;DAYS HOURS&#039;&lt;br&gt;YEAR_MONTH	&#039;YEARS-MONTHS&#039;&lt;br&gt;単位が間違っていたり、数値が期待されたフォーマットに合っておらず、変換できない時はエラーになります。&lt;br&gt;&lt;br&gt;マイナスの数値を指定することで、DATE_ADD() で数値を引くようにすることも可能です。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、DATE_ADD() を使って、日時に数値を足してみましょう。&lt;br&gt;&lt;br&gt;SET @date = &#039;2022-12-31 23:59:59&#039;;&lt;br&gt;&lt;br&gt;SELECT 	@date,&lt;br&gt;		DATE_ADD(@date, INTERVAL 1 SECOND) AS Case1,&lt;br&gt;		DATE_ADD(@date, INTERVAL 2 HOUR) AS Case2,&lt;br&gt;        DATE_ADD(@date, INTERVAL 3 DAY) AS Case3,&lt;br&gt;		DATE_ADD(@date, INTERVAL 4 YEAR) AS Case4,&lt;br&gt;		DATE_ADD(@date, INTERVAL &#039;1 0:0:1&#039; DAY_SECOND) AS Case5,&lt;br&gt;		DATE_ADD(@date, INTERVAL &#039;1-2&#039; YEAR_MONTH) AS Case6,&lt;br&gt;		DATE_ADD(@date, INTERVAL -1 DAY) AS Case7;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB() 1&lt;br&gt;&lt;br&gt;2022-12-31 23:59:59 に DATE_ADD() でいろんな単位を指定して数値を追加しています。&lt;br&gt;&lt;br&gt;Caes 1 では INTERVAL 1 SECOND で 1 秒足していて、2023-01-01 00:00:00 を返しています。&lt;br&gt;&lt;br&gt;Caes 2 では INTERVAL 2 HOUR で 2 時間足していて、2023-01-01 01:59:59 を返しています。&lt;br&gt;&lt;br&gt;Caes 3 では INTERVAL 3 DAY で 三日足していて、2023-01-03 23:59:59 を返しています。&lt;br&gt;&lt;br&gt;Caes 4 では INTERVAL 4 YEAR で 四年足していて、2026-12-31 23:59:59 を返しています。&lt;br&gt;&lt;br&gt;Caes 5 では INTERVAL &#039;1 0:0:1&#039; DAY_SECOND で 1 日と 1 秒足していて、2023-01-02 00:00:00 を返しています。&lt;br&gt;&lt;br&gt;Caes 6 では INTERVAL &#039;1-2&#039; YEAR_MONTH で 1 年と 2 ヶ月足していて、2024-02-29 23:59:59 を返しています。&lt;br&gt;&lt;br&gt;Caes 7 では INTERVAL -1 DAY で 1 日を引いていて、2022-12-30 23:59:59 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の 日付関数 DATE_SUB() の使い方&lt;br&gt;MySQL の DATE_SUB() は日時の値と、追加するインターバルの数値と単位を受け取り、日時の値に、数値を指定された単位で引いた日時を返す日付関数です。&lt;br&gt;&lt;br&gt;構文や、指定できる単位と数値のフォーマットは DATE_ADD() と同じです。&lt;br&gt;&lt;br&gt;DATE_SUB(日時の値, INTERVAL 数値 単位)&lt;br&gt;&lt;br&gt;単位が間違っていたり、数値が期待されたフォーマットに合っておらず、変換できない時はエラーになります。&lt;br&gt;&lt;br&gt;マイナスの数値を指定することで、DATE_SUB() で数値を足すようにすることも可能です。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、DATE_SUB() を使って、日時から数値を引いてみましょう。&lt;br&gt;&lt;br&gt;SET @date = &#039;2023-01-01 00:00:00&#039;;&lt;br&gt;&lt;br&gt;SELECT 	@date,&lt;br&gt;		DATE_SUB(@date, INTERVAL 1 SECOND) AS Case1,&lt;br&gt;		DATE_SUB(@date, INTERVAL 2 HOUR) AS Case2,&lt;br&gt;        DATE_SUB(@date, INTERVAL 3 DAY) AS Case3,&lt;br&gt;		DATE_SUB(@date, INTERVAL 4 YEAR) AS Case4,&lt;br&gt;		DATE_SUB(@date, INTERVAL &#039;1 0:0:1&#039; DAY_SECOND) AS Case5,&lt;br&gt;		DATE_SUB(@date, INTERVAL &#039;1-2&#039; YEAR_MONTH) AS Case6,&lt;br&gt;		DATE_SUB(@date, INTERVAL -1 DAY) AS Case7;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB() 2&lt;br&gt;&lt;br&gt;2023-01-01 00:00:00 に DATE_SUB() でいろんな単位を指定して数値を引いています。&lt;br&gt;&lt;br&gt;Caes 1 では INTERVAL 1 SECOND で 1 秒引いていて、2022-12-31 23:59:59 を返しています。&lt;br&gt;&lt;br&gt;Caes 2 では INTERVAL 2 HOUR で 2 時間引いていて、2022-12-31 22:00:00 を返しています。&lt;br&gt;&lt;br&gt;Caes 3 では INTERVAL 3 DAY で 三日引いていて、2022-12-29 00:00:00 を返しています。&lt;br&gt;&lt;br&gt;Caes 4 では INTERVAL 4 YEAR で 四年引いていて、2019-01-01 00:00:00 を返しています。&lt;br&gt;&lt;br&gt;Caes 5 では INTERVAL &#039;1 0:0:1&#039; DAY_SECOND で 1 日と 1 秒引いていて、2022-12-30 23:59:59 を返しています。&lt;br&gt;&lt;br&gt;Caes 6 では INTERVAL &#039;1-2&#039; YEAR_MONTH で 1 年と 2 ヶ月引いていて、2021-11-01 00:00:00 を返しています。&lt;br&gt;&lt;br&gt;Caes 7 では INTERVAL -1 DAY で 1 日を足していて、2023-01-02 00:00:00 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のよく使う日付関数の DATE_ADD()・DATE_SUB() についてご説明しました。</description><pubDate>Tue, 15 Mar 2022 06:59:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のよく使う日付関数 1 - YEAR()・MONTH()・DAY()・WEEKDAY()</title><link>https://mysql.sql55.com/sql/mysql-date-functions-1.php</link><description>MySQL のよく使う日付関数 1 - YEAR()・MONTH()・DAY()・WEEKDAY()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う日付関数の YEAR()・MONTH()・DAY()・WEEKDAY() などについてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の 日付関数 YEAR()・MONTH()・DAY() の使い方&lt;br&gt;MySQL の 日付関数 HOUR()・MINUTE()・SECOND() の使い方&lt;br&gt;MySQL の 日付関数 WEEKDAY() の使い方&lt;br&gt;MySQL の 日付関数 YEAR()・MONTH()・DAY() の使い方&lt;br&gt;MySQL の YEAR()・MONTH()・DAY() は日付型の値を入力引数として受け取り、それぞれ年・月・日を返す日付関数です。&lt;br&gt;&lt;br&gt;YEAR(date)&lt;br&gt;MONTH(date)&lt;br&gt;DAY(date)&lt;br&gt;有効な日付を渡した場合、YEAR() は 1000 ~ 9999 の 4 桁の年を返し、MONTH() は 1 ~ 12、DAY() は 1 ~ 31 の数字を返します。&lt;br&gt;&lt;br&gt;日付でない値を渡した場合、エラーにはならず NULL を返します。&lt;br&gt;&lt;br&gt; DAY() は DAYOFMONTH() のシノニム(synonym) で、どちらを使っても同じですが、DAYOFMONTH() よりも DAY() のほうがシンプルでいいなと個人的には思っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、YEAR()・MONTH()・DAY() を使って、年・月・日を取得してみましょう。&lt;br&gt;&lt;br&gt;今日の年・月・日を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SET @date = NOW();&lt;br&gt;&lt;br&gt;SELECT 	@date,&lt;br&gt;		YEAR(@date),&lt;br&gt;		MONTH(@date),&lt;br&gt;        DAY(@date);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 1 - YEAR()・MONTH()・DAY()・WEEKDAY() 1&lt;br&gt;&lt;br&gt;この例では、現在の日時が 2022-03-08 22:05:47 で、YEAR() は 2022、MONTH() は 3、DAY() は 8 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の 日付関数 HOUR()・MINUTE()・SECOND() の使い方&lt;br&gt;MySQL の HOUR()・MINUTE()・SECOND() は日時や時間型の値を入力引数として受け取り、それぞれ時・分・秒を返す日付関数です。&lt;br&gt;&lt;br&gt;HOUR(datetime)&lt;br&gt;MINUTE(datetime)&lt;br&gt;SECOND(datetime)&lt;br&gt;有効な時間の値を渡した場合、HOUR() は 0 以上の整数を返し、MONTH() と SECOND() は 0 ~ 59 の数字を返します。&lt;br&gt;&lt;br&gt;有効でない時間の値を渡した場合、エラーにはならず NULL を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、HOUR()・MINUTE()・SECOND() を使って、時・分・秒を取得してみましょう。&lt;br&gt;&lt;br&gt;現在の時間の時・分・秒を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SET @datetime = NOW();&lt;br&gt;&lt;br&gt;SELECT 	@datetime,&lt;br&gt;		HOUR(@datetime),&lt;br&gt;        MINUTE(@datetime),&lt;br&gt;        SECOND(@datetime);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 1 - YEAR()・MONTH()・DAY()・WEEKDAY() 2&lt;br&gt;&lt;br&gt;この例では、現在時刻が 2022-03-08 22:24:29 で、HOUR() は 22、MINUTE() は 24、SECOND() は 29 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の 日付関数 WEEKDAY() の使い方&lt;br&gt;MySQL の WEEKDAY() は日付型の値を入力引数として受け取り、その曜日を返す日付関数です。&lt;br&gt;&lt;br&gt;WEEKDAY(date)&lt;br&gt;有効な日付を渡した場合、WEEKDAY() は 0 ~ 6 の値を返します。 0 が月曜日、1 が火曜日と続き、、6 が日曜日です。&lt;br&gt;&lt;br&gt;有効でない日付を渡した場合、エラーにはならず NULL を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、WEEKDAY() を使って、曜日を取得してみましょう。&lt;br&gt;&lt;br&gt;今日の曜日を取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SET @date = NOW();&lt;br&gt;&lt;br&gt;SELECT 	@date,&lt;br&gt;		 CASE WEEKDAY(@date)&lt;br&gt;            WHEN 0 THEN &#039;月曜日&#039;&lt;br&gt;			WHEN 1 THEN &#039;火曜日&#039;&lt;br&gt;			WHEN 2 THEN &#039;水曜日&#039;&lt;br&gt;            WHEN 3 THEN &#039;木曜日&#039;&lt;br&gt;			WHEN 4 THEN &#039;金曜日&#039;&lt;br&gt;			WHEN 5 THEN &#039;土曜日&#039;&lt;br&gt;			WHEN 6 THEN &#039;日曜日&#039;&lt;br&gt;		END AS 曜日;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のよく使う日付関数 1 - YEAR()・MONTH()・DAY()・WEEKDAY() 3&lt;br&gt;&lt;br&gt;この例では、実行時の日付が 2022-03-08 で、火曜日です。 WEEKDAY(@date) は 1 を返すので「火曜日」が取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のよく使う日付関数の YEAR()・MONTH()・DAY()・WEEKDAY() などについてご説明しました。</description><pubDate>Wed, 09 Mar 2022 06:47:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で当月・前月・翌月の月初・月末の日付を取得する方法</title><link>https://mysql.sql55.com/query/mysql-how-to-get-first-last-day-of-month.php</link><description>MySQL で当月・前月・翌月の月初・月末の日付を取得する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは、MySQL で指定した日の、その月・その前の月・その次の月の、月初・月末の日付を取得する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL で指定した日の当月の月初・月末を取得する&lt;br&gt;MySQL で指定した日の前月の月初・月末を取得する&lt;br&gt;MySQL で指定した日の翌月の月初・月末を取得する&lt;br&gt;MySQL で指定した日の当月の月初・月末を取得する&lt;br&gt;MySQL で月初・月末を取得する変換するには LAST_DAY 関数が使えます。&lt;br&gt;&lt;br&gt;LAST_DAY 関数は日付型の引数を受け取って、その日付の月の月末の日付を返す関数です。&lt;br&gt;&lt;br&gt;LAST_DAY(date)&lt;br&gt;引数が日付ではない値の時はエラーではなく、null を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;LAST_DAY 関数を使って、指定した日の月の月初・月末を取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SET @date = &#039;2024-03-16&#039;;&lt;br&gt;&lt;br&gt;SELECT 	LAST_DAY(@date - INTERVAL 1 MONTH) + INTERVAL 1 DAY AS first_day,&lt;br&gt;		LAST_DAY(@date) AS last_day;&lt;br&gt;その月の月末は、単純に LAST_DAY 関数に日付を渡すことで取得できます。&lt;br&gt;&lt;br&gt;その月の月初は、指定した日付を - INTERVAL 1 MONTH で一ヶ月減らしてから、LAST_DAY 関数を使って前月の月末の日を取得した後に、+ INTERVAL 1 DAY で 1 日足すことによって取得しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で当月・前月・翌月の月初・月末の日付を取得する方法 1&lt;br&gt;&lt;br&gt;日付に 2024-03-16 を指定していて、その月の月初の 2024-03-01 と月末の 2024-03-31 が取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で指定した日の前月の月初・月末を取得する&lt;br&gt;MySQL で指定した日の前月の月初・月末を取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SET @date = &#039;2024-03-16&#039;;&lt;br&gt;&lt;br&gt;SELECT 	LAST_DAY(@date - INTERVAL 2 MONTH) + INTERVAL 1 DAY AS first_day_of_last_month,&lt;br&gt;        LAST_DAY(@date - INTERVAL 1 MONTH) AS last_day_of_last_month;&lt;br&gt;前月の月初は、指定した日付を - INTERVAL 2 MONTH で二ヶ月減らしてから、LAST_DAY 関数を使って前々月の月末の日を取得した後に、+ INTERVAL 1 DAY で 1 日足すことによって取得しています。&lt;br&gt;&lt;br&gt;その月の月末は、指定した日付を - INTERVAL 1 MONTH で一ヶ月減らしてから、LAST_DAY 関数を使って取得しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で当月・前月・翌月の月初・月末の日付を取得する方法 2&lt;br&gt;&lt;br&gt;日付に 2024-03-16 を指定していて、前月の月初の 2024-02-01 と月末の 2024-02-29 が取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で指定した日の翌月の月初・月末を取得する&lt;br&gt;MySQL で指定した日の翌月の月初・月末を取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SET @date = &#039;2024-03-16&#039;;&lt;br&gt;&lt;br&gt;SELECT 	LAST_DAY(@date) + INTERVAL 1 DAY AS first_day_of_next_month,&lt;br&gt;        LAST_DAY(@date + INTERVAL 1 MONTH) AS last_day_of_next_month;&lt;br&gt;翌月の月初は、LAST_DAY 関数を使ってその月の月末の日を取得した後に、+ INTERVAL 1 DAY で 1 日足すことによって取得しています。&lt;br&gt;&lt;br&gt;翌月の月末は、指定した日付に + INTERVAL 1 MONTH で一ヶ月増やしてから、LAST_DAY 関数を使うことによって取得しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で当月・前月・翌月の月初・月末の日付を取得する方法 3&lt;br&gt;&lt;br&gt;日付に 2024-03-16 を指定していて、翌月の月初の 2024-04-01 と月末の 2024-04-30 が取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で当月・前月・翌月の月初・月末の日付を取得する方法をご説明しました。</description><pubDate>Mon, 21 Feb 2022 00:53:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL の REPLACE()</title><link>https://mysql.sql55.com/sql/mysql-replace.php</link><description>MySQL の REPLACE()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の REPLACE() 関数についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;MySQL の REPLACE() 関数の使い方&lt;br&gt;MySQL の REPLACE() 関数は、文字列を三つ引数として受け取り、一つ目の引数の文字列の中の、二つ目の引数の文字列を、三つ目の引数の文字列に置換する関数です。&lt;br&gt;&lt;br&gt;REPLACE(str,from_str,to_str)&lt;br&gt;少し注意しないといけないのは、この REPLACE() 関数はケースセンシティブで大文字小文字を区別して文字列を検索して置換する点です。&lt;br&gt;&lt;br&gt;MySQL のデフォルトの照合順序 (collation) はケースセンシティブではないので、たとえば LIKE &#039;a%&#039; のように指定すると大文字 A か小文字の a で始まる文字列がマッチします。&lt;br&gt;&lt;br&gt;ですが、REPLACE の場合は第二引数に &#039;a&#039; と指定すると小文字の a しか置き換えられません。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、REPLACE() 関数を使ってみます。&lt;br&gt;&lt;br&gt;students テーブルの first_name の &#039;a&#039; という文字列を &#039;XXX&#039; に置換するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	first_name,&lt;br&gt;        REPLACE(first_name, &#039;a&#039;, &#039;XXX&#039;)&lt;br&gt;FROM 	students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の REPLACE() 1&lt;br&gt;&lt;br&gt;REPLACE(first_name, &#039;a&#039;, &#039;XXX&#039;) は first_name の小文字の &#039;a&#039; を &#039;XXX&#039; に置換した文字列を返しています。&lt;br&gt;&lt;br&gt;&#039;Aya&#039; は &#039;AyXXX&#039; のようになり、大文字の &#039;A&#039; は置換されていません。&lt;br&gt;&lt;br&gt;&lt;br&gt;REPLACE() 関数は文字列に入っている、タブや改行を削除したり時にも便利です。&lt;br&gt;&lt;br&gt;たとえば、students テーブルの first_name の中に改行が入っている可能性があって、それを削除したい時には次のように削除できます。&lt;br&gt;&lt;br&gt;UPDATE 	students&lt;br&gt;SET 	first_name = REPLACE(REPLACE(first_name, &#039;\r&#039;, &#039;&#039;), &#039;\n&#039;, &#039;&#039;);&lt;br&gt;&lt;br&gt;以上、MySQL の REPLACE() 関数についてご説明しました。</description><pubDate>Fri, 28 Jan 2022 09:52:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の LPAD()・RPAD()</title><link>https://mysql.sql55.com/sql/mysql-lpad-rpad.php</link><description>MySQL の LPAD()・RPAD()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の LPAD() と RPAD() 関数についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の LPAD() 関数の使い方&lt;br&gt;MySQL の RPAD() 関数の使い方&lt;br&gt;LPAD() と ROW_NUMBER() を使って学籍番号を生成する&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;MySQL の LPAD() 関数の使い方&lt;br&gt;MySQL の LPAD() 関数は、文字列が指定した長さに満たない場合に、その桁数まで文字列の左側に指定した文字を埋めてくれる関数です。&lt;br&gt;&lt;br&gt;LPAD(文字列, 長さ, 埋める文字)&lt;br&gt;桁数を合わせるために、ゼロ埋めをしたい時などに便利です。&lt;br&gt;&lt;br&gt;指定した長さが文字列の長さより短い場合は、文字列の前からその長さまでの文字が返ります。&lt;br&gt;&lt;br&gt;埋める文字が 2 文字以上の場合は、埋める必要の文字数になるまで、埋める文字が繰り返されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、LPAD() 関数を使って、右寄せでゼロ埋めしてみます。&lt;br&gt;&lt;br&gt;SET @str = &#039;ABCDE&#039;;&lt;br&gt;&lt;br&gt;SELECT 	LPAD(@str, 10, &#039;0&#039;),&lt;br&gt;		LPAD(@str, 4, &#039;0&#039;),&lt;br&gt;		LPAD(@str, 18, &#039;123&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LPAD()・RPAD() 1&lt;br&gt;&lt;br&gt;3 行目の LPAD(@str, 10, &#039;0&#039;) は、10 桁になるまで右寄せでゼロ埋めされて、00000ABCDE を返しています。&lt;br&gt;&lt;br&gt;4 行目の LPAD(@str, 4, &#039;0&#039;) は、4 桁は元の文字列の長さより短いので、&#039;ABCDE&#039; の左から 4 桁の&#039;ABCD&#039;を返しています。&lt;br&gt;&lt;br&gt;5 行目の LPAD(@str, 18, &#039;123&#039;) は、ABCDE が右寄せされて、18 桁 になるまで、左から &#039;123&#039; が繰り返されています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の RPAD() 関数の使い方&lt;br&gt;MySQL の RPAD() 関数は、文字列が指定した長さに満たない場合に、その桁数まで文字列の右側に指定した文字を埋めてくれる関数です。&lt;br&gt;&lt;br&gt;右に寄せるか左に寄せるかが違うだけで、使い方は LPAD() 関数と同じです。&lt;br&gt;&lt;br&gt;RPAD(文字列, 長さ, 埋める文字)&lt;br&gt;&lt;br&gt;先ほどと同じクエリーを、RPAD() 関数に変えて、左寄せでゼロ埋めしてみます。&lt;br&gt;&lt;br&gt;SET @str = &#039;ABCDE&#039;;&lt;br&gt;&lt;br&gt;SELECT 	RPAD(@str, 10, &#039;0&#039;),&lt;br&gt;		RPAD(@str, 4, &#039;0&#039;),&lt;br&gt;		RPAD(@str, 18, &#039;123&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LPAD()・RPAD() 2&lt;br&gt;&lt;br&gt;3 行目の RPAD(@str, 10, &#039;0&#039;) は、10 桁になるまで左寄せでゼロ埋めされて、ABCDE00000を返しています。&lt;br&gt;&lt;br&gt;4 行目の RPAD(@str, 4, &#039;0&#039;) は、4 桁は元の文字列の長さより短いので、&#039;ABCDE&#039; の左から 4 桁の&#039;ABCD&#039;を返しています。&lt;br&gt;&lt;br&gt;5 行目の RPAD(@str, 18, &#039;123&#039;) は、ABCDEが左寄せされて、18 桁 になるまで、左から &#039;123&#039; が繰り返されて ABCDE1231231231231 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;LPAD() と ROW_NUMBER() を使って学籍番号を生成する&lt;br&gt;LPAD() 関数と ROW_NUMBER() 関数を使って、テーブルのレコードをソートして、一意となる番号を生成することもできます。&lt;br&gt;&lt;br&gt;今回は以下のような students テーブルのレコードに対して、学籍番号を生成してみます。&lt;br&gt;&lt;br&gt;MySQL の LPAD()・RPAD() 3&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルのレコードを、last_name, first_name の順番でソートして、ST000000001 のような 10 桁の学籍番号を生成するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	CONCAT(&#039;ST&#039;, LPAD(ROW_NUMBER() OVER (ORDER BY last_name, first_name), 8, &#039;0&#039;)) AS student_no,&lt;br&gt;		student_id, &lt;br&gt;		first_name,&lt;br&gt;        last_name &lt;br&gt;FROM 	students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LPAD()・RPAD() 4&lt;br&gt;&lt;br&gt;まず、ROW_NUMBER() OVER (ORDER BY last_name, first_name) で last_name, first_name の順番でソートした連番を取得しています。&lt;br&gt;&lt;br&gt;その連番の左側に LPAD() 関数を使って 8 桁になるまでゼロ埋めしています。&lt;br&gt;&lt;br&gt;最後に CONCAT() 関数で先頭に &#039;ST&#039; をつけて、学籍番号を生成しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の LPAD() と RPAD() 関数についてご説明しました。&lt;br&gt;</description><pubDate>Thu, 13 Jan 2022 11:12:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で文字列の長さを取得する</title><link>https://mysql.sql55.com/sql/mysql-length.php</link><description>MySQL で文字列の長さを取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL で文字列の長さを取得する方法についてご説明します。&lt;br&gt;&lt;br&gt;MySQL の文字列の長さを取得する関数&lt;br&gt;MySQL で文字列の長さを取得するには CHAR_LENGTH()、LENGTH()、BIT_LENGTH() という組み込み関数を使って取得することができます。&lt;br&gt;&lt;br&gt;どれも引数として文字列を受け取ります。&lt;br&gt;&lt;br&gt;CHAR_LENGTH() は文字列の文字数を返し、LENGTH() は文字のバイト数を返し、BIT_LENGTH() は文字のビット数を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、&#039;MySQL&#039; という文字列の長さを取得すると次のようになります。&lt;br&gt;&lt;br&gt;SET @str = &#039;MySQL&#039;;&lt;br&gt;&lt;br&gt;SELECT 	CHAR_LENGTH(@str),&lt;br&gt;		LENGTH(@str),&lt;br&gt;        BIT_LENGTH(@str);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で文字列の長さを取得する 1&lt;br&gt;&lt;br&gt;&#039;MySQL&#039; に含まれている文字は、文字の数とバイト数が同じで 1 なので CHAR_LENGTH() と LENGTH() は 5 を返しています。&lt;br&gt;&lt;br&gt;1 byte は 8 bit なので、BIT_LENGTH() は 40 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;&#039;データベース&#039; という文字列の長さを取得すると次のようになります。&lt;br&gt;&lt;br&gt;SET @str = &#039;データベース&#039;;&lt;br&gt;&lt;br&gt;SELECT 	CHAR_LENGTH(@str),&lt;br&gt;		LENGTH(@str),&lt;br&gt;        BIT_LENGTH(@str);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で文字列の長さを取得する 2&lt;br&gt;&lt;br&gt;&#039;データベース&#039; の文字数は 6 なので、CHAR_LENGTH() は 6 を返しています。&lt;br&gt;&lt;br&gt;&#039;データベース&#039; のバイト数は UTF-8 Unicode で 1 文字 3 byte * 6 なので LENGTH() は 18 を返しています。&lt;br&gt;&lt;br&gt;1 byte は 8 bit なので、BIT_LENGTH() は 18 * 8 = 144 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;もう一度まとめると、文字列の文字数を取得したい時は CHAR_LENGTH() を使います。&lt;br&gt;&lt;br&gt;文字列のバイト数、ビット数を取得したい時は LENGTH() と BIT_LENGTH() を使います。&lt;br&gt;&lt;br&gt;LENGTH() と BIT_LENGTH() は文字によっては CHARACTER SET が違うと、返るバイト・ビット数が違います。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で文字列の長さを取得する方法についてご説明しました。</description><pubDate>Mon, 10 Jan 2022 07:43:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で現在の日時を取得する</title><link>https://mysql.sql55.com/sql/mysql-now-curdate.php</link><description>MySQL で現在の日時を取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL で現在の日時を取得する方法についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL で現在の日時を取得する&lt;br&gt;MySQL で現在の日付を取得する&lt;br&gt;MySQL で現在の時刻を取得する&lt;br&gt;MySQL で現在の日時を取得する&lt;br&gt;MySQL で現在の日時を取得するには NOW() や SYSDATE() という組み込み関数を使って取得することができます。&lt;br&gt;&lt;br&gt;どちらも、現在の日時を &#039;YYYY-MM-DD hh:mm:ss&#039; フォーマットの文字列として返します。&lt;br&gt;&lt;br&gt;数値に変換されるような状況で使うと、現在の日時を YYYYMMDDhhmmss フォーマットの数値として返します。&lt;br&gt;&lt;br&gt;CURRENT_TIMESTAMP や CURRENT_TIMESTAMP() は NOW() のシノニムです。&lt;br&gt;&lt;br&gt;SELECT 	NOW(),&lt;br&gt;		SYSDATE(),&lt;br&gt;        NOW() + 0,&lt;br&gt;        SYSDATE() + 0;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で現在の日時を取得する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;NOW() と SYSDATE() には、少し違いがあります。&lt;br&gt;&lt;br&gt;NOW() はファンクションやトリガーを含め、ステートメントの実行を開始した日時を返すのに対して、SYSDATE() は実行された日時を返します。&lt;br&gt;&lt;br&gt;NOW() と SYSDATE() の間に SLEEP() 関数を挟んで 5 秒後に現在時刻を取得してみます。&lt;br&gt;&lt;br&gt;SELECT 	NOW(),&lt;br&gt;		SLEEP(5),&lt;br&gt;        NOW();&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で現在の日時を取得する 2&lt;br&gt;&lt;br&gt;SELECT 	SYSDATE(),&lt;br&gt;		SLEEP(5),&lt;br&gt;        SYSDATE();&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で現在の日時を取得する 3&lt;br&gt;&lt;br&gt;NOW() のほうは、同じ日時が返っていますが、SYSDATE() のほうは実行された 5 秒後の日時が返っていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で現在の日付を取得する&lt;br&gt;MySQL で現在の日付を取得するには CURDATE() という組み込み関数を使って取得することができます。&lt;br&gt;&lt;br&gt;現在の日付を &#039;YYYY-MM-DD&#039; フォーマットの文字列として返します。&lt;br&gt;&lt;br&gt;数値に変換されるような状況で使うと、現在の日付を YYYYMMDD フォーマットの数値として返します。&lt;br&gt;&lt;br&gt;CURRENT_DATE や CURRENT_DATE() は CURDATE() のシノニムです。&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 	CURDATE(),&lt;br&gt;		CURDATE() + 0;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で現在の日時を取得する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で現在の時刻を取得する&lt;br&gt;MySQL で現在の時刻を取得するには CURTIME() という組み込み関数を使って取得することができます。&lt;br&gt;&lt;br&gt;現在の時刻を &#039;hh:mm:ss&#039; フォーマットの文字列として返します。&lt;br&gt;&lt;br&gt;数値に変換されるような状況で使うと、現在の時刻を hhmmss フォーマットの数値として返します。&lt;br&gt;&lt;br&gt;CURRENT_TIME や CURRENT_TIME() は CURTIME() のシノニムです。&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 	CURTIME(),&lt;br&gt;		CURTIME() + 0;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で現在の日時を取得する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で現在の日時を取得する方法についてご説明しました。</description><pubDate>Tue, 04 Jan 2022 02:45:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で文字列をつなげる CONCAT()・CONCAT_WS()</title><link>https://mysql.sql55.com/sql/mysql-concat.php</link><description>MySQL で文字列をつなげる CONCAT()・CONCAT_WS()&lt;br&gt;&lt;br&gt; &lt;br&gt;SQL Server や Oracle では + や || をつかって文字列をつなげることができますが、MySQL ではそれらの演算子を使って文字列をつなげることができません。&lt;br&gt;&lt;br&gt;ここでは MySQL で文字列をつなげる時に使われる CONCAT() と CONCAT_WS() 関数についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の CONCAT() 関数の使い方&lt;br&gt;MySQL の CONCAT_WS() 関数の使い方&lt;br&gt;シングルクォーテーションで囲まれた文字列のつなげ方&lt;br&gt;MySQL の CONCAT() 関数の使い方&lt;br&gt;MySQL の CONCAT() 関数は、複数の文字列を引数として受け取り、その文字列をつなげて返す関数です。&lt;br&gt;&lt;br&gt;CONCAT(文字列1, 文字列2, 文字列3, ..., 文字列N);&lt;br&gt;引数にひとつでも NULL がある場合は、戻り値は NULL になります。&lt;br&gt;&lt;br&gt;引数に数字が混ざっている場合は、文字列に変換されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、CONCAT() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;CONCAT() 関数を使って、first_name と last_name を間にスペースを入れてつないで、full_name として取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	CONCAT(first_name, &#039; &#039;, last_name) AS full_name&lt;br&gt;FROM 	students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 2&lt;br&gt;&lt;br&gt;first_name と last_name をつなげた、full_name が取得できていますね。&lt;br&gt;&lt;br&gt;first_name や last_name に NULL があると CONCAT() 関数の戻り値が NULL になってしまいます。&lt;br&gt;&lt;br&gt;もし、NULL の時は空文字列のように扱いたい時は IFNULL(first_name, &#039;&#039;) のように、NULL を空文字列に置き換えてから、CONCAT() 関数に渡してください。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の CONCAT_WS() 関数の使い方&lt;br&gt;MySQL の CONCAT_WS() 関数は、区切り文字列と複数の文字列を引数として受け取り、区切り文字列の後に続く文字列を、区切り文字列でつなげて返す関数です。&lt;br&gt;&lt;br&gt;CONCAT_WS(区切り文字列, 文字列1, 文字列2, 文字列3, ..., 文字列N);&lt;br&gt;区切り文字列が NULL の時は戻り値は NULL になります。&lt;br&gt;&lt;br&gt;区切り文字列以外の文字列に NULL があっても、その NULL はスキップしてつなげられた文字列が返ります。&lt;br&gt;&lt;br&gt;引数に数字が混ざっている場合は、文字列に変換されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、CONCAT_WS() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;CONCAT_WS() 関数を使って、先ほどの students テーブルの first_name と last_name を間にスペースを入れてつないで、full_name として取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	CONCAT_WS(&#039; &#039;, first_name, last_name) AS full_name&lt;br&gt;FROM 	students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 3&lt;br&gt;&lt;br&gt;先ほどの同様に、first_name と last_name をスペースでつなげた、full_name が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;シングルクォーテーションで囲まれた文字列のつなげ方&lt;br&gt;MySQL では、あんまり使う時がないかもしれませんが、つなげたい文字列がシングルクォーテーションで囲まれた文字列の時は、それらの文字列を横にならべるだけでつなげることができます。&lt;br&gt;&lt;br&gt;例えば、&#039;a&#039; &#039;b&#039; &#039;c&#039; という三つの文字列をつなげたい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT &#039;a&#039; &#039;b&#039; &#039;c&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 4&lt;br&gt;&lt;br&gt;abc という文字列が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で文字列をつなげる時に使われる CONCAT() と CONCAT_WS() 関数についてご説明しました。</description><pubDate>Mon, 20 Dec 2021 05:53:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のトリガー</title><link>https://mysql.sql55.com/sql/mysql-create-trigger.php</link><description>MySQL のトリガー&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のトリガーについてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL のトリガーについて&lt;br&gt;MySQL のトリガーを作成する&lt;br&gt;MySQL のトリガーを削除する&lt;br&gt;MySQL のトリガーについて&lt;br&gt;MySQL のテーブルにトリガーを生成すると、テーブルにレコードが挿入・更新・削除される度に、その前か後に指定したステートメントを実行することができます。&lt;br&gt;&lt;br&gt;MySQL のトリガーを生成するには CREATE TRIGGER 文を使います。&lt;br&gt;&lt;br&gt;CREATE TRIGGE 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE TRIGGER トリガー名&lt;br&gt;[ BEFORE | AFTER ] [ INSERT | UPDATE | DELETE ] &lt;br&gt;ON テーブル名 FOR EACH ROW&lt;br&gt;([ FOLLOWS | PRECEDES ] 同じテーブルにある既存のトリガー名)&lt;br&gt;BEGIN&lt;br&gt;	SQL ステートメント&lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;まず、トリガーの定義の中でデフォルトの DELIMITER の ; を使うので、DELIMITER を定義の中で使わない他の文字（ここでは //）に変更します。&lt;br&gt;&lt;br&gt;[ BEFORE | AFTER ] では、次に指定する、INSERT・UPDATE・DELETE 文の前にトリガーで指定した SQL ステートメントを実行するのか、後で実行するのかを指定します。&lt;br&gt;&lt;br&gt;[ INSERT | UPDATE | DELETE ] では、テーブルにデータが挿入された時にトリガーを実行するのか、データが更新された時に実行するのか、データが削除された時に実行するのかを指定します。&lt;br&gt;&lt;br&gt;例えば、データ挿入前にトリガーを実行したいのであれば BEFORE INSERT、データ更新後に実行したいのであれば、AFTER UPDATE と指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;ON テーブル名 FOR EACH ROW で、トリガーを作成するテーブル名を指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;([ FOLLOWS | PRECEDES ] 同じテーブルにある既存のトリガー名) はオプショナルで、このテーブルに同じタイミングで実行されているトリガーがある場合に、今回生成するトリガーをそのトリガーよりも前に実行するのか、後に実行するのかを定義します。&lt;br&gt;&lt;br&gt;今回生成するトリガーを後に実行したい時は FOLLOWS、先に実行したい時は PRECEDES を指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;SQL ステートメント内では、INSERT では挿入された値や、UPDATE では変更前後の値、DELETE では削除された値を OLD と NEW というエイリアスを使って取得することができます。&lt;br&gt;&lt;br&gt;INSERT - 挿入された値: NEW.カラム名&lt;br&gt;UPDATE - 変更前の値: OLD.カラム名、変更後の値: NEW.カラム名&lt;br&gt;DELETE - 削除された値: OLD.カラム名&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL のトリガーを作成する&lt;br&gt;それでは、実際にトリガーを作成して、実行してみます。&lt;br&gt;&lt;br&gt;今回は AFTER UPDATE トリガーを作成して、変更前後の値をログ用のテーブルに挿入します。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL のトリガー 1&lt;br&gt;&lt;br&gt;&lt;br&gt;追加で次のような student_number_log テーブルを作っておきます。&lt;br&gt;&lt;br&gt;CREATE TABLE student_number_log (&lt;br&gt;	students_log_id INT NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_id INT NOT NULL,&lt;br&gt;    student_number_from VARCHAR(10) NULL,&lt;br&gt;	student_number_to VARCHAR(10) NULL,&lt;br&gt;	updated_on DATETIME NOT NULL,&lt;br&gt;    PRIMARY KEY (students_log_id)&lt;br&gt;);&lt;br&gt;&lt;br&gt;students テーブルの student_number が変更された時に、変更前後の値を student_number_log に挿入する AFTER UPDATE トリガーを生成するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;DROP TRIGGER IF EXISTS trg_students_log;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE TRIGGER trg_students_log&lt;br&gt;	AFTER UPDATE&lt;br&gt;	ON students FOR EACH ROW&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	IF OLD.student_number &lt;&gt; NEW.student_number THEN&lt;br&gt;    &lt;br&gt;		INSERT INTO student_number_log (&lt;br&gt;			student_id,&lt;br&gt;			student_number_from,&lt;br&gt;			student_number_to,&lt;br&gt;			updated_on&lt;br&gt;		)&lt;br&gt;		VALUES (&lt;br&gt;			NEW.student_id,&lt;br&gt;			OLD.student_number,&lt;br&gt;			NEW.student_number,&lt;br&gt;			NOW()&lt;br&gt;		);&lt;br&gt;        &lt;br&gt;	END IF;&lt;br&gt;&lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;OLD.student_number で変更前、NEW.student_number で変更後の student_number の値が取得できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、students テーブルに trg_students_log という名前のトリガーが作成されます。&lt;br&gt;&lt;br&gt;MySQL Workbench の Schemas タブをリフレッシュすると、students テーブルの下の Triggers に trg_students_log ができていますね。&lt;br&gt;&lt;br&gt;MySQL のトリガー 2&lt;br&gt;&lt;br&gt;&lt;br&gt;以下の UPDATE 文を使って students テーブルの student_id が 1 と 2 の学生の student_number の前に &#039;S&#039; つけてみます。&lt;br&gt;&lt;br&gt;UPDATE 	students&lt;br&gt;SET 	student_number = CONCAT(&#039;S&#039;, student_number)&lt;br&gt;WHERE 	student_id IN (1,2);&lt;br&gt;&lt;br&gt;この UPDATE 文を実行した後に、student_number_log テーブルを確認すると、先ほど作成した AFTER UPDATE トリガーにより、UPDATE 文で更新される前後の student_number が次のように挿入されます。&lt;br&gt;&lt;br&gt;MySQL のトリガー 3&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL のトリガーを削除する&lt;br&gt;MySQL でトリガーを削除するには、DROP TRIGGER 文を使います。&lt;br&gt;&lt;br&gt;DROP TRIGGER 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;DROP TRIGGER トリガー名;&lt;br&gt;&lt;br&gt;例えば、先ほど作成した trg_students_log という名前のトリガーを削除したいのであれば次のようにできます。&lt;br&gt;&lt;br&gt;DROP TRIGGER trg_students_log;&lt;br&gt;&lt;br&gt;このクエリーを実行すると trg_students_log トリガーが削除されます。&lt;br&gt;&lt;br&gt;MySQL のトリガー 4&lt;br&gt;&lt;br&gt;&lt;br&gt;DROP TRIGGER 文は、実行した時に指定したトリガーが存在しないとエラーになります。&lt;br&gt;&lt;br&gt;指定したトリガーが存在する時のみ削除したい場合は、IF EXISTS を次のように追加します。&lt;br&gt;&lt;br&gt;DROP TRIGGER IF EXISTS トリガー名;&lt;br&gt;&lt;br&gt;以上、MySQL のトリガーについてご説明しました。</description><pubDate>Mon, 06 Dec 2021 10:15:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の RANK()・DENSE_RANK()</title><link>https://mysql.sql55.com/sql/mysql-rank-dense-rank.php</link><description>MySQL の RANK()・DENSE_RANK()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の RANK() と DENSE_RANK() 関数ついてご説明します。&lt;br&gt;&lt;br&gt;RANK() と DENSE_RANK() 関数は MySQL の Version 8.0 以降で使える関数です。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL のRANK()・DENSE_RANK() 関数の使い方&lt;br&gt;MySQL の RANK()・DENSE_RANK() でランク付けする&lt;br&gt;MySQL の RANK()・DENSE_RANK() でグループごとにランク付けする&lt;br&gt;MySQL のRANK()・DENSE_RANK() 関数の使い方&lt;br&gt;MySQL の RANK()・DENSE_RANK() 関数を使うと、各行を指定した項目でランク付けをすることができます。&lt;br&gt;&lt;br&gt;RANK()・DENSE_RANK() 関数 の使い方は同じで、RANK()・DENSE_RANK() に続けて OVER 句を指定します。&lt;br&gt;&lt;br&gt;SELECT RANK() [OVER 句]&lt;br&gt;SELECT DENSE_RANK() [OVER 句]&lt;br&gt;OVER 句では、ORDER BY でどのカラムなどを使ってランク付けをするかを指定します。&lt;br&gt;&lt;br&gt;グループ分けをして、その中でランク付けしたい場合は、PARTITION BY でグループ分けを指定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;たとえば、カラムA の降順で、各行をランク付けしたい時は次のように指定します。&lt;br&gt;&lt;br&gt;SELECT RANK() OVER (ORDER BY カラムA DESC);&lt;br&gt;SELECT DENSE_RANK() OVER (ORDER BY カラムA DESC);&lt;br&gt;&lt;br&gt;ソート順は ASC がデフォルトなので、昇順の時は指定しなくて大丈夫です。&lt;br&gt;&lt;br&gt;複数のカラムを使ってランク付けしたい時は、ORDER BY カラムA, カラムB, ... のように指定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;また、カラムX の値でグループ分けして、その中でカラム A の値の降順でランク付けしたい時は次のように指定します。&lt;br&gt;&lt;br&gt;SELECT RANK() OVER (PARTITION BY カラムX ORDER BY カラムA DESC);&lt;br&gt;SELECT DENSE_RANK() OVER (PARTITION BY カラムX ORDER BY カラムA DESC);&lt;br&gt;こちらも、複数のカラムでグルーピングしたい時は PARTITION BY カラムX, カラムY, ... のように指定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;RANK()・DENSE_RANK() の使い方は同じですが、違いはランクが同じレコードが複数存在する時に、続くランクの番号にギャップがあるかどうかです。&lt;br&gt;&lt;br&gt;点数	RANK	DENSE_RANK	&lt;br&gt;100	1	1	&lt;br&gt;95	2	2	&lt;br&gt;95	2	2	&lt;br&gt;95	2	2	&lt;br&gt;83	5	3	RANK では 5、DENSE_RANK では 3 になる。&lt;br&gt;81	6	4	&lt;br&gt;81	6	4	&lt;br&gt;75	8	5	RANK では 8、DENSE_RANK では 5 になる。&lt;br&gt;&lt;br&gt;MySQL の RANK()・DENSE_RANK() でランク付けする&lt;br&gt;それでは、実際に RANK()・DENSE_RANK() 関数を使って連番を振ってみます。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の MySQL の RANK()・DENSE_RANK() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;RANK()・DENSE_RANK() 関数を使って、誕生日の年の順にランク付けするには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT  RANK() OVER (ORDER BY YEAR(birthday)) AS rank_no,&lt;br&gt;        DENSE_RANK() OVER (ORDER BY YEAR(birthday)) AS dense_rank_no,&lt;br&gt;        student_id,&lt;br&gt;        first_name,&lt;br&gt;        last_name,&lt;br&gt;        YEAR(birthday),&lt;br&gt;        gender&lt;br&gt;FROM    students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の MySQL の RANK()・DENSE_RANK() 2&lt;br&gt;&lt;br&gt;誕生日の年 YEAR(birthday) の順番でランク番号が振られています。&lt;br&gt;&lt;br&gt;1 〜 4 番目のランク番号が同じで、先ほどご説明したように 5 番目のレコードのランク番号は、RANK() のほうは 5、DENSE_RANK() のほうは 2 になっていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の RANK()・DENSE_RANK() でグループごとにランク付けする&lt;br&gt;続いて、RANK()・DENSE_RANK() 関数を使ってグループごとにランク付けしてみます。&lt;br&gt;&lt;br&gt;先ほどの students テーブルのレコードを gender でグループ分けして、グループ内で誕生日の年の順にランク付けするには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT  RANK() OVER (PARTITION BY gender ORDER BY YEAR(birthday)) AS rank_no,&lt;br&gt;        DENSE_RANK() OVER (PARTITION BY gender ORDER BY YEAR(birthday)) AS dense_rank_no,&lt;br&gt;        student_id,&lt;br&gt;        first_name,&lt;br&gt;        last_name,&lt;br&gt;        YEAR(birthday),&lt;br&gt;        gender&lt;br&gt;FROM    students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の MySQL の RANK()・DENSE_RANK() 3&lt;br&gt;&lt;br&gt;gender でグループ分けされてから、グループ内で誕生日の年の順にランク付けされています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の RANK() と DENSE_RANK() 関数ついてご説明しました。</description><pubDate>Tue, 23 Nov 2021 09:22:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の ROW_NUMBER()</title><link>https://mysql.sql55.com/sql/mysql-row-number.php</link><description>MySQL の ROW_NUMBER()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の ROW_NUMBER() 関数ついてご説明します。&lt;br&gt;&lt;br&gt;ROW_NUMBER() は MySQL の Version 8.0 以降で使える関数です。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の ROW_NUMBER() 関数の使い方&lt;br&gt;MySQL の ROW_NUMBER() で連番を振る&lt;br&gt;MySQL の ROW_NUMBER() でグループごとに連番を振る&lt;br&gt;MySQL の ROW_NUMBER() 関数の使い方&lt;br&gt;MySQL の ROW_NUMBER() 関数を使うと、現在の行の行番号を取得することができます。&lt;br&gt;&lt;br&gt;クエリの結果セットに連番を振りたい時などに便利です。&lt;br&gt;&lt;br&gt;&lt;br&gt;使い方は ROW_NUMBER() に続けて OVER 句を指定します。&lt;br&gt;&lt;br&gt;SELECT ROW_NUMBER() [OVER 句]&lt;br&gt;OVER 句では、PARTITION BY や ORDER BY などが指定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;たとえば、カラムA の値の降順で連番を振りたい時は次のように指定します。&lt;br&gt;&lt;br&gt;SELECT ROW_NUMBER() OVER (ORDER BY カラムA DESC);&lt;br&gt;ソート順は ASC がデフォルトなので、昇順の時は指定しなくて大丈夫です。&lt;br&gt;&lt;br&gt;複数のカラムでソートしたい時は、ORDER BY カラムA, カラムB, ... のように指定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;また、カラムX の値でグループ分けして、その中でカラム A の値の降順で連番を振りたい時は次のように指定します。&lt;br&gt;&lt;br&gt;SELECT ROW_NUMBER() OVER (PARTITION BY カラムX ORDER BY カラムA DESC);&lt;br&gt;こちらも、複数のカラムでグルーピングしたい時は PARTITION BY カラムX, カラムY, ... のように指定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の ROW_NUMBER() で連番を振る&lt;br&gt;それでは、実際に ROW_NUMBER() 関数を使って連番を振ってみます。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の ROW_NUMBER() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;ROW_NUMBER() 関数を使って、last_name, first_name の順番で連番を振るには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	ROW_NUMBER() OVER (ORDER BY last_name, first_name) AS row_no,&lt;br&gt;		student_id,&lt;br&gt;		last_name,&lt;br&gt;        first_name,&lt;br&gt;        gender&lt;br&gt;FROM 	students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ROW_NUMBER() 2&lt;br&gt;&lt;br&gt;last_name, first_name の順番で row_no に連番が振られていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の ROW_NUMBER() でグループごとに連番を振る&lt;br&gt;続いて、ROW_NUMBER() 関数を使ってグループごとに連番を振ってみます。&lt;br&gt;&lt;br&gt;先ほどの students テーブルのレコードを gender でグループ分けして、グループ内で last_name, first_name の順番で連番を振るには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	ROW_NUMBER() OVER (PARTITION BY gender ORDER BY last_name, first_name) AS row_no,&lt;br&gt;		student_id,&lt;br&gt;		last_name,&lt;br&gt;        first_name,&lt;br&gt;        gender&lt;br&gt;FROM 	students;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ROW_NUMBER() 3&lt;br&gt;&lt;br&gt;gender でグループ分けされてから、last_name, first_name の順番で row_no に連番が振られています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の ROW_NUMBER() 関数ついてご説明しました。</description><pubDate>Thu, 18 Nov 2021 09:03:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の SUBSTRING()</title><link>https://mysql.sql55.com/sql/mysql-substring.php</link><description>MySQL の SUBSTRING()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使うビルトイン関数の SUBSTRING() についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の SUBSTRING() の使い方&lt;br&gt;MySQL の SUBSTRING() を使って確認する&lt;br&gt;MySQL の SUBSTRING() の使い方&lt;br&gt;MySQL の SUBSTRING() は、文字列の一部の文字列を返す組み込み関数です。&lt;br&gt;&lt;br&gt;SUBSTRING() の構文は次の通りです。&lt;br&gt;&lt;br&gt;SUBSTRING(文字列, 開始位置 [, 長さ])&lt;br&gt;&lt;br&gt;「開始位置」は整数で指定し、一番最初の文字は 1 から始まり、2 が二番目の文字、3 が三番目の文字、、です。&lt;br&gt;&lt;br&gt;「開始位置」をマイナスの値で指定すると、文字列の後ろからカウントされるようになり -1 が一番最後の文字、-2 が最後から二番目の文字、、のようになります。&lt;br&gt;&lt;br&gt;「開始位置」に 0 を指定してもエラーにはなりませんが、空の文字列が返ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;「長さ」も整数で指定し、開始位置から指定した文字数が返ります。&lt;br&gt;&lt;br&gt;「長さ」はオプショナルで、指定しなければ、開始位置から残りの文字が全て返ります。&lt;br&gt;&lt;br&gt;「長さ」に 0 やマイナスを指定してもエラーにはなりませんが、空っぽの文字列が返ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;引数にカンマを使わずに SUBSTRING(文字列 FROM 開始位置 [FOR 長さ]) のように指定することもできます。&lt;br&gt;&lt;br&gt;MID() と SUBSTR() は UBSTRING() のシノニムなので、全く同様の方法で使えます。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の SUBSTRING() を使って確認する&lt;br&gt;それでは実際に MySQL の SUBSTRING() を使ってその結果を見てみましょう。&lt;br&gt;&lt;br&gt;わかりやすいように &#039;123456789&#039; という文字列の一部を SUBSTRING() を使って取得します。&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 	SUBSTRING(&#039;123456789&#039;, 2),&lt;br&gt;		SUBSTRING(&#039;123456789&#039;, 0),&lt;br&gt;        SUBSTRING(&#039;123456789&#039;, 10),&lt;br&gt;        SUBSTRING(&#039;123456789&#039;, -3);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の SUBSTRING() 1&lt;br&gt;&lt;br&gt;まずは、文字列と開始位置のみを引数に渡したケースです。&lt;br&gt;&lt;br&gt;1 行目の SUBSTRING(&#039;123456789&#039;, 2) では、2 番目の文字から残り全ての &#039;23456789&#039; がかえっています。&lt;br&gt;&lt;br&gt;2 行目と 3 行目は開始位置が存在しない値なので、空の文字列がかえっています。&lt;br&gt;&lt;br&gt;4 行目の SUBSTRING(&#039;123456789&#039;, -3) では、マイナスの時は後ろから数えるので、後ろから 3 番目の 7 を開始位置にして、残り全ての &#039;789&#039; がかえっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;次は、長さも指定して、SUBSTRING() を使ってみます。&lt;br&gt;&lt;br&gt;SELECT	SUBSTRING(&#039;123456789&#039;, 2, 5),&lt;br&gt;        SUBSTRING(&#039;123456789&#039;, 2, 0),&lt;br&gt;		SUBSTRING(&#039;123456789&#039;, 2, -1),&lt;br&gt;		SUBSTRING(&#039;123456789&#039;, -4, 3);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の SUBSTRING() 2&lt;br&gt;&lt;br&gt;1 行目の SELECT SUBSTRING(&#039;123456789&#039;, 2, 5) では、2 番目の文字から 5 文字の &#039;23456&#039; がかえっています。&lt;br&gt;&lt;br&gt;2 行目と 3 行目は長さに 0 やマイナスの値を指定すると空の文字列がかえるので、空白になっています。&lt;br&gt;&lt;br&gt;4 行目の SUBSTRING(&#039;123456789&#039;, -4, 3) では、開始位置がマイナスの時は後ろから数えるので、後ろから 4 番目の 6 を開始位置にして、そこから 3 文字の &#039;678&#039; がかえっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のよく使うビルトイン関数の SUBSTRING() についてご説明しました。</description><pubDate>Wed, 03 Nov 2021 18:58:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のカーソル (CURSOR)</title><link>https://mysql.sql55.com/sql/mysql-cursor.php</link><description>MySQL のカーソル (CURSOR)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のカーソル (CURSOR) の使い方についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;MySQL のカーソル (CURSOR) の使い方&lt;br&gt;MySQL でカーソル (CURSOR) を使うと、SELECT 文の結果セットを一行ずつループして何か処理を行うことができます。&lt;br&gt;&lt;br&gt;便利ですが、カーソルを使わずにクエリーで同等のことができる場合は、カーソルを使わないほうがパフォーマンスが良いことが多いです。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL のカーソルの基本的な使い方のステップは次の通りです。&lt;br&gt;&lt;br&gt;終了判定用の変数を FALSE で定義する。&lt;br&gt;カーソルを定義する。&lt;br&gt;CONTINUE HANDLER FOR NOT FOUND をカーソルが結果セットの終わりに達した時に、終了判定用の変数に TRUE をセットするように定義する。&lt;br&gt;カーソルを OPEN する。&lt;br&gt;ループで、カーソルからデータを FETCH、終了判定、処理を繰り返す。&lt;br&gt;カーソルを CLOSE する。&lt;br&gt;カーソルは、変数の定義の後、ハンドラーの定義の直前の位置に定義します。&lt;br&gt;&lt;br&gt;MySQL のカーソルは読み取り専用で、決まった方向に一行ずつしか動けません。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、実際にシンプルな MySQL のカーソル (CURSOR) を使ったストアドプロシージャを作成してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL のカーソル (CURSOR) 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この first_name と last_name をカンマ区切りでつなげた文字列をカーソルを使って生成するストアドプロシージャは次の通りです。。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS get_student_names;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE get_student_names (OUT student_names VARCHAR(4000))&lt;br&gt;BEGIN&lt;br&gt;	&lt;br&gt;  DECLARE student_name VARCHAR(100) DEFAULT &quot;&quot;;&lt;br&gt;  DECLARE done INT DEFAULT FALSE;&lt;br&gt;    &lt;br&gt;  DECLARE cur_student CURSOR FOR&lt;br&gt;    SELECT  CONCAT(first_name, &#039; &#039;, last_name)&lt;br&gt;    FROM    students&lt;br&gt;    ORDER BY first_name,&lt;br&gt;            　last_name;&lt;br&gt;                &lt;br&gt;  DECLARE CONTINUE HANDLER &lt;br&gt;  FOR NOT FOUND SET done = TRUE;&lt;br&gt;&lt;br&gt;  SET student_names = &#039;&#039;;&lt;br&gt;&lt;br&gt;  OPEN cur_student;&lt;br&gt;&lt;br&gt;  loop1: LOOP    &lt;br&gt;    FETCH cur_student INTO student_name;&lt;br&gt;    IF done THEN&lt;br&gt;      LEAVE loop1;&lt;br&gt;    END IF;&lt;br&gt;    SET student_names = CONCAT(student_names, &quot;, &quot;, student_name);	&lt;br&gt;  END LOOP loop1;&lt;br&gt;    &lt;br&gt;  CLOSE cur_student;&lt;br&gt;&lt;br&gt;  SET student_names = SUBSTRING(student_names, 3);&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;&lt;br&gt;まず、7 行目で終了判定用の変数 done を FALSE で定義しています。&lt;br&gt;&lt;br&gt;9 ~ 13 行目で、 DECLARE カーソル名 CURSOR FOR SELECT 文で cur_student というカーソルを定義しています。&lt;br&gt;&lt;br&gt;SELECT 文 は students テーブルの first_name と last_name をつなげたものを first_name、last_name 順に取得するものです。&lt;br&gt;&lt;br&gt;&lt;br&gt;15 ~ 16 行目では、DECLARE CONTINUE HANDLER FOR NOT FOUND で、カーソルが結果セットの終わりに達した時に done に TRUE がセットされるように定義しています。&lt;br&gt;&lt;br&gt;20 行目でカーソルを OPEN しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;22 ~ 28 行目で、ループしています。&lt;br&gt;&lt;br&gt;23 行目の FETCH カーソル名 INTO 変数名 で、cur_student カーソルから student_name に値を代入しています。&lt;br&gt;&lt;br&gt;24 行目の IF 文で done が TRUE かチェックし、TRUE の時は 25 行目の LEAVE 文でループを抜けています。&lt;br&gt;&lt;br&gt;27 行目で student_names 変数に student_name の値をカンマ区切りで追加していっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;30 行目でカーソルを CLOSE しています。&lt;br&gt;&lt;br&gt;32 行目は student_names から、先頭の &#039;, &#039; を削除しているだけです。&lt;br&gt;&lt;br&gt;&lt;br&gt;このストアドプロシージャを作成して実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL get_student_names (@student_names);&lt;br&gt;SELECT @student_names;&lt;br&gt;MySQL のカーソル (CURSOR) 2&lt;br&gt;&lt;br&gt;first_name と last_name のカンマ区切りの文字列が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のカーソル (CURSOR) の使い方をご説明しました。</description><pubDate>Sun, 31 Oct 2021 03:49:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でスリープ (sleep) させる</title><link>https://mysql.sql55.com/query/mysql-sleep.php</link><description>MySQL でスリープ (sleep) させる&lt;br&gt;&lt;br&gt; &lt;br&gt;システム開発をしていると、テストや調査のために、データベース側でスリープ(sleep)させたい時があるかもしれません。&lt;br&gt;&lt;br&gt;ここでは、MySQL で指定した期間、処理をスリープさせる方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の SLEEP() 関数を使ってスリープさせる&lt;br&gt;MySQL で指定した期間処理をスリープさせるには SLEEP() 関数が使えます。&lt;br&gt;&lt;br&gt;SLEEP(秒数) のように秒数を指定し、指定した秒数だけ処理をスリープされます。&lt;br&gt;&lt;br&gt;SELECT SLEEP(秒数);&lt;br&gt;&lt;br&gt;SLEEP() 関数は成功した時に 0 を返し、途中で割り込まれたりすると 1 を返します。&lt;br&gt;&lt;br&gt;戻り値を気にしなくて良い時は SELECT の代わりに DO 文を使うと、ほんの少し処理が速いという利点があります。&lt;br&gt;&lt;br&gt;DO SLEEP(秒数);&lt;br&gt;&lt;br&gt;例えば、5 秒間処理をスリープしたいような時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT &#039;START&#039;;&lt;br&gt;DO SLEEP(5);&lt;br&gt;SELECT &#039;END&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL でスリープ (sleep) させる&lt;br&gt;&lt;br&gt;&lt;br&gt;普段の開発にはあまり使わないかもしれませんが、知っておくと便利です！&lt;br&gt;&lt;br&gt;以上、MySQL で指定した期間、処理をスリープさせる方法をご説明しました。</description><pubDate>Sun, 17 Oct 2021 06:27:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL の ANY・SOME・ALL</title><link>https://mysql.sql55.com/sql/mysql-any-some-all.php</link><description>MySQL の ANY・SOME・ALL&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の ANY・SOME・ALL 演算子についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の ANY と SOME 演算子&lt;br&gt;MySQL の ALL 演算子&lt;br&gt;MySQL の ANY と SOME 演算子&lt;br&gt;MySQL の ANY 演算子は、比較演算子とサブクエリーと共に次のような構文で使用し、[A] とサブクエリーの結果を指定した比較演算子で評価して、どれかひとつでも True になる時に True になります。&lt;br&gt;&lt;br&gt;[A] 比較演算子 ANY (サブクエリー)&lt;br&gt;ANY と共に指定できる比較演算子は =、&gt;、&gt;=、&lt;、&lt;=、&lt;&gt;、!=　のどれかひとつです。&lt;br&gt;&lt;br&gt;サブクエリーはカラム [A] と比較できる、ひとつのカラムを返すクエリーでなくてはなりません。&lt;br&gt;&lt;br&gt;SOME は ANY のエイリアスなので、全く同じ方法で使えます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは ANY 演算子を使ってみましょう。&lt;br&gt;&lt;br&gt;次のような、students テーブルと exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の ANY・SOME・ALL 1&lt;br&gt;&lt;br&gt;MySQL の ANY・SOME・ALL 2&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、ANY 演算子を使って exam_results の score が 90 点以上をとったことがある students の情報を取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id = ANY&lt;br&gt;	  (SELECT 	student_id&lt;br&gt;	   FROM 	exam_results&lt;br&gt;	   WHERE 	score &gt;= 90);&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ANY・SOME・ALL 3&lt;br&gt;&lt;br&gt;90 点以上をとったことがある student_id が 3 と 4 の学生の情報が取得できていますね。&lt;br&gt;&lt;br&gt;お気づきかもしれませんが、IN 演算子を使っても同様の結果がえられます。&lt;br&gt;&lt;br&gt;IN 演算子は = ANY のエイリアスなのです。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の ALL 演算子&lt;br&gt;MySQL の ALL 演算子は、比較演算子とサブクエリーと共に次のような構文で使用し、[A] とサブクエリーの結果を指定した比較演算子で評価して、全てが True になる時だけ True を返します。&lt;br&gt;&lt;br&gt;[A] 比較演算子 ALL (サブクエリー)&lt;br&gt;ANY と同様に、ALL と共に指定できる比較演算子は =、&gt;、&gt;=、&lt;、&lt;=、&lt;&gt;、!=　のどれかひとつです。&lt;br&gt;&lt;br&gt;サブクエリーも、カラム [A] と比較できる、ひとつのカラムを返すクエリーでなくてはなりません。&lt;br&gt;&lt;br&gt;&lt;br&gt;サブクエリーが返す値に NULL がひとつでもあると、評価の結果が Unknown になり、全ての評価結果が True になることはないので、結果セットにレコードが返らなくなります。&lt;br&gt;&lt;br&gt;ALL 演算子を使う場合は、サブクエリーの NULL にご注意ください。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは ALL 演算子を使ってみましょう。&lt;br&gt;&lt;br&gt;例えば、ALL 演算子を使って exam_results に存在しない student_id を持つ students の情報を取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id &lt;&gt; ALL&lt;br&gt;	  (SELECT 	student_id&lt;br&gt;	   FROM 	exam_results&lt;br&gt;       WHERE 	student_id IS NOT NULL);&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ANY・SOME・ALL 4&lt;br&gt;&lt;br&gt;exam_results に存在しない student_id = 6 を持つ students の情報が取得できました。&lt;br&gt;&lt;br&gt;exam_results テーブルには student_id が NULL のレコードが存在するので、WHERE student_id IS NOT NULL がないと、結果セットのレコード数は 0 になります。&lt;br&gt;&lt;br&gt;NOT IN は &lt;&gt; ALL のエイリアスなので、代わりに NOT IN を使っても同様の結果が得られます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の ANY・SOME・ALL 演算子についてご説明しました。</description><pubDate>Thu, 07 Oct 2021 08:12:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でストアドプロシージャやユーザー定義関数を検索する</title><link>https://mysql.sql55.com/query/mysql-search-stored-routines.php</link><description>MySQL でストアドプロシージャやユーザー定義関数を検索する&lt;br&gt;&lt;br&gt; &lt;br&gt;既存のデータベース内の、ストアドプロシージャやユーザー定義関数を検索したいような時ありませんか？&lt;br&gt;&lt;br&gt;ここでは、MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索する方法をご説明します。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL でストアドプロシージャや関数を検索する&lt;br&gt;MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索するには INFORMATION_SCHEMA.ROUTINES テーブルが使えます。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA のテーブル達は MySQL サーバのデータベース、テーブル、カラム、ストアドルーチンなどの情報が参照できるテーブルです。&lt;br&gt;&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.ROUTINES テーブルを使って、指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SELECT 	ROUTINE_NAME,&lt;br&gt;		ROUTINE_TYPE,&lt;br&gt;		ROUTINE_DEFINITION&lt;br&gt;FROM 	INFORMATION_SCHEMA.ROUTINES&lt;br&gt;WHERE	ROUTINE_SCHEMA = &#039;データベース名&#039;&lt;br&gt;		AND ROUTINE_DEFINITION LIKE &#039;%キーワード%&#039;&lt;br&gt;ORDER BY ROUTINE_NAME;&lt;br&gt;&lt;br&gt;ROUTINE_SCHEMA はそのルーチン（ストアドプロシージャ・ユーザー定義関数）のあるデータベース名です。&lt;br&gt;&lt;br&gt;ROUTINE_NAME はストアドプロシージャやユーザー定義関数名です。&lt;br&gt;&lt;br&gt;ROUTINE_TYPE はルーチンのタイプで、ストアドプロシージャの時は PROCEDURE が、ユーザー定義関数の時は FUNCTION です。&lt;br&gt;&lt;br&gt;ROUTINE_DEFINITION にはそのルーチンの定義です。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.ROUTINES テーブルには、戻り値の情報や、作成日・最終更新日など、他にもストアドルーチンの情報がいろいろ保持されていますので、必要に応じてお使いください。&lt;br&gt;&lt;br&gt;&lt;br&gt;実際に INFORMATION_SCHEMA.ROUTINES テーブルを使って検索してみます。&lt;br&gt;&lt;br&gt;例えば、test_db という名前のデータベース内の IF というキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	ROUTINE_NAME,&lt;br&gt;		ROUTINE_TYPE,&lt;br&gt;		ROUTINE_DEFINITION&lt;br&gt;FROM 	INFORMATION_SCHEMA.ROUTINES&lt;br&gt;WHERE	ROUTINE_SCHEMA = &#039;test_db&#039;&lt;br&gt;		AND ROUTINE_DEFINITION LIKE &#039;%IF%&#039;&lt;br&gt;ORDER BY ROUTINE_NAME;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL でストアドプロシージャや関数を検索する 1&lt;br&gt;&lt;br&gt;test_db データベースには、定義に IF を含むストアドプロシージャが 2 つ、ユーザー定義関数がひとつありました。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で指定したキーワードを定義に含む、ストアドプロシージャやユーザー定義関数を検索する方法をご説明しました。</description><pubDate>Sun, 03 Oct 2021 08:33:00 GMT</pubDate><category> MySQL の便利なクエリー集</category></item>
<item><title>MySQL で指定したカラム名を持つテーブルを検索する</title><link>https://mysql.sql55.com/query/mysql-search-tables-by-column-name.php</link><description>MySQL で指定したカラム名を持つテーブルを検索する&lt;br&gt;&lt;br&gt; &lt;br&gt;既存のデータベースに対して、カラム名を指定してテーブルを検索したいような時ありませんか？&lt;br&gt;&lt;br&gt;ここでは、MySQL で指定したカラム名を持つテーブルを検索する方法をご説明します。&lt;br&gt;&lt;br&gt;&lt;br&gt;指定したカラム名を持つテーブルを検索する&lt;br&gt;MySQL で指定したカラム名を持つテーブルを検索するは INFORMATION_SCHEMA.COLUMNS テーブルが使えます。&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA テーブルは MySQL サーバのデータベース、テーブル、カラムなどの情報が参照できるテーブルです。&lt;br&gt;&lt;br&gt;&lt;br&gt;INFORMATION_SCHEMA.COLUMNS テーブルを使って、カラム名を指定してテーブルを検索するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SELECT 	TABLE_NAME,&lt;br&gt;		COLUMN_NAME&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS &lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;データベース名&#039;&lt;br&gt;		AND COLUMN_NAME = &#039;カラム名&#039;&lt;br&gt;ORDER BY TABLE_NAME,&lt;br&gt;		 COLUMN_NAME;&lt;br&gt;&lt;br&gt;例えば、school_db という名前のデータベースの student_id というカラムを持つテーブルを検索したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	TABLE_NAME,&lt;br&gt;		COLUMN_NAME&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS &lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;school_db&#039;&lt;br&gt;		AND COLUMN_NAME = &#039;student_id&#039;&lt;br&gt;ORDER BY TABLE_NAME,&lt;br&gt;		 COLUMN_NAME;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で指定したカラム名を持つテーブルを検索する 1&lt;br&gt;&lt;br&gt;school_db データベースの exam_results テーブルと students テーブルに student_id カラムがありました。&lt;br&gt;&lt;br&gt;&lt;br&gt;もちろん LIKE を使って、以下のようにカラム名の一部を指定して検索することも可能です。&lt;br&gt;&lt;br&gt;SELECT 	TABLE_NAME,&lt;br&gt;		COLUMN_NAME&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS &lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;データベース名&#039;&lt;br&gt;		AND COLUMN_NAME LIKE &#039;%カラム名の一部%&#039;&lt;br&gt;ORDER BY TABLE_NAME,&lt;br&gt;		 COLUMN_NAME;&lt;br&gt;&lt;br&gt;例えば、school_db データベースに name が含まれるカラム名を持つテーブルを検索したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	TABLE_NAME,&lt;br&gt;		COLUMN_NAME&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS &lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;school_db&#039;&lt;br&gt;		AND COLUMN_NAME LIKE &#039;%name%&#039;&lt;br&gt;ORDER BY TABLE_NAME,&lt;br&gt;		 COLUMN_NAME;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で指定したカラム名を持つテーブルを検索する 2&lt;br&gt;&lt;br&gt;school_db データベースの name が含まれるカラム名を持つテーブルが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;テーブル名だけが取得したい場合は以下のように SELECT DISTINCT TABLE_NAME とすることで取得できます。&lt;br&gt;&lt;br&gt;SELECT 	DISTINCT TABLE_NAME&lt;br&gt;FROM 	INFORMATION_SCHEMA.COLUMNS &lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;school_db&#039;&lt;br&gt;		AND COLUMN_NAME LIKE &#039;%name%&#039;&lt;br&gt;ORDER BY TABLE_NAME;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL で指定したカラム名を持つテーブルを検索する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で指定したカラム名を持つテーブルを検索する方法をご説明をご説明しました。</description><pubDate>Tue, 28 Sep 2021 08:17:00 GMT</pubDate><category> MySQL の便利なクエリー集</category></item>
<item><title>MySQL の LEAST()・GREATEST()</title><link>https://mysql.sql55.com/sql/mysql-least-greatest.php</link><description>MySQL の LEAST()・GREATEST()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の LEAST() と GREATEST() 関数についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の LEAST() 関数の使い方&lt;br&gt;MySQL の GREATEST() 関数の使い方&lt;br&gt;MySQL の LEAST() 関数の使い方&lt;br&gt;MySQL の LEAST() 関数は、複数の引数を受け取り、その中で一番小さい引数を返す関数です。&lt;br&gt;&lt;br&gt;LEAST(引数1, 引数2, 引数3, ..., 引数N);&lt;br&gt;引数にひとつでも NULL がある場合は、戻り値は NULL になります。&lt;br&gt;&lt;br&gt;引数のデータ型に文字列と数字が混ざっている場合は、引数は文字列として比較されます。&lt;br&gt;&lt;br&gt;引数のデータ型が全部整数の場合は、引数は整数として比較されます。&lt;br&gt;&lt;br&gt;引数のデータ型全て数字で、DOUBLE が混ざっている場合は、引数は DOUBLE の精度で比較されます。&lt;br&gt;&lt;br&gt;引数のデータ型全て数字で、DOUBLE の引数はなく、DECIMAL が混ざっている場合は 引数は DECIMAL の精度で比較されます。&lt;br&gt;&lt;br&gt;LEAST() 関数の戻り値のデータ型は、引数のデータ型が違う場合、比較に使われたデータ型になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;LEAST() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;SELECT 	LEAST(10, 3, 7),&lt;br&gt;		LEAST(10, 3, 7.5),&lt;br&gt;		LEAST(10, &#039;3&#039;, &#039;7&#039;),&lt;br&gt;		LEAST(&#039;c&#039;, &#039;a&#039;, &#039;b&#039;),&lt;br&gt;		LEAST(&#039;c&#039;, &#039;a&#039;, &#039;b&#039;, NULL);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LEAST()・GREATEST() 1&lt;br&gt;&lt;br&gt;1 行は引数が全て整数なので、整数で比較して一番小さい 3 が返っています。&lt;br&gt;&lt;br&gt;2 行は 7.5 があるので、引数が DECIMAL に変換されて比較され、一番小さい 3.0 が返っています。&lt;br&gt;&lt;br&gt;3 行目は数字と文字列が混ざっているので、文字列に変換されて比較されるので、文字列として比較して一番小さい &#039;10&#039; が返っています。&lt;br&gt;&lt;br&gt;4 行目は引数が全て文字列なので、文字列で比較して一番小さい &#039;a&#039; が返っています。&lt;br&gt;&lt;br&gt;5 行目は引数に NULL があるので、他の引数にかかわらず NULL が返っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の GREATEST() 関数の使い方&lt;br&gt;MySQL の GREATEST() 関数は、複数の引数を受け取り、その中で一番大きい引数を返す関数です。&lt;br&gt;&lt;br&gt;比較のルールなどは、一番小さい値を返すか、一番大きい値を返すかが違うだけで、LEAST() 関数と同じです。&lt;br&gt;&lt;br&gt;GREATEST(引数1, 引数2, 引数3, ..., 引数N);&lt;br&gt;&lt;br&gt;GREATEST() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;SELECT 	GREATEST(10, 3, 7),&lt;br&gt;		GREATEST(10, 3, 7.5),&lt;br&gt;		GREATEST(10, &#039;3&#039;, &#039;7&#039;),&lt;br&gt;		GREATEST(&#039;c&#039;, &#039;a&#039;, &#039;b&#039;),&lt;br&gt;		GREATEST(&#039;c&#039;, &#039;a&#039;, &#039;b&#039;, NULL);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LEAST()・GREATEST() 2&lt;br&gt;&lt;br&gt;1 行は引数が全て整数なので、整数で比較して一番大きい 10 が返っています。&lt;br&gt;&lt;br&gt;2 行は 7.5 があるので、引数が DECIMAL に変換されて比較され、一番大きい 10.0 が返っています。&lt;br&gt;&lt;br&gt;3 行目は数字と文字列が混ざっているので、文字列に変換されて比較されるので、文字列として比較して一番大きい &#039;7&#039; が返っています。&lt;br&gt;&lt;br&gt;4 行目は引数が全て文字列なので、文字列で比較して一番小さい &#039;c&#039; が返っています。&lt;br&gt;&lt;br&gt;5 行目は引数に NULL があるので、他の引数にかかわらず NULL が返っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の LEAST() と GREATEST() 関数についてご説明しました。</description><pubDate>Mon, 27 Sep 2021 07:13:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の IFNULL()・NULLIF()</title><link>https://mysql.sql55.com/sql/mysql-ifnull-nullif.php</link><description>MySQL の IFNULL()・NULLIF()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の IFNULL() と NULLIF() 関数についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の IFNULL() 関数の使い方&lt;br&gt;MySQL の NULLIF() 関数の使い方&lt;br&gt;MySQL の IFNULL() 関数の使い方&lt;br&gt;MySQL の IFNULL() 関数は、引数を二つ受け取り、一つ目の引数が NULL でなければ一つ目の引数を、そうでなければ二つ目の引数を返す関数です。&lt;br&gt;&lt;br&gt;SQL Server では ISNULL() にあたる関数です。&lt;br&gt;&lt;br&gt;IFNULL(引数1, 引数2);&lt;br&gt;IFNULL() 関数の戻り値のデータ型は、引数1 と 引数2 のデータ型が違う場合、STRING、REAL、INTEGER の順番でより汎用的なほうが使われます。&lt;br&gt;&lt;br&gt;例えば、IFNULL(5, &#039;ABC&#039;) の場合は戻り値は 5 ですが、データ型は varchar(3) になります。&lt;br&gt;&lt;br&gt;MySQL の IFNULL()・NULLIF() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;IFNULL() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;SELECT 	IFNULL(5, &#039;ABC&#039;),&lt;br&gt;		IFNULL(&#039;&#039;,&#039;ABC&#039;),&lt;br&gt;		IFNULL(NULL,&#039;ABC&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IFNULL()・NULLIF() 2&lt;br&gt;&lt;br&gt;第一引数が NULL の時だけ、第二引数の &#039;ABC&#039; が返っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の IFNULL()・NULLIF() 3&lt;br&gt;&lt;br&gt;&lt;br&gt;NULLIF() 関数を使って、この exam_results テーブル の score カラムの値が NULL の時は &#039;N/A&#039; という文字列を返したい時には次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	score,&lt;br&gt;		NULLIF(score, &#039;N/A&#039;)&lt;br&gt;FROM 	exam_results;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IFNULL()・NULLIF() 4&lt;br&gt;&lt;br&gt;score が NULL の時は &#039;N/A&#039; が返っていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の NULLIF() 関数の使い方&lt;br&gt;MySQL の NULLIF() 関数は、引数を二つ受け取り、引数1 = 引数2 が True の時は NULL を、そうでない時には一つ目の引数を返す関数です。&lt;br&gt;&lt;br&gt;NULLIF(引数1, 引数2);&lt;br&gt;以下の CASE 文と同等です。&lt;br&gt;&lt;br&gt;CASE &lt;br&gt;	WHEN 引数1 = 引数2 &lt;br&gt;		THEN NULL &lt;br&gt;		ELSE 引数1&lt;br&gt;END;&lt;br&gt;NULLIF() 関数の引数のどちらかが NULL の時は、引数1 = 引数2 が True にならないため、引数1 が返ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、NULLIF() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;SELECT 	NULLIF(&#039;a&#039;, &#039;b&#039;),&lt;br&gt;		NULLIF(&#039;a&#039;, &#039;a&#039;),&lt;br&gt;        NULLIF(&#039;a&#039;, NULL),&lt;br&gt;		NULLIF(NULL, &#039;b&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IFNULL()・NULLIF() 5&lt;br&gt;&lt;br&gt;二つの引数が = の NULLIF(&#039;a&#039;, &#039;a&#039;) は NULL が返っていて、それ以外は第一引数が返っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;NULLIF() 関数は、空文字列 &#039;&#039; の時に NULL に置き換えたい時にも便利です。&lt;br&gt;&lt;br&gt;例えば、students テーブルの gender カラムが nullable だとして、 gender がわからない時に空白ではなく NULL に変換して保存したいような状況です。&lt;br&gt;&lt;br&gt;MySQL の IFNULL()・NULLIF() 6&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の IFNULL() と NULLIF() 関数についてご説明しました。</description><pubDate>Wed, 22 Sep 2021 07:43:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の ISNULL()・COALESCE()</title><link>https://mysql.sql55.com/sql/mysql-isnull-coalesce.php</link><description>MySQL の ISNULL()・COALESCE()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の ISNULL() と COALESCE() 関数についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の ISNULL() 関数の使い方&lt;br&gt;MySQL の COALESCE() 関数の使い方&lt;br&gt;MySQL の ISNULL() 関数の使い方&lt;br&gt;MySQL の ISNULL() 関数は、引数をひとつ受け取り、引数が NULL の時に 1 を、NULLではない時には 0 を返す関数です。&lt;br&gt;&lt;br&gt;ISNULL(引数);&lt;br&gt; SQL Server の ISNULL() 関数は引数を二つ受け取り、第一引数が NULL の時は第二引数を返す関数ですが、MySQL で同様の関数を使いたい時には COALESCE() や IFNULL() 関数が使えます。&lt;br&gt;&lt;br&gt;&lt;br&gt;ISNULL() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;SELECT 	ISNULL(10),&lt;br&gt;		ISNULL(&#039;a&#039;),&lt;br&gt;		ISNULL(&#039;&#039;),&lt;br&gt;		ISNULL(NULL);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ISNULL()・IFNULL()・COALESCE() 1&lt;br&gt;&lt;br&gt;NULL を渡した時だけ、戻り値が 1 に、それ以外は 0 になっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の ISNULL()・IFNULL()・COALESCE() 2&lt;br&gt;&lt;br&gt;&lt;br&gt;この exam_results テーブル の score カラムの値を ISNULL() 関数に渡すと次のようになります。&lt;br&gt;&lt;br&gt;SELECT 	score,&lt;br&gt;		ISNULL(score)&lt;br&gt;FROM 	exam_results;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ISNULL()・IFNULL()・COALESCE() 3&lt;br&gt;&lt;br&gt;score が NULL の時は ISNULL(score) が 1 に、それ以外は 0 になっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の COALESCE() 関数の使い方&lt;br&gt;MySQL の COALESCE() 関数は、複数の引数を受け取り、NULL ではない最初の引数を返す関数です。&lt;br&gt;&lt;br&gt;COALESCE(引数1, 引数2, ..., 引数n);&lt;br&gt;全ての引数が NULL の場合は NULL を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;COALESCE() 関数を使ってみましょう。&lt;br&gt;&lt;br&gt;SELECT 	COALESCE(&#039;a&#039;, &#039;b&#039;, &#039;c&#039;),&lt;br&gt;		COALESCE(NULL, &#039;b&#039;, &#039;c&#039;),&lt;br&gt;		COALESCE(NULL, NULL, &#039;c&#039;),&lt;br&gt;		COALESCE(NULL, NULL, NULL),&lt;br&gt;        COALESCE(NULL, 1, 2.2, &#039;d&#039;),&lt;br&gt;		COALESCE(NULL, NULL, 2.2, &#039;d&#039;, NULL);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ISNULL()・IFNULL()・COALESCE() 4&lt;br&gt;&lt;br&gt;引数を前から確認していって、NULL ではない値を返していますね。&lt;br&gt;&lt;br&gt;引数が全部 NULL の時だけ、COALESCE() は NULL を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;COALESCE() 関数を使って、先ほどの exam_results テーブル の score カラムの値が NULL の時は &#039;N/A&#039; という文字列を返したい時には次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	score,&lt;br&gt;		COALESCE(score, &#039;N/A&#039;)&lt;br&gt;FROM 	exam_results;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ISNULL()・IFNULL()・COALESCE() 5&lt;br&gt;&lt;br&gt;score が NULL の時は &#039;N/A&#039; が返っていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の ISNULL() と COALESCE() 関数についてご説明しました。</description><pubDate>Mon, 20 Sep 2021 09:33:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の REPEAT 文</title><link>https://mysql.sql55.com/sql/mysql-repeat.php</link><description>MySQL の REPEAT 文&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の REPEAT 文についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の REPEAT 文の使い方&lt;br&gt;MySQL の REPEAT 文で BREAK する (LEAVE)&lt;br&gt;MySQL の REPEAT 文で CONTINUE する (ITERATE)&lt;br&gt;MySQL の REPEAT 文の使い方&lt;br&gt;MySQL では、ストーアドプログラム内のフロー制御で REPEAT 文を使って、指定した条件が True を返すまで、繰り返しステートメントを実行することができます。&lt;br&gt;&lt;br&gt;REPEAT 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;[開始ラベル:] REPEAT&lt;br&gt;	繰り返したいステートメント&lt;br&gt;UNTIL 条件文&lt;br&gt;END REPEAT [終了ラベル];&lt;br&gt;UNTIL の条件文が True を返すまで、「繰り返したいステートメント」を繰り返し実行します。&lt;br&gt;&lt;br&gt;REPEAT 文では、条件文のチェックは最後に行われるので、「繰り返したいステートメント」は少なくとも一回は実行されます。&lt;br&gt;&lt;br&gt;開始と終了ラベルはオプショナルですが、つける場合は同じラベル名でなくてはならず、後でご説明する LEAVE 文や ITERATE 文で使います。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、REPEAT 文を実際に使ってみましょう。&lt;br&gt;&lt;br&gt;今回は REPEAT 文を使って、引数として渡した start_idx から end_idx までの数をカンマでつなげるだけの簡単なストアードプロシージャを作ります。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	REPEAT&lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;	UNTIL start_idx &gt; end_idx&lt;br&gt;	END REPEAT;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;8 行目～12 行目で REPEAT 文を使っています。&lt;br&gt;&lt;br&gt;9 行目では result という変数に start_idx とカンマを追加しています。&lt;br&gt;&lt;br&gt;10 行目では start_idx に 1 を足しています。&lt;br&gt;&lt;br&gt;11 行目で start_idx &gt; end_idx かチェックし、False の間、9 行目と 10 行目のステートメントが繰り返し実行されます。&lt;br&gt;&lt;br&gt;13 ~ 15 行目は result の一番後ろのカンマを取り除いているだけです。&lt;br&gt;&lt;br&gt;&lt;br&gt;このストアードプロシージャを作成して、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の REPEAT 1&lt;br&gt;&lt;br&gt;MySQL の REPEAT 2&lt;br&gt;&lt;br&gt;result に 1,2,3,4,5,6,7,8,9,10 が入っていて、10 回ループされて start_idx &gt; end_idx となった時にループが終わっていることがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;REPEAT 文は「繰り返したいステートメント」が一回は実行されるので、最初から start_idx &gt; end_idx が True となるような引数を渡しても 9 ~ 10 行目が一回は実行されます。&lt;br&gt;&lt;br&gt;CALL test(2, 1);&lt;br&gt;MySQL の REPEAT 3&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の REPEAT 文で BREAK する (LEAVE)&lt;br&gt;MySQL で REPEAT 文の途中でループを抜けたい（BREAK したい）時には、LEAVE 文を使って抜けることができます。&lt;br&gt;&lt;br&gt;DO と END REPEAT の間の繰り返したいステートメントの中で、LEAVE ラベル名; のように指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;ラベル名: REPEAT&lt;br&gt;	...&lt;br&gt;	LEAVE ラベル名;&lt;br&gt;	...&lt;br&gt;UNTIL 条件文&lt;br&gt;END REPEAT ラベル名&lt;br&gt;&lt;br&gt;例えば、ループ中に result の文字の長さが 5 以上になったらループを抜けたいのであれば、次のようにできます。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	repeat_loop1: REPEAT&lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		IF CHAR_LENGTH(result) &gt;= 5 THEN&lt;br&gt;			LEAVE repeat_loop1;&lt;br&gt;		END IF;  &lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;	UNTIL start_idx &gt; end_idx&lt;br&gt;	END REPEAT repeat_loop1;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;&lt;br&gt; &lt;br&gt;8 行目の REPEAT の前に開始ラベルの repeat_loop1: を、15 行目の END REPEAT の後に終了ラベルの repeat_loop1 を追加します。&lt;br&gt;&lt;br&gt;10 ~ 12 行目で result の文字数をチェックし、5 以上であれば LEAVE repeat_loop1; でループを抜けています。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行して test ストアードプロシージャを再生成し、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の REPEAT 4&lt;br&gt;&lt;br&gt;result には 1,2,3 のみが入っていて、result の文字数が 5 以上になった時に REPEAT 文のループを抜けているのがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の REPEAT 文で CONTINUE する (ITERATE)&lt;br&gt;MySQL で REPEAT 文の途中で、その後のステートメントをスキップしてループの実行を続けたい（CONTINUE したい）時には、ITERATE 文を使って行うことができます。&lt;br&gt;&lt;br&gt;ITERATE 文は ITERATE ラベル名; のように使い、指定したラベルのループを最初から実行します。&lt;br&gt;&lt;br&gt;ラベル名: REPEAT&lt;br&gt;	...&lt;br&gt;	ITERATE ラベル名;&lt;br&gt;	...&lt;br&gt;UNTIL 条件文&lt;br&gt;END REPEAT ラベル名&lt;br&gt;&lt;br&gt;例えば、ITERATE 文を使って、start_idx が奇数の時のみ result に文字列を追加したいのであれば、次のようにできます。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	repeat_loop1: REPEAT&lt;br&gt;    	IF start_idx % 2 = 0 THEN&lt;br&gt;			SET start_idx = start_idx + 1;&lt;br&gt;			ITERATE repeat_loop1;&lt;br&gt;		END IF;  &lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;	UNTIL start_idx &gt; end_idx&lt;br&gt;	END REPEAT repeat_loop1;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;9 ~ 12 行目で start_idx を 2 で割った余りが 0 の時は start_idx に 1 を足してから、ITERATE repeat_loop1; でループの最初から実行するようにしています。&lt;br&gt;&lt;br&gt;ここで ITERATE 文の前に start_idx に 1 を足すのを忘れると、UNTIL の条件文がずっと True になり、無限ループになってしまうのでお気をつけください。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行して test ストアードプロシージャを再生成し、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の REPEAT 5&lt;br&gt;&lt;br&gt;result には 1,3,5,7,9,11 が入っていて、偶数の時は ITERATE 文以降のステートメントが実行されずに、 REPEAT 文のループが継続されているのがわかります。&lt;br&gt;&lt;br&gt;ですが、本来は 10 で終わりたかったところが 11 まで reesult に入ってしまっています。&lt;br&gt;&lt;br&gt;これは、start_idx が 10 の時に ITERATE 文の前の SET start_idx = start_idx + 1 で start_idx が 11 になりますが、その時に条件文のチェックが行われずにループの最初に戻り、9 ~ 10 行目が実行される為です。&lt;br&gt;&lt;br&gt;10 で終わらせるためには、LEAVE 文を併用するなど工夫する必要があります。&lt;br&gt;&lt;br&gt;&lt;br&gt;REPEAT 文は、条件を最後にチェックするため、このようなケースや、条件文が False の状態でも最低一回は実行されるなど、少し注意が必要です。&lt;br&gt;&lt;br&gt;ループしたい時は、REPEAT 文よりも WHILE 文 や LOOP 文のほうがわかりやすいので不具合になりにくく、使いやすいかもしれません。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の REPEAT 文についてご説明しました。</description><pubDate>Fri, 17 Sep 2021 23:24:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の LOOP 文</title><link>https://mysql.sql55.com/sql/mysql-loop.php</link><description>MySQL の LOOP 文&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の LOOP 文についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の LOOP 文の使い方&lt;br&gt;MySQL の LOOP 文で CONTINUE する (ITERATE)&lt;br&gt;MySQL の LOOP 文の使い方&lt;br&gt;MySQL では、ストーアドプログラム内のフロー制御で LOOP 文を使って、繰り返しステートメントを実行することができます。&lt;br&gt;&lt;br&gt;LOOP 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;開始ラベル: LOOP&lt;br&gt;	繰り返したいステートメント(LEAVE 文を含む)&lt;br&gt;END LOOP 終了ラベル;&lt;br&gt;LOOP 文では「繰り返したいステートメント」をずっと繰り返し実行します。&lt;br&gt;&lt;br&gt;通常、繰り返したいステートメントの中で、LEAVE 文を使ってループを抜けます。&lt;br&gt;&lt;br&gt;ストアードファンクションの時は RETURN 文を使ってループを抜けてファンクションの実行を終えることも可能です。&lt;br&gt;&lt;br&gt;開始と終了ラベルは一応オプショナルですが、LEAVE 文を使うのでつけて使います。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、LOOP 文を実際に使ってみましょう。&lt;br&gt;&lt;br&gt;今回は LOOP 文を使って、引数として渡した start_idx から end_idx までの数をカンマでつなげるだけのストアードプロシージャを作ります。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	loop1: LOOP&lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;        &lt;br&gt;        IF start_idx &gt; end_idx THEN&lt;br&gt;			LEAVE loop1;&lt;br&gt;        END IF;&lt;br&gt;	END LOOP loop1;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;8 ~ 15 行目で LOOP 文を使っています。&lt;br&gt;&lt;br&gt;LOOP と END LOOP の間の 9 ~ 14 行目のステートメントが繰り返し実行されます。&lt;br&gt;&lt;br&gt;9 行目では result という変数に start_idx とカンマを追加しています。&lt;br&gt;&lt;br&gt;10 行目では start_idx に 1 を足しています。&lt;br&gt;&lt;br&gt;11 ~ 14 行目で start_idx &gt; end_idx かチェックし、True の時は LEAVE 文で LOOP を抜けています。&lt;br&gt;&lt;br&gt;17 ~ 19 行目は result の一番後ろのカンマを取り除いているだけです。&lt;br&gt;&lt;br&gt;&lt;br&gt;このストアードプロシージャを作成して、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LOOP 1&lt;br&gt;&lt;br&gt;MySQL の LOOP 2&lt;br&gt;&lt;br&gt;result に 1,2,3,4,5,6,7,8,9,10 が入っていて、10 回ループされて、start_idx &gt; end_idx となった時点で LOOP を抜けていることがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の LOOP 文で CONTINUE する (ITERATE)&lt;br&gt;MySQL で LOOP 文の途中で、その後のステートメントをスキップしてループの実行を続けたい（CONTINUE したい）時には、ITERATE 文を使って行うことができます。&lt;br&gt;&lt;br&gt;ITERATE 文は ITERATE ラベル名; のように使い、指定したラベルのループを最初から実行します。&lt;br&gt;&lt;br&gt;ラベル名: LOOP&lt;br&gt;	...&lt;br&gt;	ITERATE ラベル名;&lt;br&gt;	...&lt;br&gt;END LOOP ラベル名&lt;br&gt;&lt;br&gt;例えば、ITERATE 文を使って、start_idx が偶数の時のみ result に文字列を追加したいのであれば、次のようにできます。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	loop1: LOOP&lt;br&gt;    	IF start_idx % 2 = 1 THEN&lt;br&gt;			SET start_idx = start_idx + 1;&lt;br&gt;			ITERATE loop1;&lt;br&gt;		END IF;  &lt;br&gt;        &lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;        &lt;br&gt;        IF start_idx &gt; end_idx THEN&lt;br&gt;			LEAVE loop1;&lt;br&gt;        END IF;&lt;br&gt;	END LOOP loop1;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;9 ~ 12 行目で start_idx を 2 で割った余りが 1 の時は start_idx に 1 を足してから、ITERATE loop1; でループの最初から実行するようにしています。&lt;br&gt;&lt;br&gt;ここで ITERATE 文の前に start_idx に 1 を足すのを忘れると、無限ループになってしまうのでお気をつけくださいね。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行して test ストアードプロシージャを再生成し、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LOOP 3&lt;br&gt;&lt;br&gt;result には 2,4,6,8,10 が入っていて、奇数の時は ITERATE 文以降のステートメントが実行されずに、ループが継続されているのがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の LOOP 文についてご説明しました。</description><pubDate>Thu, 16 Sep 2021 09:15:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のユーザー定義関数</title><link>https://mysql.sql55.com/sql/mysql-create-function.php</link><description>MySQL のユーザー定義関数&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のユーザー定義関数についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の ユーザー定義関数を作成する&lt;br&gt;MySQL の ユーザー定義関数を実行する&lt;br&gt;MySQL の ユーザー定義関数を削除する&lt;br&gt;MySQL の ユーザー定義関数を作成する&lt;br&gt;MySQL でユーザー定義関数を作成するには、CREATE FUNCTION 文を使います。&lt;br&gt;&lt;br&gt;CREATE FUNCTION 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE FUNCTION ユーザー定義関数名 (&lt;br&gt;	入力引数名 データ型&lt;br&gt;)&lt;br&gt;RETURNS 戻り値のデータ型&lt;br&gt;[NOT DETERMINISTIC | DETERMINISTIC]&lt;br&gt;BEGIN&lt;br&gt;	SQL ルーチンステートメント (RETURN 文を含む)&lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;まず、ユーザー定義関数の定義の中でデフォルトの DELIMITER の ; を使うので、DELIMITER を定義の中で使わない他の文字（ここでは //）に変更します。&lt;br&gt;&lt;br&gt;入力引数はオプショナルで、なくても大丈夫です。&lt;br&gt;&lt;br&gt;CREATE FUNCTION 文では RETURNS 戻り値のデータ型 と SQL ルーチンステートメントの中の RETURN 戻り値; は必須です。&lt;br&gt;&lt;br&gt;[NOT DETERMINISTIC | DETERMINISTIC] もオプショナルで、省略した場合は NOT DETERMINISTIC が使われます。&lt;br&gt;&lt;br&gt;基本的な考え方としては、入力引数が同じであれば同じ結果になる場合、その関数は DETERMINISTIC で、そうでなければ NOT DETERMINISTIC です。&lt;br&gt;&lt;br&gt;この [NOT DETERMINISTIC | DETERMINISTIC] は作成者が宣言するもので MySQL はチェックを行いません。&lt;br&gt;&lt;br&gt;デフォルトでは、CREATE FUNCTION 文は DETERMINISTIC か、NO SQLか、READS SQL DATA を指定していないと次のようなエラーになります。&lt;br&gt;&lt;br&gt;&lt;br&gt;Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)&lt;br&gt;&lt;br&gt;&lt;br&gt;次のクエリーを実行して作成者が危険なイベントをバイナリーログに書き込まないと信用する設定にすることで、NOT DETERMINISTIC な関数を定義してもエラーが出なくなります。&lt;br&gt;&lt;br&gt;SET GLOBAL log_bin_trust_function_creators = 1;&lt;br&gt;&lt;br&gt;それでは、簡単なユーザー定義関数を作成してみます。&lt;br&gt;&lt;br&gt;税込の値段を入力引数として渡して、税抜きの値段を返す get_before_tax_price という名前のユーザー定義関数を作成するには、次のようにできます。&lt;br&gt;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE FUNCTION get_before_tax_price (&lt;br&gt;	after_tax_price DECIMAL(13,2)&lt;br&gt;)&lt;br&gt;RETURNS DECIMAL(13,2)&lt;br&gt;DETERMINISTIC&lt;br&gt;BEGIN&lt;br&gt;	&lt;br&gt;    DECLARE before_tax_price DECIMAL(13,2);&lt;br&gt;    DECLARE sale_tax_percent DECIMAL(5,2) DEFAULT 10; -- 10%&lt;br&gt;    &lt;br&gt;    SET before_tax_price = IFNULL(after_tax_price, 0) * 100 / (sale_tax_percent + 100) ;&lt;br&gt;    RETURN  before_tax_price;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;sale_tax_percent は 10% にしています。&lt;br&gt;&lt;br&gt;12 行目で税抜きの金額を計算し、13 行目で before_tax_price を RETURN しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、get_before_tax_price という名前のユーザー定義関数が作成されます。&lt;br&gt;&lt;br&gt;MySQL Workbench の Schemas タブをリフレッシュすると、Funcitons に get_before_tax_price ができているのがわかります。&lt;br&gt;&lt;br&gt;MySQL のユーザー定義関数 1&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の ユーザー定義関数を実行する&lt;br&gt;MySQL のユーザー定義関数は、組み込み関数と同様に SELECT 文 で使うことができます。&lt;br&gt;&lt;br&gt;SELECT ユーザー定義関数名([引数1, 引数2, ...])&lt;br&gt;[FROM ...];&lt;br&gt;&lt;br&gt;例えば、先ほど作成した before_tax_price 関数を実行するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT get_before_tax_price(1000);&lt;br&gt;&lt;br&gt;このクエリーを実行すると、消費税が 10% の時の税込価格 1000 円の税抜き価格である 909.09 円が取得できていますね。&lt;br&gt;&lt;br&gt;MySQL のユーザー定義関数 2&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の ユーザー定義関数を削除する&lt;br&gt;MySQL でユーザー定義関数を作成するには、DROP FUNCTION 文を使います。&lt;br&gt;&lt;br&gt;DDROP FUNCTION 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;DROP FUNCTION ユーザー定義関数名;&lt;br&gt;&lt;br&gt;例えば、先ほど作成した get_before_tax_price という名前のユーザー定義関数を削除したいのであれば次のようにできます。&lt;br&gt;&lt;br&gt;DROP FUNCTION get_before_tax_price;&lt;br&gt;&lt;br&gt;このクエリーを実行すると get_before_tax_price ユーザー定義関数が削除されます。&lt;br&gt;&lt;br&gt;MySQL のユーザー定義関数 3&lt;br&gt;&lt;br&gt;&lt;br&gt;DROP FUNCTION 文は、実行した時に指定したユーザー定義関数が存在しないとエラーになります。&lt;br&gt;&lt;br&gt;指定したユーザー定義関数が存在する時のみ削除したい場合は、IF EXISTS を次のように追加します。&lt;br&gt;&lt;br&gt;DROP FUNCTION IF EXISTS ユーザー定義関数名;&lt;br&gt;&lt;br&gt;以上、MySQL のユーザー定義関数についてご説明しました。</description><pubDate>Wed, 15 Sep 2021 00:23:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のストアドプロシージャ</title><link>https://mysql.sql55.com/sql/mysql-create-procedure.php</link><description>MySQL のストアドプロシージャ&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のストアドプロシージャについてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の ストアドプロシージャを作成する&lt;br&gt;MySQL の ストアドプロシージャを実行する&lt;br&gt;MySQL の ストアドプロシージャを削除する&lt;br&gt;出力引数のあるストアドプロシージャを実行する&lt;br&gt;MySQL の ストアドプロシージャを作成する&lt;br&gt;MySQL でストアドプロシージャを作成するには、CREATE PROCEDURE 文を使います。&lt;br&gt;&lt;br&gt;CREATE PROCEDURE 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE ストアドプロシージャ名 (&lt;br&gt;	[ IN | OUT | INOUT ] 引数名 データ型&lt;br&gt;)&lt;br&gt;BEGIN&lt;br&gt;	SQL ルーチンステートメント&lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;まず、ストアドプロシージャの定義の中でデフォルトの DELIMITER の ; を使うので、DELIMITER を定義の中で使わない他の文字（ここでは //）に変更します。&lt;br&gt;&lt;br&gt;引数はオプショナルで、なくても大丈夫です。&lt;br&gt;&lt;br&gt;引数のタイプには IN（入力引数）、OUT（出力引数）、INOUT（入出力引数）があり、省略した時は IN になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、簡単なストアドプロシージャを作成してみます。&lt;br&gt;&lt;br&gt;次のような exams テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャ 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この in_exam_name_en と in_exam_name_jp を入力引数として受け取り、exams テーブルにレコードを挿入するストアドプロシージは次の通りです。&lt;br&gt;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE insert_exam (&lt;br&gt;	in_exam_name_en VARCHAR(50),&lt;br&gt;	in_exam_name_jp VARCHAR(50)&lt;br&gt;)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	INSERT INTO exams&lt;br&gt;		( exam_name_en, exam_name_jp )&lt;br&gt;    VALUES  &lt;br&gt;		(in_exam_name_en, in_exam_name_jp);&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、insert_exam という名前のストアドプロシージャが作成されます。&lt;br&gt;&lt;br&gt;MySQL Workbench の Schemas タブをリフレッシュすると、Stored Procedures に insert_exam ができていますね。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャ 2&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の ストアドプロシージャを実行する&lt;br&gt;MySQL のストアドプロシージャを実行するには、CALL 文を使います。&lt;br&gt;&lt;br&gt;CALL ストアドプロシージャ名([引数1, 引数2, ...]);&lt;br&gt;&lt;br&gt;例えば、先ほど作成した insert_exam を実行して、exams テーブルにデータを挿入するには次のようにします。&lt;br&gt;&lt;br&gt;CALL insert_exam (&#039;Chemistry1&#039;, &#039;化学１&#039;);&lt;br&gt;&lt;br&gt;このクエリーを実行して、exams テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャ 3&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャ 4&lt;br&gt;&lt;br&gt;&lt;br&gt;exams テーブルに入力引数として渡した、&#039;Chemistry1&#039;, &#039;化学１&#039;が挿入されています。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の ストアドプロシージャを削除する&lt;br&gt;MySQL でストアドプロシージャを作成するには、DROP PROCEDURE 文を使います。&lt;br&gt;&lt;br&gt;DROP PROCEDURE 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;DROP PROCEDURE ストアドプロシージャ名;&lt;br&gt;&lt;br&gt;例えば、先ほど作成した insert_exam という名前のストアドプロシージャを削除したいのであれば次のようにできます。&lt;br&gt;&lt;br&gt;DROP PROCEDURE insert_exam;&lt;br&gt;&lt;br&gt;このクエリーを実行すると insert_exam ストアドプロシージャが削除されます。&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャ 5&lt;br&gt;&lt;br&gt;&lt;br&gt;DROP PROCEDURE 文は、実行した時に指定したストアドプロシージャが存在しないとエラーになります。&lt;br&gt;&lt;br&gt;指定したストアドプロシージャが存在する時のみ削除したい場合は、IF EXISTS を次のように追加します。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS ストアドプロシージャ名;&lt;br&gt;&lt;br&gt;出力引数のあるストアドプロシージャを実行する&lt;br&gt;次は出力引数のあるストアドプロシージャを作成して、そのストアドプロシージャを実行して出力引数の値を確認してみましょう。&lt;br&gt;&lt;br&gt;例えば、insert_exam ストアドプロシージャを変更して、exams テーブルに挿入したレコードの exam_id を出力引数として取得するには次のようにできます。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS insert_exam;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE insert_exam (&lt;br&gt;	in_exam_name_en VARCHAR(50),&lt;br&gt;	in_exam_name_jp VARCHAR(50),&lt;br&gt;    OUT out_new_exam_id INT&lt;br&gt;)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	INSERT INTO exams&lt;br&gt;		( exam_name_en, exam_name_jp )&lt;br&gt;    VALUES  &lt;br&gt;		(in_exam_name_en, in_exam_name_jp);&lt;br&gt;        &lt;br&gt;	SET out_new_exam_id = LAST_INSERT_ID();&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;&lt;br&gt;変更した箇所は 1 行目、6 行目、15 行目です。&lt;br&gt;&lt;br&gt;1 行目では、insert_exam ストアドプロシージャを書き換えるために、insert_exam が存在する時は削除しています。&lt;br&gt;&lt;br&gt;6 行目では out_new_exam_id という名前の出力引数を定義しています。&lt;br&gt;&lt;br&gt;15 行目では、out_new_exam_id に LAST_INSERT_ID() 関数を使って、最後に挿入された AUTOINCREMENT カラムの値を代入しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行して、insert_exam ストアドプロシージャを再生成します。&lt;br&gt;&lt;br&gt;そして、この 出力引数のあるストアドプロシージャを実行するには次のようにできます。&lt;br&gt;&lt;br&gt;CALL insert_exam (&#039;Physics1&#039;, &#039;物理１&#039;, @new_exam_id);&lt;br&gt;SELECT @new_exam_id;&lt;br&gt;MySQL のストアドプロシージャ 6&lt;br&gt;&lt;br&gt;MySQL のストアドプロシージャ 7&lt;br&gt;&lt;br&gt;SELECT 文で @new_exam_id を確認すると、exams テーブルに挿入された Physics1&#039;、&#039;物理&#039; のレコードの exam_id の 5 が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のストアドプロシージャについてご説明しました。</description><pubDate>Mon, 13 Sep 2021 08:24:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の IF 文</title><link>https://mysql.sql55.com/sql/mysql-if-statement.php</link><description>MySQL の IF 文&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の IF 文についてご説明します。&lt;br&gt;&lt;br&gt;MySQL の IF 文の使い方&lt;br&gt;MySQL では、ストーアドプログラム内のフロー制御で IF 文を使って、指定した条件が True の時に指定したステートメントを実行することができます。&lt;br&gt;&lt;br&gt;IF 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;IF 条件文1 THEN ステートメント1&lt;br&gt;    [ELSEIF 条件文2 THEN ステートメント2]&lt;br&gt;    [ELSEIF 条件文3 THEN ステートメント3]&lt;br&gt;    ...&lt;br&gt;    [ELSE ステートメントN]&lt;br&gt;END IF&lt;br&gt;まず、IF の後の条件文1 が True であれば、ステートメント1 が実行され、その後の条件文は評価されずに終わります。&lt;br&gt;&lt;br&gt;条件文1 が False の時は、次の ELSEIF の条件文2 を評価し、True であれば、ステートメント2 が実行され、その後の条件文は評価されずに終わります。&lt;br&gt;&lt;br&gt;このように順番に条件文を評価していって、どの条件文も True にならなければ、ELSE のステートメントN が実行されます。&lt;br&gt;&lt;br&gt;ELSEIF と ELSE　はオプショナルです。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、IF 文を実際に使ってみましょう。&lt;br&gt;&lt;br&gt;今回は IF 文を使って、引数として渡した x と y を比較し、比較の結果をアウトプット引数として返すストアードプロシージャを作ります。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS compare;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE compare (&lt;br&gt;	x INT, &lt;br&gt;    y INT,&lt;br&gt;    OUT result VARCHAR(20)&lt;br&gt;)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;    IF x = y THEN &lt;br&gt;		SET result = &#039;x と y は同じ。&#039;;&lt;br&gt;	ELSEIF x &gt; y THEN&lt;br&gt;		SET result = &#039;x は y より大きい。&#039;;&lt;br&gt;	ELSE &lt;br&gt;		SET result = &#039;x は y より小さい。&#039;;&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;10 行目～16 行目で IF 文を使っています。&lt;br&gt;&lt;br&gt;まず 10 行目の IF の後の x = y が評価され true の時は 11 行目の &#039;x と y は同じ。&#039; が result に代入されます。&lt;br&gt;&lt;br&gt;x = y が False の時は 12 行目の ELSEIF の x &gt; y が評価され、True の時は 13 行目の &#039;x は y より大きい。&#039; が result に代入されます。&lt;br&gt;&lt;br&gt;x &gt; y が False の時は ELSE のステートメントが実行されるので &#039;x は y より小さい。&#039; が result に代入されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;上のクエリーを実行して、compare ストアードプロシージャを作成します。&lt;br&gt;&lt;br&gt;MySQL の IF 文 1&lt;br&gt;&lt;br&gt;&lt;br&gt;compare ストアドプロシージャを実行して、アウトプット引数の result の中身を確認します。&lt;br&gt;&lt;br&gt;CALL compare(1, 1, @result);&lt;br&gt;SELECT @result;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IF 文 2&lt;br&gt;&lt;br&gt;&lt;br&gt;CALL compare(2, 1, @result);&lt;br&gt;SELECT @result;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IF 文 3&lt;br&gt;&lt;br&gt;&lt;br&gt;CALL compare(1, 2, @result);&lt;br&gt;SELECT @result;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IF 文 4&lt;br&gt;&lt;br&gt;IF 文で指定した通りに、インプット引数の x と y によって、result に文字が代入されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の IF 文についてご説明しました。</description><pubDate>Mon, 13 Sep 2021 05:41:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の WHILE 文</title><link>https://mysql.sql55.com/sql/mysql-while.php</link><description>MySQL の WHILE 文&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の WHILE 文についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の WHILE 文の使い方&lt;br&gt;MySQL の WHILE 文で BREAK する (LEAVE)&lt;br&gt;MySQL の WHILE 文で CONTINUE する (ITERATE)&lt;br&gt;MySQL の WHILE 文の使い方&lt;br&gt;MySQL では、ストーアドプログラム内のフロー制御で WHILE 文を使って、指定した条件が True を返す間、繰り返しステートメントを実行することができます。&lt;br&gt;&lt;br&gt;WHILE 文の基本的な構文は次の通りです。&lt;br&gt;&lt;br&gt;[開始ラベル:] WHILE 条件文 DO&lt;br&gt;	繰り返したいステートメント&lt;br&gt;END WHILE [終了ラベル]&lt;br&gt;条件文が True の間、「繰り返したいステートメント」を繰り返し実行します。&lt;br&gt;&lt;br&gt;条件文のチェックは最初に行われるので、条件文が最初から False になる時は 「繰り返したいステートメント」は一度も実行されません。&lt;br&gt;&lt;br&gt;開始と終了ラベルはオプショナルですが、つける場合は同じラベル名でなくてはならず、後でご説明する LEAVE 文や ITERATE 文で使います。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、WHILE 文を実際に使ってみましょう。&lt;br&gt;&lt;br&gt;今回は WHILE 文を使って、引数として渡した start_idx から end_idx までの数をカンマでつなげるだけの簡単なストアードプロシージャを作ります。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	WHILE start_idx &lt;= end_idx DO&lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;	END WHILE;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;8 行目～11 行目で WHILE 文を使っています。&lt;br&gt;&lt;br&gt;start_idx &lt;= end_idx が true の間、DO と END WHILE の間の 9 行目と 10 行目のステートメントが実行されます。&lt;br&gt;&lt;br&gt;9 行目では result という変数に start_idx とカンマを追加しています。&lt;br&gt;&lt;br&gt;10 行目では start_idx に 1 を足しています。&lt;br&gt;&lt;br&gt;13 ~ 15 行目は result の一番後ろのカンマを取り除いているだけです。&lt;br&gt;&lt;br&gt;&lt;br&gt;このストアードプロシージャを作成して、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の WHILE 1&lt;br&gt;&lt;br&gt;MySQL の WHILE 2&lt;br&gt;&lt;br&gt;result に 1,2,3,4,5,6,7,8,9,10 が入っていて、10 回ループされたことがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の WHILE 文で BREAK する (LEAVE)&lt;br&gt;MySQL で WHILE 文の途中でループを抜けたい（BREAK したい）時には、LEAVE 文を使って抜けることができます。&lt;br&gt;&lt;br&gt;DO と END WHILE の間の繰り返したいステートメントの中で、LEAVE ラベル名; のように指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;ラベル名: WHILE 条件文 DO&lt;br&gt;	...&lt;br&gt;	LEAVE ラベル名;&lt;br&gt;	...&lt;br&gt;END WHILE ラベル名&lt;br&gt;&lt;br&gt;例えば、ループ中に result の文字の長さが 5 以上になったらループを抜けたいのであれば、次のようにできます。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	while_loop1: WHILE start_idx &lt;= end_idx DO      &lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		IF CHAR_LENGTH(result) &gt;= 5 THEN&lt;br&gt;			LEAVE while_loop1;&lt;br&gt;		END IF;  &lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;	END WHILE while_loop1;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;8 行目の WHILE の前に開始ラベルの while_loop1: を、14 行目の END WHILE の後に終了ラベルの while_loop1 を追加します。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;10 ~ 12 行目で result の文字数をチェックし、5 以上であれば LEAVE while_loop1; でループを抜けています。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行して test ストアードプロシージャーを再生成し、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の WHILE 3&lt;br&gt;&lt;br&gt;result には 1,2,3 のみが入っていて、result の文字数が 5 以上になった時にループを抜けているのがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の WHILE 文で CONTINUE する (ITERATE)&lt;br&gt;MySQL で WHILE 文の途中で、その後のステートメントをスキップしてループの実行を続けたい（CONTINUE したい）時には、ITERATE 文を使って行うことができます。&lt;br&gt;&lt;br&gt;ITERATE 文は ITERATE ラベル名; のように使い、指定したラベルのループを最初から実行します。&lt;br&gt;&lt;br&gt;ラベル名: WHILE 条件文 DO&lt;br&gt;	...&lt;br&gt;	ITERATE ラベル名;&lt;br&gt;	...&lt;br&gt;END WHILE ラベル名&lt;br&gt;&lt;br&gt;例えば、ITERATE 文を使って、start_idx が奇数の時のみ result に文字列を追加したいのであれば、次のようにできます。&lt;br&gt;&lt;br&gt;DROP PROCEDURE IF EXISTS test;&lt;br&gt;DELIMITER //&lt;br&gt;CREATE PROCEDURE test (start_idx INT, end_idx INT)&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	DECLARE result VARCHAR(500) DEFAULT &#039;&#039;;&lt;br&gt;&lt;br&gt;	while_loop1: WHILE start_idx &lt;= end_idx DO     &lt;br&gt;    	IF start_idx % 2 = 0 THEN&lt;br&gt;			SET start_idx = start_idx + 1;&lt;br&gt;			ITERATE while_loop1;&lt;br&gt;		END IF;  &lt;br&gt;		SET result = CONCAT(result, start_idx, &#039;,&#039;);&lt;br&gt;		SET start_idx = start_idx + 1;&lt;br&gt;	END WHILE while_loop1;&lt;br&gt;&lt;br&gt;	IF CHAR_LENGTH(result) &gt; 1 THEN&lt;br&gt;		SET result = LEFT(result, CHAR_LENGTH(result) - 1);&lt;br&gt;    END IF;&lt;br&gt;    &lt;br&gt;	SELECT result;&lt;br&gt;    &lt;br&gt;END//&lt;br&gt;DELIMITER ;&lt;br&gt;9 ~ 12 行目で start_idx を 2 で割った余りが 0 の時は start_idx に 1 を足してから、ITERATE while_loop1; でループの最初から実行するようにしています。&lt;br&gt;&lt;br&gt;ここで ITERATE 文の前に start_idx に 1 を足すのを忘れると、WHILE の条件文がずっと True になり、無限ループになってしまうのでお気をつけくださいね。&lt;br&gt;&lt;br&gt;&lt;br&gt;このクエリーを実行して test ストアードプロシージャーを再生成し、start_idx = 1、end_idx = 10 で実行すると次のようになります。&lt;br&gt;&lt;br&gt;CALL test(1, 10);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の WHILE 4&lt;br&gt;&lt;br&gt;result には 1,3,5,7,9 が入っていて、偶数の時は ITERATE 文以降のステートメントが実行されずに、ループが継続されているのがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の WHILE 文についてご説明しました。</description><pubDate>Fri, 10 Sep 2021 05:22:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の VIEW</title><link>https://mysql.sql55.com/sql/mysql-view.php</link><description>MySQL の VIEW&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の VIEW についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の VIEW を作成する&lt;br&gt;MySQL の VIEW を使ってデータを取得する&lt;br&gt;MySQL の VIEW を削除する&lt;br&gt;MySQL の VIEW を作成する&lt;br&gt;ビューとはクエリー（SELECT 文）で定義される仮想のテーブルで、ビューを使って SELECT 文で普通のテーブルのようにデータを取得することができます。&lt;br&gt;&lt;br&gt;ビューの SELECT 文では、複数のテーブルを JOIN することもできますし、サブクエリーや UNION などを使うこともできます。&lt;br&gt;&lt;br&gt;繰り返し同じクエリーでデータを取得したいような状況で、ビューで定義しておくと便利です。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL でビューを作成するには CREATE VIEW 文を使います。シンプルなユーザー定義のビューを作成する構文は次の通りです。&lt;br&gt;&lt;br&gt;CREATE VIEW [ ビュー名 ]&lt;br&gt;AS&lt;br&gt;	[ SELECT 文 ]&lt;br&gt;ビューの定義に使われる SELECT 文では、カラムにユニークなカラム名がついていなければなりません。&lt;br&gt;&lt;br&gt;SELECT * も使えますが、ビューを作成した時にカラムは固定されるので、後でテーブルにカラムを追加・削除されてもビュー側には反映されません。&lt;br&gt;&lt;br&gt;エラーの原因になる可能性がありますので、SELECT * はできるだけ、ビューの定義に使わないことをおすすめします。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の VIEW を使ってデータを取得する&lt;br&gt;それでは、実際にビューを作成して、ビューを使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブル、exams テーブル、exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の VIEW 1&lt;br&gt;&lt;br&gt;MySQL の VIEW 2&lt;br&gt;&lt;br&gt;MySQL の VIEW 3&lt;br&gt;&lt;br&gt;&lt;br&gt;例えばこの三つのテーブルを LEFT JOIN して、テスト名と学生の名前と点数を含んだ view_exam_results という名前のビューを作るには次のようにできます。&lt;br&gt;&lt;br&gt;CREATE VIEW view_exam_results&lt;br&gt;AS &lt;br&gt;	SELECT 	er.exam_result_id,&lt;br&gt;			e.exam_id,&lt;br&gt;			e.exam_name_en,&lt;br&gt;			s.student_id,&lt;br&gt;			s.first_name,&lt;br&gt;			s.last_name,&lt;br&gt;			er.score&lt;br&gt;	FROM 	exam_results AS er&lt;br&gt;				LEFT JOIN exams AS e&lt;br&gt;					ON er.exam_id = e.exam_id&lt;br&gt;				LEFT JOIN students AS s&lt;br&gt;					ON er.student_id = s.student_id;&lt;br&gt;&lt;br&gt;MySQL の VIEW 4&lt;br&gt;&lt;br&gt;&lt;br&gt;上のクエリーを実行すると view_exam_results という名前の View が作成されました。&lt;br&gt;&lt;br&gt;MySQL の VIEW 5&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような感じで、ビューを普通のテーブルのように SELECT 文で使うことができます。&lt;br&gt;&lt;br&gt;SELECT * FROM view_exam_results;&lt;br&gt;MySQL の VIEW 6&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 	first_name,&lt;br&gt;		last_name,&lt;br&gt;		exam_name_en,&lt;br&gt;		score&lt;br&gt;FROM 	view_exam_results&lt;br&gt;WHERE 	student_id = 1;&lt;br&gt;MySQL の VIEW 7&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の VIEW を削除する&lt;br&gt;MySQL でビューを削除には DROP VIEW 文を使います。&lt;br&gt;&lt;br&gt;DROP VIEW [ ビュー名 ]&lt;br&gt;&lt;br&gt;例えば、先ほど作成した view_exam_results という名前のビューを削除するには次のようにします。&lt;br&gt;&lt;br&gt;DROP VIEW view_exam_results;&lt;br&gt;&lt;br&gt;上のクエリーを実行して、MySQL Workbench の Schemas タブをリフレッシュすると、View が削除されてるのがわかります。&lt;br&gt;&lt;br&gt;MySQL の VIEW 8&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の VIEW についてご説明しました。</description><pubDate>Wed, 08 Sep 2021 23:02:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の JOIN（結合）</title><link>https://mysql.sql55.com/sql/mysql-join.php</link><description>MySQL の JOIN（結合）&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の JOIN（結合）についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;JOIN （結合）の基本と種類について&lt;br&gt;INNER JOIN （内部結合）を使ってデータを取得する&lt;br&gt;LEFT (OUTER) JOIN （左外部結合）を使ってデータを取得する&lt;br&gt;RIGHT (OUTER) JOIN （右外部結合）を使ってデータを取得する&lt;br&gt;CROSS JOIN （クロス結合）を使ってデータを取得する&lt;br&gt;JOIN （結合）の基本と種類について&lt;br&gt;MySQL で複数のテーブルからデータを取得したい時に必要になってくるのが、JOIN （結合）です。&lt;br&gt;&lt;br&gt;後ほど、ひとつひとつ詳しくサンプルと共に見ていきますが、ここで JOIN の種類と違いをご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の JOIN のタイプには次のようなものがあります。&lt;br&gt;&lt;br&gt;INNER JOIN （内部結合）&lt;br&gt;ON で指定した条件が、結合する両方のテーブルにマッチするレコードのみを返します。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）1&lt;br&gt;&lt;br&gt;&lt;br&gt;LEFT (OUTER) JOIN （左外部結合）&lt;br&gt;結合の左側のテーブルの全レコードと、ON で指定した条件がマッチする右側のレコードのみを返します。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）2&lt;br&gt;&lt;br&gt;&lt;br&gt;RIGHT (OUTER) JOIN （右外部結合）&lt;br&gt;結合の右側のテーブルの全レコードと、ON で指定した条件がマッチする左側のレコードのみを返します。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）3&lt;br&gt;&lt;br&gt;&lt;br&gt;CROSS JOIN （クロス結合）&lt;br&gt;CROSS JOIN は他の 3 つの JOIN と少し違って、ON で条件を指定せず、左右両方のテーブルの全てのコンビネーションの行を返します。&lt;br&gt;&lt;br&gt;結果で得られるレコード数は [ 左のテーブルのレコード数 ] x [ 右のテーブルのレコード数 ] になります。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）4&lt;br&gt;&lt;br&gt;&lt;br&gt;INNER JOIN （内部結合）を使ってデータを取得する&lt;br&gt;INNER JOIN を使ってテーブルを結合すると、ON で指定した条件が両方のテーブルでマッチするレコードのみが取得されます。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）1&lt;br&gt;&lt;br&gt;それでは、INNER JOIN （内部結合）を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような exam_results テーブルと student テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）5&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）6&lt;br&gt;&lt;br&gt;&lt;br&gt;student_id がマッチするという条件で INNER JOIN することによって、exam_results テーブルの exam_id = 2 で student_id が students テーブルに存在するレコードの student の名前をこのように取得することができます。&lt;br&gt;&lt;br&gt;SELECT  er.*,&lt;br&gt;        s.first_name,&lt;br&gt;        s.last_name&lt;br&gt;FROM    exam_results AS er&lt;br&gt;            INNER JOIN students AS s&lt;br&gt;                ON er.student_id = s.student_id&lt;br&gt;WHERE   er.exam_id = 2;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）7&lt;br&gt;&lt;br&gt;以下のように、exam_results テーブルと student テーブルの両方のテーブルに student_id が存在している、student_id が 1, 3, 4 のレコードのみが取得されています。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）8&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;LEFT (OUTER) JOIN （左外部結合）を使ってデータを取得する&lt;br&gt;LEFT JOIN を使ってテーブルを結合すると、結合の左側のテーブルの全レコードと、ON で指定した条件がマッチする右側のレコードのみが取得できるます。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）2&lt;br&gt;&lt;br&gt;それでは、LEFT JOIN を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどの exam_results テーブルと student テーブル から、student_id がマッチするという条件で LEFT JOIN することによって、exam_results テーブルの exam_id = 2 の全レコードと、student_id がマッチする student の名前が取得できます。&lt;br&gt;&lt;br&gt;SELECT  er.*,&lt;br&gt;        s.first_name,&lt;br&gt;        s.last_name&lt;br&gt;FROM    exam_results AS er&lt;br&gt;            LEFT JOIN students AS s&lt;br&gt;                ON er.student_id = s.student_id&lt;br&gt;WHERE   er.exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）9&lt;br&gt;&lt;br&gt;以下のように、exam_results テーブルの exam_id = 2 の全レコード（4 レコード）に、 student_id がマッチする student_id が 1, 3, 4 の名前のみが students テーブルから取得されています。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）10&lt;br&gt;&lt;br&gt;&lt;br&gt;LEFT JOIN を使う時に少し注意しないといけないのは、WHERE 句で右テーブルのカラムを使って条件を指定してしまうと、左テーブルのマッチしない行は結果セットに含まれません。&lt;br&gt;&lt;br&gt;INNER JOIN と同じ結果になります。&lt;br&gt;&lt;br&gt;SELECT  er.*,&lt;br&gt;        s.first_name,&lt;br&gt;        s.last_name&lt;br&gt;FROM    exam_results AS er&lt;br&gt;            LEFT JOIN students AS s&lt;br&gt;                ON er.student_id = s.student_id&lt;br&gt;WHERE   er.exam_id = 2&lt;br&gt;		AND s.gender = &#039;M&#039;; &lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）11&lt;br&gt;&lt;br&gt;&lt;br&gt;これで、意図したデータが取得できるのであれば、パフォーマンスの点でも、わかりやすさの点でも INNER JOIN を使ったほうがよいと思います。&lt;br&gt;&lt;br&gt;もし、exam_results テーブルの exam_id = 2 の全データと男性の学生の名前のみを取得したい場合は、s.gender = &#039;M&#039; の条件を ON にもってくることで取得できます。&lt;br&gt;&lt;br&gt;SELECT  er.*,&lt;br&gt;        s.first_name,&lt;br&gt;        s.last_name&lt;br&gt;FROM    exam_results AS er&lt;br&gt;            LEFT JOIN students AS s&lt;br&gt;                ON er.student_id = s.student_id&lt;br&gt;					AND s.gender = &#039;M&#039;&lt;br&gt;WHERE   er.exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）12&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;RIGHT (OUTER) JOIN （右外部結合）を使ってデータを取得する&lt;br&gt;RIGHT JOIN を使ってテーブルを結合すると、結合の右側のテーブルの全レコードと、ON で指定した条件がマッチする左側のレコードのみが取得できます。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）3&lt;br&gt;&lt;br&gt;LEFT JOIN の反対です。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、先ほどの LEFT JOIN のクエリーの LEFT JOIN を RIGHT JOIN に置き換えて、左右のテーブルを入れ替えると、全く同じ結果が得られます。&lt;br&gt;&lt;br&gt;SELECT  er.*,&lt;br&gt;        s.first_name,&lt;br&gt;        s.last_name&lt;br&gt;FROM    students AS s&lt;br&gt;            RIGHT JOIN exam_results AS er&lt;br&gt;                ON s.student_id = er.student_id &lt;br&gt;WHERE   er.exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）13&lt;br&gt;&lt;br&gt;RIGHT JOIN を使って、exam_results テーブルの exam_id = 2 の全レコードと、student_id がマッチする student の名前が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;CROSS JOIN （クロス結合）を使ってデータを取得する&lt;br&gt;CROSS JOIN （クロス結合） では、INNER・LEFT・RIGHT JOIN と違って、ON でマッチの条件を指定しません。&lt;br&gt;&lt;br&gt;[左テーブル] CROSS JOIN [右テーブル] のように結合すると、[左テーブル] と [右テーブル]の両方のテーブルの、全てのコンビネーションの行の結果セットを取得することができます。&lt;br&gt;&lt;br&gt;ですので、結果で得られるレコード数は [ 左のテーブルのレコード数 ] x [ 右のテーブルのレコード数 ] になります。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）4&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、CROSS JOIN を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルと exams テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）6&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）15&lt;br&gt;&lt;br&gt;&lt;br&gt;CROSS JOIN を使って、students テーブルと exams テーブルを結合すると次のようになります。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students&lt;br&gt;			CROSS JOIN exams;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の JOIN（結合）16&lt;br&gt;&lt;br&gt;students テーブルの行数 6 * exams テーブルの行数 3 = 18 レコードで、全てのコンビネーションの行の結果セットが取得できました。&lt;br&gt;&lt;br&gt;このように各生徒に対して、各テストの一覧表を作りたいような時に便利です。&lt;br&gt;&lt;br&gt;&lt;br&gt;最後に、JOIN とだけ書くと ON がある場合は INNER JOIN に、NO がない場合は CROSS JOIN になります。&lt;br&gt;&lt;br&gt;以上、MySQL の JOIN（結合）についてご説明しました。</description><pubDate>Wed, 18 Aug 2021 23:01:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の CASE 演算子</title><link>https://mysql.sql55.com/sql/mysql-case-operator.php</link><description>MySQL の CASE 演算子&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の CASE 演算子についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の CASE 演算子の使い方&lt;br&gt;MySQL の CASE 演算子を使ってレコードを取得する&lt;br&gt;MySQL の CASE 演算子の使い方&lt;br&gt;MySQL の CASE 演算子は SELECT 文などで使い、条件を上から順番にチェックしていき、最初に合致した条件に指定した結果を返すことができます。&lt;br&gt;&lt;br&gt;CASE 文の書き方には 2 通りあります。&lt;br&gt;&lt;br&gt;ひとつめは CASE の直後に比較元の値を指定する構文です。&lt;br&gt;&lt;br&gt;SELECT 	CASE value &lt;br&gt;			WHEN compare_value1 THEN result1&lt;br&gt;            WHEN compare_value2 THEN result2&lt;br&gt;			WHEN compare_value3 THEN result3&lt;br&gt;            ELSE result4&lt;br&gt;		END&lt;br&gt;FROM 	table&lt;br&gt;WHEN は複数指定でき、二個目以降の WHEN と ELSE は必須ではありません。&lt;br&gt;&lt;br&gt;value = compare_value1 の時は result1、 value = compare_value2 の時は result2 を、、、と上から順番に値を比較していき、合致した値の result を返します。&lt;br&gt;&lt;br&gt;どの値も合致せず、ELSE が指定されている場合は ELSE の結果を返します。&lt;br&gt;&lt;br&gt;どの値も合致せず、ELSE が指定されていない場合は NULL を返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;もうひとつの構文は CASE の直後には何も指定せず、 WHEN につづけて条件式を指定する構文です。&lt;br&gt;&lt;br&gt;SELECT 	CASE &lt;br&gt;			WHEN condition1 THEN result1&lt;br&gt;            WHEN condition2 THEN result2&lt;br&gt;			WHEN condition3 THEN result3&lt;br&gt;            ELSE result4&lt;br&gt;		END&lt;br&gt;FROM 	table&lt;br&gt;基本的にはひとつめの構文とほぼ同じで、WHEN は複数指定でき、二個目以降の WHEN と ELSE は必須ではありません。&lt;br&gt;&lt;br&gt;上から順番に条件式 (condition) を評価していき、最初に True となった条件式に指定した result を返します。&lt;br&gt;&lt;br&gt;どの条件式も True にならず、ELSE が指定されている場合は ELSE の結果を返します。&lt;br&gt;&lt;br&gt;どの条件式も True にならず、ELSE が指定されていない場合は NULL を返します。&lt;br&gt;&lt;br&gt;こちらの構文だけ覚えておけば、ひとつめの構文のケースにも使えます。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の CASE 演算子を使ってレコードを取得する&lt;br&gt;それでは、実際に CASE 演算子を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;まずは CASEの直後に値を指定する、ひとつめの CASE 演算子の構文を使います。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の CASE 演算子 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルから、CASE を使って gender が M の時は 「 男性 」、F の時は 「 女性 」、それ以外は 「 不明 」 という値を取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	gender,&lt;br&gt;		CASE gender&lt;br&gt;			WHEN &#039;M&#039; THEN &#039;男性&#039;&lt;br&gt;            WHEN &#039;F&#039; THEN &#039;女性&#039;&lt;br&gt;            ELSE &#039;不明&#039;&lt;br&gt;		END AS &#039;性別&#039;&lt;br&gt;FROM 	students;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の CASE 演算子 2&lt;br&gt;&lt;br&gt;gender に合った「 性別 」カラムが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;次は WHEN に続いて条件文を指定する、ふたつめの CASE 演算子の構文を使います。&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の CASE 演算子 3&lt;br&gt;&lt;br&gt;&lt;br&gt;この exam_results テーブルから、CASE を使って score によって、A・B・C・D・F のグレード取得するには次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	score,&lt;br&gt;		CASE&lt;br&gt;			WHEN score &gt;= 90 THEN &#039;A&#039;&lt;br&gt;            WHEN score &gt;= 80 THEN &#039;B&#039;&lt;br&gt;            WHEN score &gt;= 70 THEN &#039;C&#039;&lt;br&gt;			WHEN score &gt;= 60 THEN &#039;D&#039;&lt;br&gt;            ELSE &#039;F&#039;&lt;br&gt;		END AS grade&lt;br&gt;FROM 	exam_results;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の CASE 演算子 4&lt;br&gt;&lt;br&gt;score に合った grade が取得できています。&lt;br&gt;&lt;br&gt;本来 B グレードは 80 &lt;= score &lt;= 89 ですが、条件文を上から順番に評価していって、True になったところで止まるので、条件文には score &gt;= 80 とだけ指定しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の CASE 演算子についてご説明しました。</description><pubDate>Sat, 14 Aug 2021 07:52:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の LIMIT</title><link>https://mysql.sql55.com/sql/mysql-limit.php</link><description>MySQL の LIMIT&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の LIMIT 句についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の LIMIT 句の使い方&lt;br&gt;MySQL の LIMIT 句を使ってレコードを取得する&lt;br&gt;MySQL の LIMIT の使い方&lt;br&gt;MySQL の SELECT 文では、LIMIT句を使って、結果セットが返すレコード数を指定することができます。&lt;br&gt;&lt;br&gt;ページネーションなどで、結果セットの一部のデータのみを取得したいような時に便利です。&lt;br&gt;&lt;br&gt;よく使う基本の SELECT 文の構文は次の通りで、LIMIT 句は以下の位置に追加します。&lt;br&gt;&lt;br&gt;SELECT select_expr&lt;br&gt;[ FROM table_references ] &lt;br&gt;[ WHERE where_condition ] &lt;br&gt;[ GROUP BY {col_name | expr | position} ] &lt;br&gt;[ HAVING where_condition ] &lt;br&gt;[ ORDER BY {col_name | expr | position} [ ASC | DESC ] ]&lt;br&gt;[ LIMIT {[offset,] row_count | row_count OFFSET offset} ];&lt;br&gt;&lt;br&gt;LIMIT 句では [offset,] row_count と row_count OFFSET offset の 2 通り、指定する方法があります。&lt;br&gt;&lt;br&gt;row_count は SELECT 文が返すレコード数で、offset は何番目のレコードから返すかを指定します。&lt;br&gt;&lt;br&gt;offset のインデックスは 0 から始まるので、offset に 10 と指定すると、11 番目のレコードからということになります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の LIMIT を使ってレコードを取得する&lt;br&gt;それでは、実際に LIMIT 句を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のスクリプトを実行して作った test テーブルがあります。&lt;br&gt;&lt;br&gt;CREATE TABLE test (&lt;br&gt;    test_id INT NOT NULL AUTO_INCREMENT,&lt;br&gt;    test_data VARCHAR(10) NOT NULL,&lt;br&gt;	PRIMARY KEY (test_id)&lt;br&gt;);&lt;br&gt;&lt;br&gt;INSERT INTO test&lt;br&gt;		(test_data)&lt;br&gt;	VALUES &lt;br&gt;		(&#039;data1&#039;),(&#039;data2&#039;),(&#039;data3&#039;),(&#039;data4&#039;),(&#039;data5&#039;),&lt;br&gt;        (&#039;data6&#039;),(&#039;data7&#039;),(&#039;data8&#039;),(&#039;data9&#039;),(&#039;data10&#039;),&lt;br&gt;		(&#039;data11&#039;),(&#039;data12&#039;),(&#039;data13&#039;),(&#039;data14&#039;),(&#039;data15&#039;),&lt;br&gt;        (&#039;data16&#039;),(&#039;data17&#039;),(&#039;data18&#039;),(&#039;data19&#039;),(&#039;data20&#039;);&lt;br&gt;test_id が 1 ~ 20 までのデータが入っています。&lt;br&gt;&lt;br&gt;MySQL の LIMIT 1&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、この test テーブルを降順にソートした結果の最初から 5 レコード取り出したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	test&lt;br&gt;ORDER BY test_id DESC&lt;br&gt;LIMIT 5;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIMIT 2&lt;br&gt;&lt;br&gt;test_id の降順なので 20 から 16 まで、5 レコードが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;test テーブルを降順にソートした結果の、11 レコード目から 5 レコード取り出したい時は次のようにできます。&lt;br&gt;&lt;br&gt;offset を使って何番目のレコードから返すかを指定するのでしたが、インデックスは 0 から数えるので、OFFSET には 11 ではなく 10 を指定します。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	test&lt;br&gt;ORDER BY test_id DESC&lt;br&gt;LIMIT 5 OFFSET 10;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIMIT 3&lt;br&gt;&lt;br&gt;test_id の降順なので 20 から 11 までの 10 レコードをスキップして、11 番目のレコードの test_id = 10 から 6 までの 5 レコードが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のように指定しても同じ結果になります。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	test&lt;br&gt;ORDER BY test_id DESC&lt;br&gt;LIMIT 10, 5;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIMIT 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の LIMIT 句についてご説明しました。</description><pubDate>Thu, 12 Aug 2021 10:25:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の集計関数 - MIN()・MAX()・AVG()</title><link>https://mysql.sql55.com/sql/mysql-min-max-avg.php</link><description>MySQL の集計関数 - MIN()・MAX()・AVG()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う集計関数の MIN()、MAX()、AVG() についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の 集計関数 MIN() と MAX() の使い方&lt;br&gt;MySQL の 集計関数 AVG() の使い方&lt;br&gt;MySQL の 集計関数 MIN() と MAX() の使い方&lt;br&gt;MySQL の MIN() は、SELECT 文 で使い、結果セットの中で指定したカラムの最小値を返す集計関数です。&lt;br&gt;&lt;br&gt;MAX() も、同様に SELECT 文 で使い、結果セットの中で指定したカラムの最大値を返す集計関数です。&lt;br&gt;&lt;br&gt;SELECT 	MIN(カラム名),&lt;br&gt;		MAX(カラム名)&lt;br&gt;FROM 	テーブル名&lt;br&gt;WHERE 	...&lt;br&gt;&lt;br&gt;それでは、MIN() と MAX() を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、この exam_results テーブルの exam_id が 2 の score の最低点と最高点を取得したい時は次のように取得できます。&lt;br&gt;&lt;br&gt;SELECT 	MIN(score),&lt;br&gt;		MAX(score) &lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 2&lt;br&gt;&lt;br&gt;exam_id = 2 の score の最低点 77 と最高点 91 が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;exam_id ごとの score の最低点と最高点を取得したい時は GROUP BY と MIN(score)、MAX(score) を使って、次のように取得できます。&lt;br&gt;&lt;br&gt;SELECT 	exam_id,&lt;br&gt;		MIN(score),&lt;br&gt;		MAX(score) &lt;br&gt;FROM 	exam_results&lt;br&gt;GROUP BY exam_id;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 3&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の 集計関数 AVG() の使い方&lt;br&gt;MySQL の AVG() は結果セットのなかで、指定したカラムの平均値を返してくれる集計関数です。&lt;br&gt;&lt;br&gt;SELECT 	AVG(カラム名)&lt;br&gt;FROM 	テーブル名&lt;br&gt;WHERE 	...&lt;br&gt;&lt;br&gt;例えば、以下の exam_results テーブルから、exam_id が 1 の score の平均値は次のように取得できます。&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 	AVG(score)&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 1;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 4&lt;br&gt;&lt;br&gt;(85 + 60 + 98 + 73) / 4 = 79 なので、正しく取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;少し気をつけなければいけないのは、値に NULL が入っているときの動きです。&lt;br&gt;&lt;br&gt;exam_id が 2 のレコードは 4 つありますが、その中のひとつのレコードの score が NULL になっています。&lt;br&gt;&lt;br&gt;その状態で AVG(score) を取得すると、値は 4 で割られるのではなく、 3 で割られ、(77 + 92 + 81) / 3 の計算結果 の 83.3333 が返ってきます。&lt;br&gt;&lt;br&gt;SELECT 	AVG(score)&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 5&lt;br&gt;&lt;br&gt;&lt;br&gt;もし NULL を 0 点として平均値をとりたい場合は、COALESCE() 関数などで NULL を 0 に変換して AVG() を使うと (77 + 0 + 92 + 81) / 4 の値が取得できます。&lt;br&gt;&lt;br&gt;SELECT 	AVG(COALESCE(score, 0))&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 6&lt;br&gt;&lt;br&gt;&lt;br&gt;また、MIN・MAX の時と同様に、GROUP BY と AVG() を一緒に使って、exam_id ごとの score の平均値も取得できます。&lt;br&gt;&lt;br&gt;SELECT 	exam_id,&lt;br&gt;		AVG(COALESCE(score, 0))&lt;br&gt;FROM 	exam_results&lt;br&gt;GROUP BY exam_id;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 7&lt;br&gt;&lt;br&gt;&lt;br&gt;最後に、結果セットにレコードがなかった時は、MIN()・MAX()・AVG() 共に NULL を返します。&lt;br&gt;&lt;br&gt;SELECT 	MIN(score),&lt;br&gt;        MAX(score),&lt;br&gt;        AVG(score)&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 0;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - MIN()・MAX()・AVG() 8&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のよく使う集計関数の MIN()、MAX()、AVG() についてご説明しました。</description><pubDate>Tue, 10 Aug 2021 07:23:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の集計関数 - COUNT()・SUM()</title><link>https://mysql.sql55.com/sql/mysql-count-sum.php</link><description>MySQL の集計関数 - COUNT()・SUM()&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のよく使う集計関数の COUNT() と SUM() についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の 集計関数 COUNT() の使い方&lt;br&gt;MySQL の 集計関数 SUM() の使い方&lt;br&gt;MySQL の 集計関数 COUNT() の使い方&lt;br&gt;MySQL の COUNT() は、SELECT 文 で使い、レコードの数を BIGINT 型で返す集計関数です。&lt;br&gt;&lt;br&gt;SELECT 	COUNT(カラム名)&lt;br&gt;FROM 	テーブル名&lt;br&gt;WHERE 	...&lt;br&gt;上のように COUNT(カラム名) のようにカラム名を指定した時は、そのカラムの NULL 以外のレコード数を返します。&lt;br&gt;&lt;br&gt;COUNT(DISTINCT カラム名) と指定すると、そのカラムに保存されている NULL 以外のユニークな値のレコード数が取得できます。&lt;br&gt;&lt;br&gt;COUNT(*) のように指定することもでき、この場合はカラムにかかわらず、NULL も含んだレコード数が取得できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、COUNT() を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、この exam_results テーブルの exam_id が 2 のレコードの数を取得したい時は、COUNT(*) を使って次のように書きます。&lt;br&gt;&lt;br&gt;SELECT 	COUNT(*),&lt;br&gt;		COUNT(student_id)&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 2;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 2&lt;br&gt;&lt;br&gt;exam_id = 2 のレコードが 4 行あるので、COUNT(*) は 4 を返しています。&lt;br&gt;&lt;br&gt;COUNT(student_id) も取得していますが、exam_result_id = 6 のレコードの student_id が NULL なので 3 を返しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;exam_id ごとの student_id の数を取得したい時は GROUP BY と COUNT(student_id) を使って、次のように取得できます。&lt;br&gt;&lt;br&gt;SELECT 	exam_id,&lt;br&gt;		COUNT(student_id)&lt;br&gt;FROM 	exam_results&lt;br&gt;GROUP BY exam_id;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 3&lt;br&gt;&lt;br&gt;&lt;br&gt;テストにかかわらず、exam_results テーブルにレコードがある student_id の数を知りたい時には、COUNT と DISTINCT を使って次のように取得できます。&lt;br&gt;&lt;br&gt;SELECT 	COUNT(DISTINCT student_id)&lt;br&gt;FROM 	exam_results;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 4&lt;br&gt;&lt;br&gt;5 人の学生のデータが exam_results テーブルにあることがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の 集計関数 SUM() の使い方&lt;br&gt;MySQL の SUM() は結果セットのなかで、指定したカラムの合計値を返してくれる集計関数です。&lt;br&gt;&lt;br&gt;SELECT 	SUM(カラム名)&lt;br&gt;FROM 	テーブル名&lt;br&gt;WHERE 	...&lt;br&gt;&lt;br&gt;例えば、以下の exam_results テーブルから、exam_id が 1 の score の合計値は次のように取得できます。&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 1&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 	SUM(score) &lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 1;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 5&lt;br&gt;&lt;br&gt;&lt;br&gt;また、COUNT() の時と同様に、GROUP BY と一緒に使って、exam_id ごとの score の合計値も取得できます。&lt;br&gt;&lt;br&gt;SELECT 	exam_id,&lt;br&gt;		SUM(score) &lt;br&gt;FROM 	exam_results&lt;br&gt;GROUP BY exam_id;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 6&lt;br&gt;&lt;br&gt;&lt;br&gt;最後に、結果セットにレコードがなかった時、COUNT() は 0 を返しますが、SUM() は NULL を返しますのでご注意ください。&lt;br&gt;&lt;br&gt;SELECT 	COUNT(student_id),&lt;br&gt;		SUM(score) &lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	exam_id = 0;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の集計関数 - COUNT()・SUM() 7&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のよく使う集計関数の COUNT() と SUM() についてご説明しました。</description><pubDate>Sat, 07 Aug 2021 08:36:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の UNION / UNION ALL</title><link>https://mysql.sql55.com/sql/mysql-union.php</link><description>MySQL の UNION / UNION ALL&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の UNION と UNION ALL についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の UNION の基本&lt;br&gt;MySQL の UNION で結合する&lt;br&gt;MySQL の UNION ALL で結合する&lt;br&gt;MySQL の UNION の基本&lt;br&gt;MySQL の UNION は複数の結果セットをひとつの結果セットに結合する演算子です。&lt;br&gt;&lt;br&gt;UNION は結合する SELECT 文の間に追加し、次のように使います。&lt;br&gt;&lt;br&gt;SELECT	カラム名1-1, &lt;br&gt;		カラム名1-2,&lt;br&gt;		...&lt;br&gt;FROM 	テーブル名1&lt;br&gt;WHERE 	...&lt;br&gt;UNION&lt;br&gt;SELECT	カラム名2-1, &lt;br&gt;		カラム名2-2,&lt;br&gt;		...&lt;br&gt;FROM 	テーブル名2&lt;br&gt;WHERE 	...;&lt;br&gt;&lt;br&gt;上の例では二つの SELECT 文から得られる結果セットを UNION で結合していますが、この後に更に UNION + SELECT 文を追加して、複数の結果セットを結合することもできます。&lt;br&gt;&lt;br&gt;結合された結果セットのカラム名は、一番最初の結果セットのものが使われます。&lt;br&gt;&lt;br&gt;結合するそれぞれの結果セットは、カラムの数、順番、データ型が一致していなければなりません。&lt;br&gt;&lt;br&gt;ただ、データ型については、完全に一致していなくても、暗黙に変換が可能なものであれば変換されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;UNION を使うと、重複する行は削除されてユニークな値のみが結果セットに含まれます。&lt;br&gt;&lt;br&gt;WHERE、GROUP BY、HAVING 句は、ひとつひとつの SELECT 文に指定可能です。&lt;br&gt;&lt;br&gt;結合の結果セットの並び順を指定したい時には ORDER BY 句を 最後の SELECT 文の後に指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の UNION で結合する&lt;br&gt;それでは、実際に UNION で結果セットを結合してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルと users テーブルがあり、そのうち二人がどちらのテーブルにも存在しています。&lt;br&gt;&lt;br&gt;MySQL の UNION / UNION ALL 1&lt;br&gt;&lt;br&gt;MySQL の UNION / UNION ALL 2&lt;br&gt;&lt;br&gt; 実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成して追加で、以下 users テーブルとデータを生成してお使いください。&lt;br&gt;&lt;br&gt;CREATE TABLE users (&lt;br&gt;    users_id     INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    name_first   VARCHAR(50)     NOT NULL,&lt;br&gt;    name_last    VARCHAR(50)     NOT NULL,&lt;br&gt;	age  	     INT,&lt;br&gt;    PRIMARY KEY (users_id)&lt;br&gt;);&lt;br&gt;&lt;br&gt;INSERT INTO users &lt;br&gt;		(name_first, name_last, age)&lt;br&gt;	VALUES &lt;br&gt;		(&#039;Hana&#039;, &#039;Yamada&#039;, 17),&lt;br&gt;		(&#039;Yuri&#039;, &#039;Sasaki&#039;, 15),&lt;br&gt;        (&#039;Hikari&#039;, &#039;Yamashita&#039;, 20),&lt;br&gt;        (&#039;Mana&#039;, &#039;Saito&#039;, 24),&lt;br&gt;        (&#039;Sakura&#039;, &#039;Hata&#039;, 19);&lt;br&gt;&lt;br&gt;この students と users テーブルから、氏名を取得する SELECT 文を UNION を使って結合し、苗字順にならべるには次のようにできます。&lt;br&gt;&lt;br&gt;ORDER BY では一番最初の SELETC 文のカラム名で指定しています。&lt;br&gt;&lt;br&gt;SELECT      first_name,&lt;br&gt;            last_name&lt;br&gt;FROM        students&lt;br&gt;UNION&lt;br&gt;SELECT      name_first,&lt;br&gt;			name_last&lt;br&gt;FROM        users&lt;br&gt;ORDER BY    last_name;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の UNION / UNION ALL 3&lt;br&gt;&lt;br&gt;結果セットのレコード数は 9 で、重複している二人がそれぞれ 1 行ずつになっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の UNION ALL で結合する&lt;br&gt;UNION を使うと、重複する行は削除されてユニークな値のみが結果セットに含まれました。&lt;br&gt;&lt;br&gt;UNION の代わりに UNION ALL と指定すると、重複した行も結果セットに含まれます。&lt;br&gt;&lt;br&gt;UNION は UNION ALL よりもクエリーコストが高いので、重複レコードが存在してもよい時や、どちらを使っても結果が同じになるような場合は、UNION ALL を使ったほうが良いと思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどのクエリーの UNION を UNION ALL にして実行すると次のようになります。&lt;br&gt;&lt;br&gt;SELECT      first_name,&lt;br&gt;            last_name&lt;br&gt;FROM        students&lt;br&gt;UNION ALL&lt;br&gt;SELECT      name_first,&lt;br&gt;			name_last&lt;br&gt;FROM        users&lt;br&gt;ORDER BY    last_name;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の UNION / UNION ALL 4&lt;br&gt;&lt;br&gt;結果セットのレコード数は 11 で、重複している二人のレコードがそのまま結果セットに含まれていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の UNION と UNION ALL についてご説明しました。</description><pubDate>Thu, 05 Aug 2021 08:32:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の GROUP BY と HAVING</title><link>https://mysql.sql55.com/sql/mysql-group-by-having.php</link><description>MySQL の GROUP BY と HAVING&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の GROUP BY と HAVING についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;GROUP BY でグルーピングして集計する&lt;br&gt;GROUP BY で複数のカラムを指定してグルーピンクする&lt;br&gt;HAVING でグループの条件を指定する&lt;br&gt;GROUP BY でグルーピングして集計する&lt;br&gt;MySQLの SELECT 文で GROUP BY を使うと、行をグループ化して、そのグループごとに集計したりすることができます。&lt;br&gt;&lt;br&gt;よく使う基本の SELECT 文の構文は次の通りで、GROUP BY は以下の位置に追加します。&lt;br&gt;&lt;br&gt;SELECT select_expr&lt;br&gt;[ FROM table_references ] &lt;br&gt;[ WHERE where_condition ] &lt;br&gt;[ GROUP BY {col_name | expr | position} ] &lt;br&gt;[ HAVING where_condition ] &lt;br&gt;[ ORDER BY {col_name | expr | position} [ ASC | DESC ] ]&lt;br&gt;[ LIMIT {[offset,] row_count | row_count OFFSET offset} ];&lt;br&gt;&lt;br&gt;実際に例をあげて GROUP BY を使いながら、使い方をご説明します。&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の GROUP BY と HAVING 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この exam_results テーブルから exam_id ごとの最大値 (MAX) 、最小値 (MIN) を取得するには、GROUP BY を使って次のようにできます。&lt;br&gt;&lt;br&gt;SELECT      exam_id,&lt;br&gt;            MIN(score) AS min_score,&lt;br&gt;            MAX(score) AS max_score&lt;br&gt;FROM        exam_results&lt;br&gt;GROUP BY    exam_id;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の GROUP BY と HAVING 2&lt;br&gt;&lt;br&gt;exam_id = 1 と 2 の最高点と最低点が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;GROUP BY を使うと SELECT 句に指定できるカラムは GROUP BY で指定したカラムと、集計関数や定数など、グループごとにひとつの値を返すものだけになります。&lt;br&gt;&lt;br&gt;それ以外のカラムを SELECT 句で指定すると、以下のようにエラーになります。&lt;br&gt;&lt;br&gt;MySQL の GROUP BY と HAVING 3&lt;br&gt;&lt;br&gt;&lt;br&gt;GROUP BY で複数のカラムを指定してグルーピンクする&lt;br&gt;GROUP BY の後にはカラム名だけでなく、エイリアス名や、関数や計算された値など指定することができます。&lt;br&gt;&lt;br&gt;SELECT 句のカラムのインデックスも指定できますが、わかりにくくなるので、あまりおすすめしません。&lt;br&gt;&lt;br&gt;また GROUP BY で複数のカラムを指定してグルーピンクすることも可能です。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の GROUP BY と HAVING 4&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルから誕生日の年ごと、性別ごとでグルーピングした学生の人数を知りたい場合、次のように取得することができます。&lt;br&gt;&lt;br&gt;GROUP BY の後にまずは birth_year というエイリアス名を指定して誕生年でグルーピングし、次に gender でグルーピングしています。&lt;br&gt;&lt;br&gt;COUNT(*) で、グループごとのレコードの数を取得できます。&lt;br&gt;&lt;br&gt;SELECT      YEAR(birthday) AS birth_year,&lt;br&gt;            gender,&lt;br&gt;            COUNT(*) AS student_count&lt;br&gt;FROM        students&lt;br&gt;GROUP BY    birth_year,&lt;br&gt;            gender;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の GROUP BY と HAVING 5&lt;br&gt;&lt;br&gt;birth_year と gender でグループ化されて、それぞれのグループの学生の数が取得できていますね。&lt;br&gt;&lt;br&gt;エイリアスを使わず、GROUP BY YEAR(birthday), gender; としても同じ結果になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;HAVING でグループの条件を指定する&lt;br&gt;GROUP BY 句と一緒に使われて、結果セットに含めるグループの条件を指定できるのが、HAVING 句です。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほど、students テーブルから誕生日の年ごと、性別ごとでグルーピングした学生の人数を取得しました。&lt;br&gt;&lt;br&gt;その時に学生の数が二人以上存在するグループのみを取得したいような時は、HAVING を使って次のように指定することができます。&lt;br&gt;&lt;br&gt;SELECT      YEAR(birthday) AS birth_year,&lt;br&gt;            gender,&lt;br&gt;            COUNT(*) AS student_count&lt;br&gt;FROM        students&lt;br&gt;GROUP BY    birth_year,&lt;br&gt;            gender&lt;br&gt;HAVING		student_count &gt; 1;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の GROUP BY と HAVING 6&lt;br&gt;&lt;br&gt;学生の数が二人以上存在するグループのみが取得できていますね。&lt;br&gt;&lt;br&gt;こちらもエイリアスを使わず、HAVING COUNT(*) &gt; 1 としても同じ結果になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の GROUP BY と HAVING についてご説明しました。</description><pubDate>Tue, 03 Aug 2021 09:38:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の DISTINCT</title><link>https://mysql.sql55.com/sql/mysql-distinct.php</link><description>MySQL の DISTINCT&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の DISTINCT についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;MySQL の DISTINCT の使い方&lt;br&gt;SELECT 文の SELECT に続いて DISTINCT と指定することで、結果セットで値が重複するものを削除し、ユニークなレコードのみを取得することができます。&lt;br&gt;&lt;br&gt;SELECT 	DISTINCT&lt;br&gt;        カラム名1,&lt;br&gt;        カラム名2,&lt;br&gt;        ...&lt;br&gt;FROM 	テーブル名&lt;br&gt;NULL もひとつの値のように扱われ、結果セットに含まれます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、DISTINCT を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の DISTINCT 1&lt;br&gt;&lt;br&gt;&lt;br&gt;students テーブルの gender カラムに保存されている、ユニークな値を取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT  DISTINCT&lt;br&gt;		gender&lt;br&gt;FROM 	students;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の DISTINCT 2&lt;br&gt;&lt;br&gt;students テーブルの gender カラムには M と F という値が存在していることがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;次は複数のカラムの DISTINCT なレコードを取得してみます。&lt;br&gt;&lt;br&gt;MySQL の YEAR()関数を使うと、日付の年だけが取得できます。&lt;br&gt;&lt;br&gt;その関数を使って、students テーブルから、性別と生まれ年のレコード取得すると次のようになります。&lt;br&gt;&lt;br&gt;SELECT  gender,&lt;br&gt;        YEAR(birthday) AS birth_year&lt;br&gt;FROM 	students&lt;br&gt;ORDER BY gender,&lt;br&gt;		 birth_year;&lt;br&gt;MySQL の DISTINCT 3&lt;br&gt;&lt;br&gt;&lt;br&gt;これに DISTINCT を追加すると重複データが削除され、性別と生まれ年のユニークなレコード取得が取得できます。&lt;br&gt;&lt;br&gt;SELECT  DISTINCT&lt;br&gt;		gender,&lt;br&gt;        YEAR(birthday) AS birth_year&lt;br&gt;FROM 	students&lt;br&gt;ORDER BY gender,&lt;br&gt;		 birth_year;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の DISTINCT 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の DISTINCT についてご説明しました。</description><pubDate>Fri, 30 Jul 2021 08:16:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の EXISTS / NOT EXISTS</title><link>https://mysql.sql55.com/sql/mysql-exists.php</link><description>MySQL の EXISTS / NOT EXISTS&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の EXISTS と NOT EXISTS についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の EXISTS の使い方&lt;br&gt;MySQL の NOT EXISTS の使い方&lt;br&gt;MySQL の EXISTS の使い方&lt;br&gt;MySQL の EXISTS はサブクエリーと一緒に使って、そのサブクエリーがひとつでも行を返したら 1 (True)、返さなければ 0  (False) を返します。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	テーブル名&lt;br&gt;WHERE 	EXISTS&lt;br&gt;        (サブクエリー);&lt;br&gt;EXISTS の名前の通り、データの存在チェックに使えます。&lt;br&gt;&lt;br&gt;サブクエリーに行が存在するかがポイントなので、サブクエリーの SELECT 文の SELECT 句には SELECT 1 や SELECT カラム名 としても無視されて同じ結果になりますが、通常は SELECT * が使われます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、EXISTS を使ってデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような students と exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の EXISTS / NOT EXISTS 1&lt;br&gt;&lt;br&gt;MySQL の EXISTS / NOT EXISTS 2&lt;br&gt;&lt;br&gt;student_id が students テーブルの主キーカラムで、exam_results の外部キーカラムです。&lt;br&gt;&lt;br&gt;&lt;br&gt;exam_results テーブルにレコードが存在する students テーブルのレコードを取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students AS s&lt;br&gt;WHERE 	EXISTS&lt;br&gt;		(SELECT *&lt;br&gt;         FROM 	exam_results AS er&lt;br&gt;         WHERE 	er.student_id = s.student_id);&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の EXISTS / NOT EXISTS 3&lt;br&gt;&lt;br&gt;exam_results テーブルには student_id 1 ~ 5 が存在しているので、student_id が 1 ~ 5 の学生のレコードが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の NOT EXISTS の使い方&lt;br&gt;MySQL の NOT EXISTS もサブクエリーと一緒に使って、EXISTS の反対で、そのサブクエリーがひとつでも行を返したら 0 (False)、返さなければ 1 (True) を返します。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	テーブル名&lt;br&gt;WHERE 	NOT EXISTS&lt;br&gt;        (サブクエリー);&lt;br&gt;サブクエリーにデータが存在していないことを確認するのに使えます。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT EXISTS と同じようなことが NOT IN をつかってもできます。&lt;br&gt;&lt;br&gt;ですが、NOT IN の場合は「NOT IN を使う時は NULL に注意！」でご説明したように、NULL に気をつけないといけません。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT IN ではひと工夫が必要だった、exam_results テーブルに student_id が存在しない students テーブルのデータを、NOT EXISTS を使って取得してみます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students AS s&lt;br&gt;WHERE 	NOT EXISTS&lt;br&gt;		(SELECT *&lt;br&gt;         FROM 	exam_results AS er&lt;br&gt;         WHERE 	er.student_id = s.student_id);&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の EXISTS / NOT EXISTS 4&lt;br&gt;&lt;br&gt;exam_results テーブルに存在していない student_id = 6 の学生のレコードが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の EXISTS と NOT EXISTS についてご説明しました。&lt;br&gt;</description><pubDate>Thu, 29 Jul 2021 09:02:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のエイリアス</title><link>https://mysql.sql55.com/sql/mysql-alias.php</link><description>MySQL のエイリアス&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL のエイリアスについてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL のカラムエイリアス&lt;br&gt;MySQL のテーブルエイリアス&lt;br&gt;MySQL のカラムエイリアス&lt;br&gt;エイリアスというのは「別名」のことで、MySQL では、テーブルやカラムにエイリアスをつけて、クエリーを読みやすくしたり、わかりやすくすることができます。&lt;br&gt;&lt;br&gt;まずは、MySQL のカラムエイリアスについて見ていきましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 文でカラムにエイリアスをつけるには、次のようにします。&lt;br&gt;&lt;br&gt;SELECT	カラム名 AS エイリアス名&lt;br&gt;FROM 	テーブル名;&lt;br&gt;&lt;br&gt;AS は必須ではありませんが、間違いが減るため、MySQL の本家のサイトでもつけるのが推奨されています。&lt;br&gt;&lt;br&gt;エイリアス名は WHERE句では使えませんが、GROUP BY、ORDER BY、HAVING 句では使うことができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは実際にカラムエイリアスを使ってみます。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL のエイリアス 1&lt;br&gt;&lt;br&gt;&lt;br&gt;first_name とlast_name をつなげて、そのカラムに full_name というエイリアスをつけて、full_name で並べ替えたい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	CONCAT(first_name, &quot; &quot;, last_name) AS full_name &lt;br&gt;FROM 	students&lt;br&gt;ORDER BY full_name;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のエイリアス 2&lt;br&gt;&lt;br&gt;文字列をつなげるのに CONCAT() 関数を使っているので、エイリアスをつけないと次のようなカラム名になってしまいます。&lt;br&gt;&lt;br&gt;MySQL のエイリアス 3&lt;br&gt;&lt;br&gt;そのカラムに AS full_name とエイリアスをつけることでわかりやすくなっています。&lt;br&gt;&lt;br&gt;また、ORDER BY でそのエイリアス名を使って並び替えもできています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL のテーブルエイリアス&lt;br&gt;MySQL のテーブルにもエイリアスをつけることができます。&lt;br&gt;&lt;br&gt;SELECT	エイリアス名.カラム名1,&lt;br&gt;        エイリアス名.カラム名2&lt;br&gt;FROM 	テーブル名 AS エイリアス名;&lt;br&gt;こちらも、AS は必須ではありません。&lt;br&gt;&lt;br&gt;結合したり、クエリーの中にテーブルが二個以上出てくる時はエイリアスをつけたほうが良いです。&lt;br&gt;&lt;br&gt;結合した際などに、ひとつのテーブルにしか存在しないカラムは、テーブル名.カラム名 のように指定しなくても大丈夫ですが、複数のテーブルに存在するカラム名には テーブル名.カラム名 と指定するか、テーブルエイリアス名.カラム名のように指定する必要があります。&lt;br&gt;&lt;br&gt;そんな時にテーブルエイリアスをつけることによって、クエリーが読みやすくなります。&lt;br&gt;&lt;br&gt;&lt;br&gt;では、テーブルエイリアスを使ってみましょう。&lt;br&gt;&lt;br&gt;次のような exams と exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL のエイリアス 4&lt;br&gt;&lt;br&gt;MySQL のエイリアス 5&lt;br&gt;&lt;br&gt;&lt;br&gt;students テーブルとこれらのテーブルを JOIN して学生の名前、テストの名前、スコアなどを取得するには、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	s.student_id,&lt;br&gt;		s.first_name,&lt;br&gt;        e.exam_name_en,&lt;br&gt;        er.score&lt;br&gt;FROM 	exam_results AS er&lt;br&gt;			INNER JOIN students AS s&lt;br&gt;				ON er.student_id = s.student_id&lt;br&gt;			INNER JOIN exams AS e&lt;br&gt;				ON er.exam_id = e.exam_id&lt;br&gt;ORDER BY s.student_id;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL のエイリアス 6&lt;br&gt;&lt;br&gt;それぞれのテーブルにエイリアスをつけることでクエリーが読みやすくなっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;ちなみに、同じクエリーをエイリアスを使わないで書くと次のようになります。&lt;br&gt;&lt;br&gt;MySQL のエイリアス 7&lt;br&gt;&lt;br&gt;ひとつのテーブルにしか存在しないカラム名は テーブル名.カラム名 とする必要はありませんが、それを除いてもエイリアスを使ったクエリーのほうが読みやすくなっていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のエイリアスについてご説明しました。&lt;br&gt;</description><pubDate>Tue, 27 Jul 2021 07:40:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の ORDER BY</title><link>https://mysql.sql55.com/sql/mysql-order-by.php</link><description>MySQL の ORDER BY&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の ORDER BY についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の ORDER BY で結果セットを並べ替える&lt;br&gt;ORDER BY で結果セットを降順に並べ替える&lt;br&gt;複数カラムでの並べ替えと、ENUM カラムのソート順について&lt;br&gt;MySQL の ORDER BY で結果セットを並べ替える&lt;br&gt;MySQL で結果セットのレコードの順番を並べ替えたい時には ORDER BY を使って並べ替えることができます。&lt;br&gt;&lt;br&gt;SELECT 文で ORDER BY カラム名 のように指定すると、そのカラム名の値で結果セットのレコードが並べ替えられます。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の ORDER BY 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルのレコードを、first_name のアルフベット順に並べ替えて取得するには次のようにします。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;ORDER BY first_name;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ORDER BY 2&lt;br&gt;&lt;br&gt;students テーブルのレコードが first_name のアルフベット順にソートされて、取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;ORDER BY で結果セットを降順に並べ替える&lt;br&gt;ORDER BY カラム名 と指定すると、デフォルトでは結果セットがカラムの値の昇順でソートされます。&lt;br&gt;&lt;br&gt;カラムの値の降順で並べ替えたい時には ORDER BY カラム名 DESC のように、カラム名に続けて DESC を指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、students テーブルのレコードを、誕生日の遅い人から順番に並べ替えたい場合は、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;ORDER BY birthday DESC;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ORDER BY 3&lt;br&gt;&lt;br&gt;students テーブルのレコードが birthday の降順でソートされていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;複数カラムでの並べ替えと、ENUM カラムのソート順について&lt;br&gt;ここまで、ひとつのカラムを指定して、結果セットを並べ替えしてきましたが、複数のカラム名を指定して並べ替えることも可能です。&lt;br&gt;&lt;br&gt;その場合は ORDER BY カラム名1, カラム名2, カラム名3, ... のようにカラムをカンマで区切って続けます。&lt;br&gt;&lt;br&gt;このように指定すると、結果セットがまずは カラム名1 の昇順、次にカラム名2 の昇順、、、のようにレコードが並べ替えされます。&lt;br&gt;&lt;br&gt;降順にしたい場合は、降順にしたいカラム名の直後に DESC をつけます。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、students テーブルのレコードを、性別 (M or F) を降順で並べた後に、first_name で並べ替えたい場合は、次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;ORDER BY gender DESC,&lt;br&gt;		 first_name;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の ORDER BY 4&lt;br&gt;&lt;br&gt;students テーブルのレコードが、まず gender でソートされ、次に first_name でソートされています。&lt;br&gt;&lt;br&gt;&lt;br&gt;ここで、注意したいのは、gender がアルファベット順の降順になっていないところです。&lt;br&gt;&lt;br&gt;これは gender のデータ型が ENUM (&#039;M&#039;,&#039;F&#039;) だからで、ENUM のカラムは定義したインデックス順が昇順となります。&lt;br&gt;&lt;br&gt;ですので、昇順が M, F / 降順が F, M になるため、F が先にきています。&lt;br&gt;&lt;br&gt;ENUM のカラムを定義する際に ENUM (&#039;F&#039;,&#039;M&#039;) のようにアルファベット順で指定しておくか、ORDER BY で VARCHAR などにキャストすることで、ENUM カラムの値もアルファベット順にならべることができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の ORDER BY についてご説明しました。</description><pubDate>Mon, 26 Jul 2021 08:00:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の LIKE</title><link>https://mysql.sql55.com/sql/mysql-like.php</link><description>MySQL の LIKE&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の LIKE と NOT LIKE 演算子についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の LIKE 演算子&lt;br&gt;MySQL の LIKE 演算子の基本&lt;br&gt;MySQL の LIKE で 前方一致検索&lt;br&gt;MySQL の LIKE で 後方一致検索&lt;br&gt;MySQL の LIKE で 部分一致検索&lt;br&gt;MySQL の NOT LIKE 演算子&lt;br&gt;MySQL の LIKE 演算子&lt;br&gt;MySQL の LIKE 演算子は、パターンにマッチする時に 1 (True) を返す演算子です。&lt;br&gt;&lt;br&gt;WHERE 句 など、boolean(ブーリアン)を返す式が必要な箇所で LIKE 演算子を使うことによって、パターンにマッチする値をもつレコードを取得することができます。&lt;br&gt;&lt;br&gt;MySQL の LIKE 演算子の基本&lt;br&gt;MySQL の LIKE 演算子は次のような構文で使用し、[A] が指定したパターンにマッチする場合は 1 (TRUE) を、そうでなければ 0 (FALSE) を返します。&lt;br&gt;&lt;br&gt;[A] LIKE パターン [ESCAPE &#039;エスケープ文字&#039;]&lt;br&gt;&lt;br&gt;パターンの部分で一番良く使うワイルドカード文字は % で、0 以上の文字列にマッチします。&lt;br&gt;&lt;br&gt;ワイルドカード文字 _（アンダースコア）は、任意の 1 文字にマッチします。&lt;br&gt;&lt;br&gt;&lt;br&gt;[ESCAPE &#039;エスケープ文字&#039;] の部分はオプショナルです。&lt;br&gt;&lt;br&gt;エスケープ文字は、値の中に % や _ が入っている時にマッチさせたい時に使えます。&lt;br&gt;&lt;br&gt;デフォルトのエスケープ文字は \ で、例えば % 1 文字にマッチさせたい時は \% のように指定します。&lt;br&gt;&lt;br&gt;他の文字をエスケープ文字列にしたい時に ESCAPE &#039;エスケープ文字&#039; でエスケープ文字を指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の LIKE で 前方一致検索&lt;br&gt;LIKE 演算子を使って、前方一致で検索したい時は [A] LIKE &#039;文字列%&#039; のように指定します。&lt;br&gt;&lt;br&gt;それでは LIKE 演算子を使って前方一致検索をしてみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の LIKE 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルから first_name が Y で始まる学生のデータを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	first_name LIKE &#039;Y%&#039;;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIKE 2&lt;br&gt;&lt;br&gt;first_name が Y で始まる学生のデータが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の LIKE で 後方一致検索&lt;br&gt;LIKE 演算子を使って、後方一致で検索したい時は [A] LIKE &#039;%文字列&#039; のように指定します。&lt;br&gt;&lt;br&gt;例えば、students テーブルから first_name が a で終わる学生のデータを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	first_name LIKE &#039;%a&#039;;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIKE 3&lt;br&gt;&lt;br&gt;first_name が a で終わる学生のデータが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の LIKE で 部分一致検索&lt;br&gt;LIKE 演算子を使って、部分一致で検索したい時は [A] LIKE &#039;%文字列%&#039; のように指定します。&lt;br&gt;&lt;br&gt;例えば、students テーブルから first_name に u が入っている学生のデータを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	first_name LIKE &#039;%u%&#039;;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIKE 4&lt;br&gt;&lt;br&gt;first_name に u が入っている学生のデータが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の NOT LIKE 演算子&lt;br&gt;MySQL の NOT LIKE 演算子は LIKE 演算子と反対で、パターンにマッチしない時に 1 (True) を返す演算子です。&lt;br&gt;&lt;br&gt;[A] NOT LIKE パターン [ESCAPE &#039;エスケープ文字&#039;]&lt;br&gt;&lt;br&gt;例えば、students テーブルから first_name に u が入っていない学生のデータを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	first_name NOT LIKE &#039;%u%&#039;;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIKE 5&lt;br&gt;&lt;br&gt;first_name に u が入っていない学生のデータが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT LIKE 演算子を使う時は、[A] が NULL の時はパターンにマッチしていなくても、評価結果は 1 (True) にはならず NULL になるのでご注意ください。&lt;br&gt;&lt;br&gt;例えば、middle_name に u が入っていない学生のデータを取得したいとします。&lt;br&gt;&lt;br&gt;ですが、次のように WHERE 句 で指定してしまうと、全員 middle_name に u が入ってないのに、middle_name が NULL のため、結果セットは 0 レコードになります。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	middle_name NOT LIKE &#039;%u%&#039;;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の LIKE 6&lt;br&gt;&lt;br&gt;&lt;br&gt;こういう時は、NOT LIKE の条件式に続けて OR middle_name IS NULL を追加するか、 IFNULL(middle_name, &#039;&#039;) や COALESCE(middle_name, &#039;&#039;) などで NULL の時は空白文字列に変換してから NOT LIKE を使う必要があります。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の LIKE と NOT LIKE 演算子についてご説明しました。&lt;br&gt;</description><pubDate>Wed, 21 Jul 2021 08:41:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の BETWEEN</title><link>https://mysql.sql55.com/sql/mysql-between.php</link><description>MySQL の BETWEEN&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の BETWEEN と NOT BETWEEN 演算子についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の BETWEEN 演算子&lt;br&gt;MySQL の NOT BETWEEN 演算子&lt;br&gt;BETWEEN を使う時は NULL に注意！&lt;br&gt;MySQL の BETWEEN 演算子&lt;br&gt;MySQL の BETWEEN 演算子は次のような構文で使用し、[A] が [B] と [C] の範囲内にある場合は 1 (TRUE) を、そうでなければ 0 (FALSE) を返す演算子です。&lt;br&gt;&lt;br&gt;[A] BETWEEN [B] AND [C]&lt;br&gt;意味的には [B] &lt;= [A] AND [A] &lt;= [C] と同じで、範囲は [B] と [C] を含みます。&lt;br&gt;&lt;br&gt;WHERE 句 や CASE WHEN の条件文など、boolean(ブーリアン)を返す式が必要な箇所で使えます。&lt;br&gt;&lt;br&gt;&lt;br&gt;BETWEEN 演算子を使ってテーブルからデータを取得してみましょう。&lt;br&gt;&lt;br&gt;例えば、次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の BETWEEN 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルから student_id が 2 ~ 5 の学生のデータのみを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id BETWEEN 2 AND 5;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の BETWEEN 2&lt;br&gt;&lt;br&gt;student_id が 2 ~ 5 の学生のデータのみが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の NOT BETWEEN 演算子&lt;br&gt;MySQL の NOT BETWEEN 演算子は次のような構文で使用し、[A] が [B] ~ [C] の範囲に入っていなければ、1 (TRUE) を、そうでなければ 0 (FALSE) を返す演算子です。&lt;br&gt;&lt;br&gt;[A] NOT BETWEEN [B] AND [C]&lt;br&gt;BETWEEN を反対にしたもので、意味的には [A] &lt; [B] OR [C] &lt; [A] と同じです。&lt;br&gt;&lt;br&gt;ですので、[A] が [B] や [C] の時は 0 (FALSE) になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT BETWEEN 演算子を使ってテーブルからデータを取得してみましょう。&lt;br&gt;&lt;br&gt;先ほどとは反対に students テーブルから student_id が 2 ~ 5 ではない学生のデータのみを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id NOT BETWEEN 2 AND 5;&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の BETWEEN 3&lt;br&gt;&lt;br&gt;student_id が 2 ~ 5 ではない学生のデータが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;BETWEEN を使う時は NULL に注意！&lt;br&gt;BETWEEN 演算子を使う時は、[B] か [C] が NULL になると、評価の結果が全部 UNKNOWN となり、True になることはないので注意が必要です。&lt;br&gt;&lt;br&gt;具体的な例をあげてご説明します。&lt;br&gt;&lt;br&gt;例えば、@student_id_from と @student_id_to をクライアントプログラムから受け取って、次のクエリーを実行するとします。&lt;br&gt;&lt;br&gt;@student_id_from が 2 でも @student_id_to が NULL の場合は、student_id が 2 以上のレコードを返すのではなく、結果セットは何も返ってきません。&lt;br&gt;&lt;br&gt;SET @student_id_from = 2, @student_id_to = NULL;&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id BETWEEN @student_id_from AND @student_id_to;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の BETWEEN 4&lt;br&gt;&lt;br&gt;&lt;br&gt;これは、2 &lt;= student_id AND student_id &lt;= NULL と同等なためで、student_id &lt;= NULL が UNKNOWN になり、UNKNOWN との AND は UNKNOWN となるためです。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT BETWEEN になると少し状況が違って、2 より小さい student_id を持つ学生のレコードが取得できます。&lt;br&gt;&lt;br&gt;SET @student_id_from = 2, @student_id_to = NULL;&lt;br&gt;&lt;br&gt;SELECT 	* &lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id NOT BETWEEN @student_id_from AND @student_id_to;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の BETWEEN 5&lt;br&gt;&lt;br&gt;&lt;br&gt;これは、student_id &lt; 2 OR NULL &lt; student_id と同等なためで、NULL &lt; student_id の評価結果が UNKNOWN でも、OR 演算子なので student_id &lt; 2 の評価結果は 1 (TRUE) となるためです。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の BETWEEN と NOT BETWEEN 演算子についてご説明しました。&lt;br&gt;</description><pubDate>Tue, 20 Jul 2021 06:57:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の IN / NOT IN</title><link>https://mysql.sql55.com/sql/mysql-in-operator.php</link><description>MySQL の IN / NOT IN&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の IN と NOT IN 演算子についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の IN 演算子&lt;br&gt;MySQL の NOT IN 演算子&lt;br&gt;NOT IN を使う時は NULL に注意！&lt;br&gt;MySQL の IN 演算子&lt;br&gt;MySQL の IN 演算子は次のような構文で使用し、[A] がカッコ内の要素のいずれかに等しければ True を返す演算子です。&lt;br&gt;&lt;br&gt;[A] IN ([B], [C], ..)&lt;br&gt;意味的には [A] = [B] OR [A] = [C] OR ... と同じです。&lt;br&gt;&lt;br&gt;括弧の中にサブクエリーを指定することもできます。その時は結果セットがひとつのカラムを返すようにしなければなりません。&lt;br&gt;&lt;br&gt;&lt;br&gt;IN 演算子を使ってテーブルからデータを取得してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルから student_id が 1, 3, 5 の学生のデータのみを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id IN (1, 3, 5);&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 2&lt;br&gt;&lt;br&gt;student_id が 1, 3, 5 の学生のデータのみが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;続いて、IN 演算子の括弧の中にサブクエリーを指定してみましょう。&lt;br&gt;&lt;br&gt;次のような exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 3&lt;br&gt;&lt;br&gt;&lt;br&gt;性別が男性 (gender = &#039;M&#039;) の student_id の exam_results テーブルのレコードのみを取得したいとします。&lt;br&gt;&lt;br&gt;そんな時は、まだ習っていない JOIN （結合）を使うことが多いですが、IN 演算子とサブクエリーでもデータを取得することができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;性別が男性の student_id の exam_results テーブルのレコードを取得するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	student_id IN &lt;br&gt;		(SELECT student_id&lt;br&gt;         FROM 	students&lt;br&gt;         WHERE 	gender = &#039;M&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 4&lt;br&gt;&lt;br&gt;男性の学生の student_id は 1, 4, 6 なので、exam_results にレコードのある student_id が 1 と 4 のレコードが取得できました。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL の NOT IN 演算子&lt;br&gt;MySQL の NOT IN 演算子は次のような構文で使用し、[A] がカッコ内の要素のどれにも等しくなければ True を返す演算子です。&lt;br&gt;&lt;br&gt;[A] NOT IN ([B], [C], ..)&lt;br&gt;意味的には [A] &lt;&gt; [B] AND [A] &lt;&gt; [C] AND ... と同じです。&lt;br&gt;&lt;br&gt;IN と同様に括弧の中にサブクエリーを指定することもできます。その時は結果セットがひとつのカラムを返すようにしなければなりません。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT IN 演算子を使ってテーブルからデータを取得してみましょう。&lt;br&gt;&lt;br&gt;先ほどとは反対に students テーブルから student_id が 1, 3, 5 以外の学生のデータのみを取得したい時は次のようにできます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	students&lt;br&gt;WHERE 	student_id NOT IN (1, 3, 5);&lt;br&gt;&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 5&lt;br&gt;&lt;br&gt;student_id が 1, 3, 5 以外の学生のデータのみが取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどとは反対に性別が男性以外の student_id の exam_results テーブルのレコードを取得するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	exam_results&lt;br&gt;WHERE 	student_id NOT IN &lt;br&gt;		(SELECT student_id&lt;br&gt;         FROM 	students&lt;br&gt;         WHERE 	gender = &#039;M&#039;);&lt;br&gt;[実行結果]&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 6&lt;br&gt;&lt;br&gt;男性ではない学生の student_id は 2, 3, 5 なので、exam_results にレコードのある student_id が 2, 3, 5 のレコードが取得できています。&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT IN を使う時は NULL に注意！&lt;br&gt;NOT IN 演算子を使う時は、括弧の中の値にひとつでも NULL が存在すると、NOT IN の条件式が True にならないので注意が必要です。&lt;br&gt;&lt;br&gt;具体的な例をあげてご説明します。&lt;br&gt;&lt;br&gt;例えば、exam_results テーブルに student_id が存在しない students テーブルのデータ取得したいとします。&lt;br&gt;&lt;br&gt;ぱっと考えると以下のクエリーで取得できそうな気がしてしまいます。&lt;br&gt;&lt;br&gt;SELECT	*&lt;br&gt;FROM	students&lt;br&gt;WHERE	student_id NOT IN &lt;br&gt;		(SELECT student_id &lt;br&gt;		 FROM	exam_results);&lt;br&gt;&lt;br&gt;ですが、このクエリーを実行してみると、取得されたレコード数は 0 です。&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 7&lt;br&gt;&lt;br&gt;&lt;br&gt;これは exam_results に以下のように student_id が NULL のレコードが存在しているためです。&lt;br&gt;&lt;br&gt;MySQL の IN / NOT IN 8&lt;br&gt;&lt;br&gt;&lt;br&gt;そんな時は、サブクエリーの WHERE 句で student_id が NULL 以外のレコードを指定するか、後ほど別のページで詳しくご説明しますが NOT EXISTS や LEFT JOIN を使っても取得できます。&lt;br&gt;&lt;br&gt;SELECT	*&lt;br&gt;FROM	students&lt;br&gt;WHERE	student_id NOT IN &lt;br&gt;		(SELECT student_id &lt;br&gt;		 FROM	exam_results&lt;br&gt;         WHERE  student_id IS NOT NULL);&lt;br&gt;MySQL の IN / NOT IN 9&lt;br&gt;&lt;br&gt;&lt;br&gt;NOT IN を使う時は括弧中の値に NULL が入らないか、気をつけてお使いくださいね。&lt;br&gt;&lt;br&gt;以上、MySQL の IN と NOT IN 演算子についてご説明しました。</description><pubDate>Fri, 16 Jul 2021 08:00:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の演算子と優先順位</title><link>https://mysql.sql55.com/sql/mysql-operators.php</link><description>MySQL の演算子と優先順位&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の基本の演算子と優先順位についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の基本の比較演算子&lt;br&gt;MySQL の基本の論理演算子&lt;br&gt;MySQL の演算子の優先順位&lt;br&gt;MySQL の基本の比較演算子&lt;br&gt;MySQL で数値や文字列などを比較するのに使う、基本の比較演算子には次のようなものがあります。&lt;br&gt;&lt;br&gt;A = B（A と B が等しい）&lt;br&gt;A &lt;&gt; B（A と B が等しくない。 MySQL では != も使えますが &lt;&gt; のほうが標準です。）&lt;br&gt;A &gt; B（A より B が小さい）&lt;br&gt;A &gt;= B（A が B 以上）&lt;br&gt;A &lt; B（A より B が大きい）&lt;br&gt;A &lt;= B（A が B 以下）&lt;br&gt;比較の評価の結果は 1 (TRUE)、0 (FALSE)、または NULL のどれかになります。&lt;br&gt;&lt;br&gt;A または B、もしくは A と B 両方が NULL の時は評価の結果が NULL になります。&lt;br&gt;&lt;br&gt;&lt;=&gt; という NULL セーフの比較演算子もあり、基本的には = と同じですが、A と B の両方が NULL の時の評価の結果が 1 (TRUE) になり、片方が NULL の時に 0 (FALSE) になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の基本の論理演算子&lt;br&gt;MySQL で複数のブール式を合わせて評価する時に使われる、基本の論理演算子には次のようなものがあります。&lt;br&gt;&lt;br&gt;式1 AND 式2 （式1 と 式2 のブール式が両方が 1 (TRUE) の時に 1 (TRUE) を返す）&lt;br&gt;式1 OR 式2 （式1 と 式2 のブール式の片方が 1 (TRUE) の時に 1 (TRUE) を返す）&lt;br&gt;式1 XOR 式2（式1 と 式2 のブール式の結果が同じ時は 0 (FALSE)、違う時は 1 (TRUE) を返す）&lt;br&gt;NOT 式（式が 1 (TRUE) の時に 0 (FALSE) を返し、0 (FALSE) の時に 1 (TRUE) を返す）&lt;br&gt;&lt;br&gt;式1, 式2 が NULL になる時の動きは論理演算子によって少し違います。&lt;br&gt;&lt;br&gt;NULL の時を含んだ、それぞれの論理演算子の評価の結果は次のようになります。&lt;br&gt;&lt;br&gt;MySQL の演算子と優先順位 1&lt;br&gt;&lt;br&gt;MySQL の演算子と優先順位 2&lt;br&gt;&lt;br&gt;MySQL の演算子と優先順位 3&lt;br&gt;&lt;br&gt;MySQL の演算子と優先順位 4&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の演算子の優先順位&lt;br&gt;MySQL の演算子には優先順位があり、優先順位が高いものから順番に評価されます。&lt;br&gt;&lt;br&gt;MySQL の演算子の優先順位は次の通りです。&lt;br&gt;&lt;br&gt;INTERVAL&lt;br&gt;BINARY, COLLATE&lt;br&gt;!&lt;br&gt;- (符号の反転), ~ (ビットの反転)&lt;br&gt;^&lt;br&gt;*, /, DIV, %, MOD&lt;br&gt;-, +&lt;br&gt;&lt;&lt;, &gt;&gt;&lt;br&gt;&amp;&lt;br&gt;|&lt;br&gt;= (比較), &lt;=&gt;, &gt;=, &gt;, &lt;=, &lt;, &lt;&gt;, !=, IS, LIKE, REGEXP, IN, MEMBER OF&lt;br&gt;BETWEEN, CASE, WHEN, THEN, ELSE&lt;br&gt;NOT&lt;br&gt;AND, &amp;&amp;&lt;br&gt;XOR&lt;br&gt;OR, ||&lt;br&gt;= (代入), :=&lt;br&gt;&lt;br&gt;例えば AND より OR のほうが優先順位が高いので、「式1 OR 式2 AND 式3」の場合は 「式2 AND 式3」が先に評価されます。&lt;br&gt;&lt;br&gt;上の基本の比較・論理演算子でご紹介していない演算子は、別のページでご紹介していきたいと思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の基本の演算子と優先順位についてをご説明しました。</description><pubDate>Mon, 12 Jul 2021 09:13:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の SELECT の基本</title><link>https://mysql.sql55.com/sql/mysql-select.php</link><description>MySQL の SELECT の基本&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でデータを取得するのに使われる SELECT 文の基本についてご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の SELECT 文の基本&lt;br&gt;テーブルの全カラムの全レコードを取得する&lt;br&gt;テーブルの特定のカラムの全レコードを取得する&lt;br&gt;MySQL の SELECT 文の基本&lt;br&gt;MySQL でデータベースのテーブルからデータを取得には SELECT 文を使います。&lt;br&gt;&lt;br&gt;SELECT 文は上手に書くと欲しいデータを効率よく取得することができます。&lt;br&gt;&lt;br&gt;逆に下手に書くと、データの取得に時間がかかり、アプリケーションのパフォーマンスに大きく影響したりします。&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT 文には様々な句、キーワード、オプションなどが指定できますが、よく使う基本の SELECT 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;SELECT select_expr&lt;br&gt;&lt;br&gt;[ FROM table_references ] &lt;br&gt;&lt;br&gt;[ WHERE where_condition ] &lt;br&gt;&lt;br&gt;[ GROUP BY {col_name | expr | position} ] &lt;br&gt;&lt;br&gt;[ HAVING where_condition ] &lt;br&gt;&lt;br&gt;[ ORDER BY {col_name | expr | position} [ ASC | DESC ] ]&lt;br&gt;&lt;br&gt;[ LIMIT {[offset,] row_count | row_count OFFSET offset} ];&lt;br&gt;&lt;br&gt;必須なのは SELECT 句だけで、[ ] でくくられているのはオプショナルな句です。&lt;br&gt;&lt;br&gt;それぞれの句の役割をざっくり説明すると、次のような感じです。&lt;br&gt;&lt;br&gt;SELECT: 取得したいデータを指定する&lt;br&gt;FROM: データを取得したいテーブルを指定する&lt;br&gt;WHERE: データを取得する際の条件を指定する&lt;br&gt;GROUP BY: データをグループ化したいときに指定する&lt;br&gt;HAVING: データをグループ化したときの条件を指定する&lt;br&gt;ORDER BY: データのソート順を指定する (ASC: 昇順 | DESC: 降順)&lt;br&gt;LIMIT: SELECT 文の結果セットの何行目から何行分取得するか指定する&lt;br&gt;それぞれの句の具体的な使い方は、これからサンプルデータで実際にクエリーを書いて試しながら、学習していきましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;テーブルの全カラムの全レコードを取得する&lt;br&gt;それでは SELECT 文を使って、データを取得してみましょう。&lt;br&gt;&lt;br&gt;テーブルの全カラム、全レコードを取得したい時には次のクエリーで取得することができます。&lt;br&gt;&lt;br&gt;SELECT  *&lt;br&gt;FROM    テーブル名;&lt;br&gt;SELECT の次の * は、FROM で指定されているテーブルの全てのカラムのデータを取得したい時に使われます。&lt;br&gt;&lt;br&gt;&lt;br&gt;サンプルデータベースの school_db をスクリプトを実行して作った方は、次のような students テーブルができてデータが入っていると思います。&lt;br&gt;&lt;br&gt;MySQL の SELECT の基本 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルの全カラム、全レコードを取得したい時は次のクエリーで取得できます。&lt;br&gt;&lt;br&gt;SELECT  *&lt;br&gt;FROM    students;&lt;br&gt;&lt;br&gt;上のクエリーを実行すると、次のようになります。&lt;br&gt;&lt;br&gt;MySQL の SELECT の基本 2&lt;br&gt;&lt;br&gt;students テーブルの全カラム、全レコードが、テーブルのカラム順で取得できました。&lt;br&gt;&lt;br&gt;&lt;br&gt;テーブルの特定のカラムの全レコードを取得する&lt;br&gt;では、次にテーブルの全カラムではなく、特定のカラムの全レコードを取得してみましょう。&lt;br&gt;&lt;br&gt;特定のカラムのデータのみを取得したい場合は、SELECT 句でそのカラム名を指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、first_name、last_name、gender のデータのみを取得するクエリーは次のようになります。&lt;br&gt;&lt;br&gt;SELECT  first_name,&lt;br&gt;		last_name,&lt;br&gt;        gender&lt;br&gt;FROM    students;&lt;br&gt;&lt;br&gt;上のクエリーを実行すると、次のようになります。&lt;br&gt;&lt;br&gt;MySQL の SELECT の基本 3&lt;br&gt;&lt;br&gt;students テーブルの first_name、last_name、gender カラムの全レコードが取得できましたね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でデータを取得するのに使われる SELECT 文の基本についてご説明しました。</description><pubDate>Fri, 09 Jul 2021 05:59:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でテーブルの全データを削除 (TRUNCATE TABLE)</title><link>https://mysql.sql55.com/sql/mysql-truncate-table.php</link><description>MySQL でテーブルの全データを削除 (TRUNCATE TABLE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL で TRUNCATE TABLE を使ってテーブルの全データを削除する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを再生成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;TRUNCATE TABLE 文と DELETE 文の違い&lt;br&gt;TRUNCATE TABLE 文でテーブルの全データを削除する&lt;br&gt;TRUNCATE TABLE 文と DELETE 文の違い&lt;br&gt;MySQL でテーブルの全データを削除するには TRUNCATE TABLE 文を使います。&lt;br&gt;&lt;br&gt;DELETE 文を使ってもテーブルの全データを削除できますが、TRUNCATE TABLE 文と DELETE 文では次のような違いがあります。&lt;br&gt;&lt;br&gt;TRUNCATE TABLE 文はテーブルを一度削除して作り直すので、1 行ずつ削除する DELETE 文よりずっと早くデータを削除できます。&lt;br&gt;TRUNCATE TABLE 文で削除すると AUTO_INCREMENT がリセットされます。&lt;br&gt;外部キーで参照されているテーブルは TRUNCATE TABLE 文でデータを削除できません。&lt;br&gt;TRUNCATE TABLE 文を実行しても DELETE トリガーは実行されません。&lt;br&gt;TRUNCATE TABLE 文を実行した結果はデータが削除されても常に 0 rows affected になります。&lt;br&gt;&lt;br&gt;大量のデータがあるテーブルになればなるほど TRUNCATE TABLE 文と DELETE 文のデータの削除にかかる時間に大きく差が出ます。&lt;br&gt;&lt;br&gt;ですが、外部キーで参照されているテーブルの場合は、外部キーを一時的に削除するなりしない限り、DELETE 文しか使えません。&lt;br&gt;&lt;br&gt;SET FOREIGN_KEY_CHECKS = 0; で外部キーを全部無効化することによって 外部キー参照されているテーブルに対して TRUNCATE TABLE 文を実行することもできます。&lt;br&gt;&lt;br&gt;ですが、SET FOREIGN_KEY_CHECKS = 1; に戻しても、既存のデータは外部キー制約にそっているか再検証されません。&lt;br&gt;&lt;br&gt;データの整合性がなくなる原因になるかもしれないので、お気をつけください。&lt;br&gt;&lt;br&gt;&lt;br&gt;TRUNCATE TABLE 文でテーブルの全データを削除する&lt;br&gt;テーブルの全レコードを削除する、TRUNCATE TABLE 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;TRUNCATE TABLE テーブル名;&lt;br&gt;TABLE というキーワードはオプショナルです。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような、外部キーで参照されていない exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でテーブルの全データを削除 (TRUNCATE TABLE) 1&lt;br&gt;&lt;br&gt;&lt;br&gt;このテーブルの全データを、TRUNCATE TABLE を使って削除してみます。&lt;br&gt;&lt;br&gt;TRUNCATE TABLE exam_results;&lt;br&gt;&lt;br&gt;上のクエリーを実行して、exam_results テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でテーブルの全データを削除 (TRUNCATE TABLE) 2&lt;br&gt;&lt;br&gt;exam_results テーブルの全レコードが削除されています。&lt;br&gt;&lt;br&gt;TRUNCATE TABLE 文の Response は 0 row(s) affected になっていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;AUTO_INCREMENT の値も確認してみると、1 にリセットされています。&lt;br&gt;&lt;br&gt;MySQL でテーブルの全データを削除 (TRUNCATE TABLE) 3&lt;br&gt;&lt;br&gt; AUTO_INCREMENT の現在の値の確認方法が知りたい方はこちらをご覧ください。&lt;br&gt;&lt;br&gt; MySQL で現在の AUTO_INCREMENT の値を確認する&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で TRUNCATE TABLE を使ってテーブルの全データを削除する方法をご説明しました。</description><pubDate>Mon, 05 Jul 2021 07:32:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で CSV ファイルをインポートする (LOAD DATA)</title><link>https://mysql.sql55.com/query/mysql-load-data-import-csv.php</link><description>MySQL で CSV ファイルをインポートする (LOAD DATA)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL で LOAD DATA 文を使って CSV ファイルをインポートする方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;LOAD DATA の Local ファイルインポートを有効化する&lt;br&gt;CSV ファイルとデータをインポートするテーブルを準備する&lt;br&gt;LOAD DATA LOCAL INFILE 文で CSV ファイルをインポートする&lt;br&gt;&quot; &quot; で囲まれた値を持つ CSV ファイルをインポートする&lt;br&gt;LOAD DATA の Local ファイルインポートを有効化する&lt;br&gt;MySQL で CSV ファイルなどをインポートするには、後ほどご説明しますが LOAD DATA 文の INFILE を使います。&lt;br&gt;&lt;br&gt;今回は LOCAL オプションを使って、クライアント側にある CSV ファイルをインポートします。&lt;br&gt;&lt;br&gt;&lt;br&gt;LOAD DATA の Local ファイルインポートを有効化しないで、LOAD DATA LOCAL INFILE 文を実行すると、次のようなエラーになります。&lt;br&gt;&lt;br&gt;Error Code: 3948. Loading local data is disabled; this must be enabled on both the client and server sides&lt;br&gt;&lt;br&gt;Error Code: 2068. LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.&lt;br&gt;&lt;br&gt;&lt;br&gt;ここでは、LOAD DATA の Local ファイルインポートを有効化する方法をご説明します。&lt;br&gt;&lt;br&gt;まず、以下のクエリーを実行して、グローバルシステム変数の local_infile を ON にします。&lt;br&gt;&lt;br&gt;SET GLOBAL local_infile = 1;&lt;br&gt;&lt;br&gt;SHOW VARIABLES 文で現在の local_infile の設定が確認できます。&lt;br&gt;&lt;br&gt;SHOW VARIABLES LIKE &#039;local_infile&#039;;&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;次に、MySQL Workbench を一度閉じて再起動し、最初の画面の MySQL Connections のインスタンスで右クリックし [Edit Connection...] を選択します。&lt;br&gt;&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;Manage Server Connections の画面が表示されるので、 [Connection] タブの [Advanced] タブを選択します。&lt;br&gt;&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;Others: に OPT_LOCAL_INFILE=1 を追加し、Close して、いつも通りに MySQL Server に接続します。&lt;br&gt;&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;これで LOAD DATA の Local ファイルインポートが有効化できました。&lt;br&gt;&lt;br&gt;&lt;br&gt;CSV ファイルとデータをインポートするテーブルを準備する&lt;br&gt;CSV ファイルとデータをインポートするテーブルを準備します。&lt;br&gt;&lt;br&gt;以下のデータを students1.csv というファイル名で /Users/user1/Temp/ に保存しました。&lt;br&gt;&lt;br&gt;student_number,first_name,last_name,birthday,gender&lt;br&gt;S000101,Mio,Nakata,2019-06-06,F&lt;br&gt;S000102,Haruto,Nakata,2018-11-17,M&lt;br&gt;S000103,Ren,Tada,2020-04-09,M&lt;br&gt;S000104,Mio,Kato,2019-09-27,F&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;次に、データを保持するテーブルを作ります。&lt;br&gt;&lt;br&gt;csv_test_db というデータベースを作成して、students テーブルを作成するクエリーです。&lt;br&gt;&lt;br&gt;csv_test_db という名前のデータベースが既に存在する場合は削除されてしまうのでご注意ください。&lt;br&gt;&lt;br&gt;DROP DATABASE IF EXISTS csv_test_db;&lt;br&gt;CREATE DATABASE IF NOT EXISTS csv_test_db;&lt;br&gt;USE csv_test_db;&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL DEFAULT FALSE,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number),&lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 6&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;LOAD DATA LOCAL INFILE 文で CSV ファイルをインポートする&lt;br&gt;MySQL で CSV ファイルをインポートするのに、LOAD DATA 文の INFILE を使います。&lt;br&gt;&lt;br&gt;今回は LOCAL オプションを使って、クライアント側に保存されている CSV ファイルをインポートします。&lt;br&gt;&lt;br&gt;&lt;br&gt;students1.csv の CSV ファイルを students テーブルにインポートする LOAD DATA LOCAL INFILE 文は次の通りです。&lt;br&gt;&lt;br&gt;LOAD DATA LOCAL INFILE &#039;/Users/user1/Temp/students1.csv&#039; &lt;br&gt;	INTO TABLE students&lt;br&gt;	FIELDS TERMINATED BY &#039;,&#039;&lt;br&gt;	LINES TERMINATED BY &#039;\n&#039;&lt;br&gt;	IGNORE 1 ROWS&lt;br&gt;    (student_number, first_name, last_name, birthday, gender);&lt;br&gt;&lt;br&gt;1 行目 LOAD DATA LOCAL INFILE に続けて CSV ファイルのパスと名前を指定します。 Windows のパスは &#039;C:\\Temp\\students1.csv&#039; や &#039;C:/Temp/students1.csv&#039; のような感じで指定しても大丈夫です。&lt;br&gt;&lt;br&gt;2 行目 INTO TABLE の後にテーブル名を指定します。&lt;br&gt;&lt;br&gt; 3 行目 FIELDS TERMINATED BY ではフィールドの区切り文字を指定します。 今回は CSV ファイルなので &#039;,&#039; を指定しています。&lt;br&gt;&lt;br&gt;4 行目 LINES TERMINATED BY ではラインの区切り文字を指定します。 Mac なので &#039;\n&#039; を指定しています。 Windows では &#039;\r\n&#039; 指定してください。&lt;br&gt;&lt;br&gt;5 行目 IGNORE n ROWS は今回ヘッダー行があるので 1 行無視するようにしています。CSV ファイルがデータ行から始まる場合は必要ありません。&lt;br&gt;&lt;br&gt;6 行目 でデータが順番に students テーブルのどのカラムにあたるかを指定しています。CSV ファイルにテーブル全カラムの値が順番に含まれている場合は指定する必要はありません。&lt;br&gt;&lt;br&gt;&lt;br&gt;上の LOAD DATA LOCAL INFILE 文を実行して、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 7&lt;br&gt;&lt;br&gt;students1.csv ファイルに入っていたデータが students テーブルにインポートされていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;&quot; &quot; で囲まれた値を持つ CSV ファイルをインポートする&lt;br&gt;次に MySQL で &quot; &quot; で囲まれた値を持つ CSV ファイルをインポートしてみましょう。&lt;br&gt;&lt;br&gt;csv_test_db データベースに remarks カラムを追加した students2 テーブルを作成します。&lt;br&gt;&lt;br&gt;CREATE TABLE students2 (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL DEFAULT FALSE,&lt;br&gt;    remarks 		VARCHAR(100) 	NULL,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number),&lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;&lt;br&gt;以下のデータを students2.csv というファイル名で /Users/user1/Temp/ に保存しました。&lt;br&gt;&lt;br&gt;4 行目のレコードの remarks に &quot;テスト,abc&quot; という値が入っています。&lt;br&gt;&lt;br&gt;student_number,first_name,last_name,birthday,gender,remarks&lt;br&gt;S000101,Mio,Nakata,2019-06-06,F,&lt;br&gt;S000102,Haruto,Nakata,2018-11-17,M,&lt;br&gt;S000103,Ren,Tada,2020-04-09,M,&lt;br&gt;S000104,Mio,Kato,2019-09-27,F,&quot;テスト,abc&quot;&lt;br&gt;&lt;br&gt;この students2.csv の CSV ファイルを students2 テーブルにインポートするクエリーは次の通りです。&lt;br&gt;&lt;br&gt;追加で 4 行目に ENCLOSED BY で &#039;&quot;&#039; を指定しています。&lt;br&gt;&lt;br&gt;LOAD DATA LOCAL INFILE &#039;/Users/user1/Temp/students2.csv&#039; &lt;br&gt;	INTO TABLE students2&lt;br&gt;	FIELDS TERMINATED BY &#039;,&#039;&lt;br&gt;	ENCLOSED BY &#039;&quot;&#039;&lt;br&gt;	LINES TERMINATED BY &#039;\n&#039;&lt;br&gt;	IGNORE 1 ROWS (student_number, first_name, last_name, birthday, gender, remarks);&lt;br&gt;&lt;br&gt;上の LOAD DATA LOCAL INFILE 文を実行して、students2 テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL で CSV ファイルを LOAD DATA を使ってインポートする方法 8&lt;br&gt;&lt;br&gt;students2.csv ファイルに入っていたデータが students2 テーブルにインポートされています。&lt;br&gt;&lt;br&gt;4 行目のレコードの remarks カラムには、ちゃんと 「テスト,abc」という値が入っていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で LOAD DATA 文を使って CSV ファイルをインポートする方法をご説明しました。&lt;br&gt;</description><pubDate>Fri, 02 Jul 2021 22:31:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL の Safe Updates モードを無効化する方法</title><link>https://mysql.sql55.com/sql/mysql-disable-safe-updates-mode.php</link><description>MySQL の Safe Updates モードを無効化する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL の Safe Updates モードとは何かと、Safe Updates モードを無効化する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の Safe Updates モードとは？&lt;br&gt;MySQL の 現在の Safe Updates モードの ON/OFF を確認する&lt;br&gt;MySQL で Safe Updates モードをクエリーで一時的に無効化する&lt;br&gt;MySQL Workbench で Safe Updates モードをずっと無効にする&lt;br&gt;MySQL の Safe Updates モードとは？&lt;br&gt;MySQL の Safe Updates モードが ON の時は、UPDATE 文と DELETE 文で WHERE 句をつけなかったり、WHERE 句でキーカラムを使って条件分を指定しなかった時にエラーになるモードです。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、MySQL Workbench で exam_results テーブルの score &lt; 70 のレコードを削除する DELETE 文を実行すると次のようなエラーになります。&lt;br&gt;&lt;br&gt;Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -&gt; SQL Editor and reconnect.&lt;br&gt;&lt;br&gt;MySQL の Safe Updates モードを無効化する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;間違って大量のデータを更新・削除してしまうのを防ぐ機能で、Safe Updates モードのデフォルトは ON になっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の 現在の Safe Updates モードの ON/OFF を確認する&lt;br&gt;MySQL の 現在の Safe Updates モードの ON/OFF を確認するには、MySQL サーバのシステム変数一覧を表示する SHOW VARIABLES ステートメントで確認できます。&lt;br&gt;&lt;br&gt;LIKE 句に &#039;sql_safe_updates&#039; を指定します。&lt;br&gt;&lt;br&gt;SHOW VARIABLES LIKE &#039;sql_safe_updates&#039;;&lt;br&gt;MySQL の Safe Updates モードを無効化する方法 2&lt;br&gt;&lt;br&gt;現在の Safe Updates モード は ON になっています。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で Safe Updates モードをクエリーで一時的に無効化する&lt;br&gt;間違ってデータを更新・削除してしまうのを防いでくれるのはありがたいですが、WHERE 句にキー以外のカラムを指定してデータを更新・削除したい時もあると思います。&lt;br&gt;&lt;br&gt;そんな時はクエリーで Safe Updates モードを無効化することができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;Safe Updates モードを無効化するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SET sql_safe_updates = 0;&lt;br&gt;&lt;br&gt;上のクエリーを実行して、現在の Safe Updates モードの ON/OFF を確認し、もう一度 DELETE 文を実行してみます。&lt;br&gt;&lt;br&gt;MySQL の Safe Updates モードを無効化する方法 3&lt;br&gt;&lt;br&gt;Safe Updates モードが OFF になり、exam_results テーブルの score &lt; 70 のレコードを削除する DELETE 文を実行が成功しました。&lt;br&gt;&lt;br&gt;&lt;br&gt;Safe Updates モードを有効化に戻したい時は sql_safe_updates を 1 にします。&lt;br&gt;&lt;br&gt;SET sql_safe_updates = 1;&lt;br&gt;&lt;br&gt;この設定は同じコネクションの間は有効ですが、一度 MySQL Workbench を閉じて接続しなおすとまた sql_safe_updates は ON に戻ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench で Safe Updates モードをずっと無効にする&lt;br&gt;先ほどのクエリーで Safe Updates モードを OFF にする方法は一時的なものでした。&lt;br&gt;&lt;br&gt;MySQL Workbench の設定画面を使うと、Safe Updates モードをずっと無効のままにしておくことができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;メニューから Mac では [MySQL Workbench] &gt; [Preferences...] を選択します。&lt;br&gt;&lt;br&gt;Windows では [Edit] メニューにあります。&lt;br&gt;&lt;br&gt;MySQL の Safe Updates モードを無効化する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;Workbench Preferences 画面が開くので、左側で SQL Editor を選択し、一番したの 「Safe Updates (rejects UPDATEs and DELETEs with no restrictions)」のチェックボックスを OFF にして OK ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL の Safe Updates モードを無効化する方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;この状態ではまだ Safe Updates モード は ON のままで、MySQL Workbench を一度閉じて接続しなおすと Safe Updates モード が OFF になります。&lt;br&gt;&lt;br&gt;この Safe Updates モードの設定はずっと有効です。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の Safe Updates モードとは何かと、Safe Updates モードを無効化する方法をご説明しました。</description><pubDate>Fri, 02 Jul 2021 10:16:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL 複数テーブルを JOIN してデータを削除 (DELETE)</title><link>https://mysql.sql55.com/sql/mysql-delete-join.php</link><description>MySQL 複数テーブルを JOIN してデータを削除 (DELETE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL で複数のテーブルを JOIN してデータを削除 (DELETE) する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の DELETE ... JOIN 文の使い方&lt;br&gt;DELETE 文で複数のテーブルを JOIN してデータを削除する&lt;br&gt;MySQL の DELETE ... JOIN 文の使い方&lt;br&gt;MySQL でテーブルのデータを削除するには DELETE と JOIN を使います。&lt;br&gt;&lt;br&gt;基本の DELETE の構文は以下の通りでした。&lt;br&gt;&lt;br&gt;DELETE&lt;br&gt;FROM    テーブル名&lt;br&gt;WHERE   条件文;&lt;br&gt;&lt;br&gt;複数のテーブルを使って削除したい時、MySQL ではテーブルの結合は、普通の SELECT 文のように FROM 句で JOIN します。&lt;br&gt;&lt;br&gt;そして、DELETE と FROM の間に削除したいデータがあるテーブルを指定します。&lt;br&gt;&lt;br&gt;例えば、テーブル1 と テーブル2 を id というカラムで INNER JOIN して、テーブル1 のデータを削除したいのであれば次のようにできます。&lt;br&gt;&lt;br&gt;DELETE	t1&lt;br&gt;FROM 	テーブル1 AS t1&lt;br&gt;			INNER JOIN テーブル2 AS t2&lt;br&gt;				ON t1.id = t2.id&lt;br&gt;WHERE   条件文;&lt;br&gt;テーブルのエイリアスは必須ではありませんが、クエリーが読みやすくなるのでつけています。&lt;br&gt;&lt;br&gt;&lt;br&gt;DELETE 文で複数のテーブルを JOIN してデータを削除する&lt;br&gt;それでは、実際にサンプルデータを使ってテーブルを結合して値を削除してみましょう。&lt;br&gt;&lt;br&gt;次のような、students, exam_results テーブがあり、データは以下のような状態です。&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して削除 (DELETE) 1&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して削除 (DELETE) 2&lt;br&gt;&lt;br&gt;&lt;br&gt;ここで、現時点で exam_results にレコードがない students のレコードを削除したいとします。&lt;br&gt;&lt;br&gt;DELETE 文を書く前に、間違いがないようにおすすめなのは、まず削除の対象となるデータの SELECT 文を書いてみることです。&lt;br&gt;&lt;br&gt;exam_results にレコードがない students のレコードは、students テーブルと exam_results テーブルを student_id で LEFT JOIN して、exam_results テーブルの student_id が NULL のレコードを SELECT することで取得できます。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM	students AS s&lt;br&gt;			LEFT JOIN exam_results AS er&lt;br&gt;				ON s.student_id = er.student_id&lt;br&gt;WHERE 	er.student_id IS NULL;&lt;br&gt;&lt;br&gt;クエリーを実行して、削除したい対象のデータが取得できているか確認します。&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して削除 (DELETE) 3&lt;br&gt;&lt;br&gt;student_id = 6 の学生が exam_results テーブルに存在していません。&lt;br&gt;&lt;br&gt;&lt;br&gt;削除したい対象のデータが取得できていれば、この SELECT 文を元に DELETE 文を作ります。&lt;br&gt;&lt;br&gt;SELECT * 部分を DELETE に変更します。&lt;br&gt;&lt;br&gt;DELETE 	s&lt;br&gt;FROM	students AS s&lt;br&gt;			LEFT JOIN exam_results AS er&lt;br&gt;				ON s.student_id = er.student_id&lt;br&gt;WHERE 	er.student_id IS NULL;&lt;br&gt;&lt;br&gt;WHERE 句の条件文に students テーブルのキーカラムが使われていないので、Safe Updates モードが有効化されている場合はエラーになります。&lt;br&gt;&lt;br&gt;その場合は、次のクエリーでSafe Updates モードを無効化してから DELETE 文を実行します。&lt;br&gt;&lt;br&gt;SET sql_safe_updates = 0;&lt;br&gt; MySQL の Safe Updates モードとは何かと、Safe Updates モードを無効化する方法が知りたい方はこちらをご覧ください。&lt;br&gt;&lt;br&gt; MySQL の Safe Updates モードを無効化する方法&lt;br&gt;&lt;br&gt;&lt;br&gt;上の Safe Updates モードを無効化して DELETE 文を実行し、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して削除 (DELETE) 4&lt;br&gt;&lt;br&gt;student_id = 6 の学生のレコードが students テーブルから削除されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で複数のテーブルを JOIN してデータを削除 (DELETE) する方法をご説明しました。&lt;br&gt;&lt;br&gt;</description><pubDate>Fri, 02 Jul 2021 10:14:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL 複数テーブルを JOIN してデータを更新 (UPDATE)</title><link>https://mysql.sql55.com/sql/mysql-update-join.php</link><description>MySQL 複数テーブルを JOIN してデータを更新 (UPDATE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL で複数のテーブルを JOIN してデータを更新 (UPDATE) する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の UPDATE ... JOIN 文の使い方&lt;br&gt;UPDATE 文で複数のテーブルを JOIN してデータを更新する&lt;br&gt;MySQL の UPDATE ... JOIN 文の使い方&lt;br&gt;MySQL でテーブルのデータを更新するには UPDATE と JOIN を使います。&lt;br&gt;&lt;br&gt;基本の UPDATE の構文は以下の通りでした。&lt;br&gt;&lt;br&gt;UPDATE  テーブル1&lt;br&gt;SET     カラム名1 = 値1,&lt;br&gt;        カラム名2 = 値2,&lt;br&gt;        カラム名3 = 値3,&lt;br&gt;        ...&lt;br&gt;WHERE   条件文;&lt;br&gt;&lt;br&gt;複数のテーブルを使って更新したい時、MySQL ではテーブルの結合 (JOIN) は、UPDATE の後、SET の前に追加します。&lt;br&gt;&lt;br&gt;例えば、テーブル1 と テーブル2 を id というカラムで INNER JOIN して、テーブル1 のデータを更新したいのであれば次のようにできます。&lt;br&gt;&lt;br&gt;UPDATE 	テーブル1 AS t1&lt;br&gt;			INNER JOIN テーブル2 AS t2&lt;br&gt;				ON t1.id = t2.id&lt;br&gt;SET     t1.カラム名1 = 値1,&lt;br&gt;        t1.カラム名2 = 値2,&lt;br&gt;        t1.カラム名3 = 値3,&lt;br&gt;        ...&lt;br&gt;WHERE   条件文;&lt;br&gt;テーブルのエイリアスは必須ではありませんが、クエリーが読みやすくなるのでつけています。&lt;br&gt;&lt;br&gt;&lt;br&gt;UPDATE 文で複数のテーブルを JOIN してデータを更新する&lt;br&gt;それでは、実際にサンプルデータを使ってテーブルを結合して値を更新してみましょう。&lt;br&gt;&lt;br&gt;次のような、students, exams, exam_results テーブがあり、データは以下のような状態です。&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して更新 (UPDATE) 1&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して更新 (UPDATE) 2&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して更新 (UPDATE) 3&lt;br&gt;&lt;br&gt;&lt;br&gt;ここで、「数学１」の「男性」の学生の「スコア」を 1 点ずつ追加したいとします。&lt;br&gt;&lt;br&gt;「数学１」は exams テーブルの exam_name_jp カラム、「男性」は students テーブルの gender、更新したいのは exam_results テーブルの score です。&lt;br&gt;&lt;br&gt;&lt;br&gt;間違いがないようにおすすめなのは、まず更新の対象となるデータの SELECT 文を書いてみることです。&lt;br&gt;&lt;br&gt;SELECT 	*&lt;br&gt;FROM 	exam_results AS er&lt;br&gt;			INNER JOIN exams AS e&lt;br&gt;				ON er.exam_id = e.exam_id&lt;br&gt;			INNER JOIN students AS s&lt;br&gt;				ON er.student_id = s.student_id&lt;br&gt;WHERE   e.exam_name_jp = &#039;数学１&#039;&lt;br&gt;        AND s.gender = &#039;M&#039;;&lt;br&gt;&lt;br&gt;クエリーを実行して、更新したい対象のデータが取得できているか確認します。&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して更新 (UPDATE) 4&lt;br&gt;&lt;br&gt;&lt;br&gt;更新したい対象のデータが取得できていれば、この SELECT文を元に UPDATE 文を作ります。&lt;br&gt;&lt;br&gt;SELECT から FROM までの部分が UPDATE になって、WHERE の前に SET 句が入ります。&lt;br&gt;&lt;br&gt;UPDATE	exam_results AS er&lt;br&gt;			INNER JOIN exams AS e&lt;br&gt;				ON er.exam_id = e.exam_id&lt;br&gt;			INNER JOIN students AS s&lt;br&gt;				ON er.student_id = s.student_id&lt;br&gt;SET     er.score = er.score + 1&lt;br&gt;WHERE   e.exam_name_jp = &#039;数学１&#039;&lt;br&gt;        AND s.gender = &#039;M&#039;;&lt;br&gt;&lt;br&gt;上の UPDATE 文を実行して、もう一度上の SELECT 文を実行してテーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL 複数テーブルを JOIN して更新 (UPDATE) 5&lt;br&gt;&lt;br&gt;UPDATE 文で 2 レコード更新されて、「数学１」の「男性」の学生の score が 1 点ずつ追加されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で複数のテーブルを JOIN してデータを更新 (UPDATE) する方法をご説明しました。</description><pubDate>Fri, 02 Jul 2021 10:10:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でデータの削除 (DELETE)</title><link>https://mysql.sql55.com/sql/mysql-delete.php</link><description>MySQL でデータの削除 (DELETE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でテーブルのデータを削除 (DELETE) する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;&lt;br&gt;DELETE 文でテーブルのデータを削除する&lt;br&gt;MySQL でテーブルのデータを削除するには DELETE 文を使います。&lt;br&gt;&lt;br&gt;テーブルのレコードを更新する、基本の DELETE 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;DELETE&lt;br&gt;FROM    テーブル名&lt;br&gt;WHERE   条件文;&lt;br&gt;テーブルの条件文に合致するレコードを削除します。&lt;br&gt;&lt;br&gt;WHERE 句は必須ではありませんが、WHERE 句をつけないと、テーブルの全レコードが削除されてしまうのでお気をつけください。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは DELETE 文 を使って、テーブルのデータを削除してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブル と exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でデータの削除 (DELETE) 1&lt;br&gt;&lt;br&gt;MySQL でデータの削除 (DELETE) 2&lt;br&gt;&lt;br&gt;&lt;br&gt;students テーブルから students_id = 6 のレコードを削除するには、次のような DELETE 文で削除できます。&lt;br&gt;&lt;br&gt;DELETE&lt;br&gt;FROM    students&lt;br&gt;WHERE   student_id = 6;&lt;br&gt;&lt;br&gt;上の DELETE 文を実行して、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータの削除 (DELETE) 3&lt;br&gt;&lt;br&gt;students テーブルから students_id = 6 のレコードが削除されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;同じように students_id = 5 のレコードを削除してみましょう。&lt;br&gt;&lt;br&gt;DELETE&lt;br&gt;FROM    students&lt;br&gt;WHERE   student_id = 5;&lt;br&gt;&lt;br&gt;上の DELETE 文を実行すると次のようなエラーになります。&lt;br&gt;&lt;br&gt;MySQL でデータの削除 (DELETE) 4&lt;br&gt;&lt;br&gt;&lt;br&gt;このエラーの原因は、exam_results テーブルに外部キー制約があり students テーブルの student_id を参照していて、exam_results テーブルに student_id = 5 のデータが存在しているからです。&lt;br&gt;&lt;br&gt;こういう時は先に外部キーがついているテーブルのデータを削除してからでないと、参照されているテーブルのデータが削除できません。&lt;br&gt;&lt;br&gt;外部キーを定義する際に ON DELETE CASCADE を付けておけば、参照されているテーブル (students) のデータが削除された時に自動的に外部キーのついているテーブル (exam_results) のデータも消してくれます。ですが、私は気づかないうちにデータが削除されてしまうよりエラーが出たほうがいいので、自分でコントロールするようにしています。&lt;br&gt;&lt;br&gt;&lt;br&gt;先に外部キーのついている exam_results テーブルの student_id = 5 のレコードを削除してから、students テーブルの student_id = 5 のレコードを削除します。&lt;br&gt;&lt;br&gt;DELETE&lt;br&gt;FROM    exam_results&lt;br&gt;WHERE   student_id = 5;&lt;br&gt;&lt;br&gt;DELETE&lt;br&gt;FROM    students&lt;br&gt;WHERE   student_id = 5;&lt;br&gt;&lt;br&gt;上の DELETE 文を実行して、students と exam_results テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータの削除 (DELETE) 5&lt;br&gt;&lt;br&gt;MySQL でデータの削除 (DELETE) 6&lt;br&gt;&lt;br&gt;今度はエラーにならず、students と exam_results テーブルから students_id = 5 のレコードが削除されています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でテーブルのデータを削除 (DELETE) する方法をご説明しました。</description><pubDate>Thu, 01 Jul 2021 22:14:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でデータの更新 (UPDATE)</title><link>https://mysql.sql55.com/sql/mysql-update.php</link><description>MySQL でデータの更新 (UPDATE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でテーブルのデータを更新 (UPDATE) する方法をご説明します。&lt;br&gt;&lt;br&gt; サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。&lt;br&gt;&lt;br&gt;&lt;br&gt;UPDATE 文でテーブルのデータを更新する&lt;br&gt;MySQL でテーブルのデータを更新するには UPDATE 文を使います。&lt;br&gt;&lt;br&gt;テーブルのレコードを更新する、基本の UPDATE 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;UPDATE  テーブル名&lt;br&gt;SET     カラム名1 = 値1,&lt;br&gt;        カラム名2 = 値2,&lt;br&gt;        カラム名3 = 値3,&lt;br&gt;        ...&lt;br&gt;WHERE   条件文;&lt;br&gt;条件文に合致するレコードのカラム1 の値が値1 に、カラム2 は値2 に ... と更新されます。&lt;br&gt;&lt;br&gt;WHERE 句は必須ではありませんが、WHERE 句をつけないと、テーブルの全レコードが更新されてしまうので気をつけてくださいね。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは UPDATE 文 を使って、テーブルのデータを更新してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でデータの更新 (UPDATE) 1&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、student_id = 3 の誕生日を 2025-12-22 に、paid_flag を TRUE (1) に変更するには、次のような UPDATE 文で変更できます。&lt;br&gt;&lt;br&gt;UPDATE  students&lt;br&gt;SET     birthday = &#039;2025-12-22&#039;,&lt;br&gt;        paid_flag = TRUE&lt;br&gt;WHERE   student_id = 3;&lt;br&gt;&lt;br&gt;上の UPDATE 文を実行して、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータの更新 (UPDATE) 2&lt;br&gt;&lt;br&gt;student_id = 3 の誕生日が 2025-12-22 に、paid_flag が 1 に変更されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;続いて、カラムの値を元に、データを更新してみましょう。&lt;br&gt;&lt;br&gt;次のようなテストの点数を保持するための exam_results テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でデータの更新 (UPDATE) 3&lt;br&gt;&lt;br&gt;&lt;br&gt;exam_id = 2 のテストの score を一律に 3 点追加したいような時は次の UPDATE 文で可能です。&lt;br&gt;&lt;br&gt;UPDATE  exam_results&lt;br&gt;SET     score = score + 3&lt;br&gt;WHERE   exam_id = 2;&lt;br&gt;&lt;br&gt;上の UPDATE 文を実行して、exam_results テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータの更新 (UPDATE) 4&lt;br&gt;&lt;br&gt;exam_id = 2 のレコードの score が 3 ずつ増えていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でテーブルのデータを更新 (UPDATE) する基本的な方法をご説明しました。&lt;br&gt;</description><pubDate>Thu, 01 Jul 2021 22:13:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で他のテーブルからテーブルを作成 (CREATE TABLE ... SELECT)</title><link>https://mysql.sql55.com/sql/mysql-create-table-select.php</link><description>MySQL で他のテーブルからテーブルを作成 (CREATE TABLE ... SELECT)&lt;br&gt;&lt;br&gt; &lt;br&gt;前回「 MySQL でテーブルの作成 (CREATE TABLE) 」では、 CREATE TABLE 文を使ってテーブルを作成しました。&lt;br&gt;&lt;br&gt;今回は CREATE TABLE と SELECT を使って、他のテーブルから取得した結果セットからテーブルを作成する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の CREATE TABLE ... SELECT 文の使い方&lt;br&gt;CREATE TABLE ... SELECT 文で他のテーブルからテーブルを作成する&lt;br&gt;MySQL の CREATE TABLE ... SELECT 文の使い方&lt;br&gt;MySQL で他のテーブルから取得した結果セットからテーブルを作成するには CREATE TABLE ... SELECT 文を使います。&lt;br&gt;&lt;br&gt;[テーブル1] から SELECT で取得した結果セットから、新しいテーブル [テーブル2] を作成する CREATE TABLE ... SELECT 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;CREATE TABLE [テーブル2]&lt;br&gt;   SELECT   [カラム1],&lt;br&gt;            [カラム2],&lt;br&gt;            [カラム3],&lt;br&gt;            ...&lt;br&gt;   FROM     [テーブル1]&lt;br&gt;&lt;br&gt;SELECT 文は同じテーブルからでも、結合したテーブルからでも、集計した結果でも OK です。&lt;br&gt;&lt;br&gt;CREATE TABLE ... SELECT で生成したテーブルには、元のテーブルにあった AUTO_INCREMENT、プライマリーキーなどの制約や、インデックスなどはコピーされませんのでご注意ください。&lt;br&gt;&lt;br&gt;ここでは省略していますが、CREATE TABLE テーブル名の後に、作成するテーブルの定義を追加することも可能です。&lt;br&gt;&lt;br&gt;&lt;br&gt;他のテーブルから全カラム全レコードをコピーしたテーブルを作成したい時は次のようにできます。&lt;br&gt;&lt;br&gt;CREATE TABLE [テーブル2]&lt;br&gt;   SELECT   * &lt;br&gt;   FROM     [テーブル1]&lt;br&gt;&lt;br&gt;他のテーブルから一時テーブルを作成するには、CREATE TEMPORARY TABLE を使って次のようにします。&lt;br&gt;&lt;br&gt;CREATE TEMPORARY TABLE [テーブル2]&lt;br&gt;   SELECT   * &lt;br&gt;   FROM     [テーブル1]&lt;br&gt;&lt;br&gt;一時テーブルはそのセッション内でのみ使用可能で、セッションが閉じられた時に自動的に削除されます。&lt;br&gt;&lt;br&gt;SELECT 文の結果セットを一時的に保持しておきたい時などに便利です。&lt;br&gt;&lt;br&gt;&lt;br&gt;CREATE TABLE ... SELECT 文で他のテーブルからテーブルを作成する&lt;br&gt;それでは、CREATE TABLE ... SELECT 文を使って、他のテーブルからテーブルを作成してみましょう。&lt;br&gt;&lt;br&gt;次のような students テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL で他のテーブルからテーブルを作成 (CREATE TABLE ... SELECT) 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルのレコードのうち、男性の学生(gender = &#039;M&#039;) のレコードを持つ student_males という名前のテーブルを作成するには次のようにできます。&lt;br&gt;&lt;br&gt;CREATE TABLE student_males&lt;br&gt;	SELECT 	* &lt;br&gt;    FROM 	students&lt;br&gt;    WHERE	gender = &#039;M&#039;;&lt;br&gt;&lt;br&gt;上の CREATE TABLE ... SELECT 文を実行して、student_males テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL で他のテーブルからテーブルを作成 (CREATE TABLE ... SELECT) 2&lt;br&gt;&lt;br&gt;student_males テーブルが作成されて、students テーブルの男性の学生のレコードが入っていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;DESCRIBE 文を使って、students テーブルと student_males テーブルの構造を確認してみましょう。&lt;br&gt;&lt;br&gt;MySQL で他のテーブルからテーブルを作成 (CREATE TABLE ... SELECT) 3&lt;br&gt;&lt;br&gt;MySQL で他のテーブルからテーブルを作成 (CREATE TABLE ... SELECT) 4&lt;br&gt;&lt;br&gt;カラム名やデータ型は同じですが、プライマリーキーやユニークキー制約、AUTO_INCREMENT はコピーされていません。&lt;br&gt;&lt;br&gt;&lt;br&gt;既存のテーブルのデータから生成できるデータを保持したテーブルは、正規化を崩し、片方のテーブルのデータを更新してもう一方更新を忘れるなど、データの整合性がとれなくなる原因になります。&lt;br&gt;&lt;br&gt;ですので、この方法でできたテーブルを永久的にそのまま使うのは、あまりおすすめしません。&lt;br&gt;&lt;br&gt;一時的にデータを保持したいような時に使うのがおすすめです。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で CREATE TABLE ... SELECT を使って、他のテーブルから取得した結果セットからテーブルを作成する方法をご説明しました。&lt;br&gt;</description><pubDate>Wed, 30 Jun 2021 23:47:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で他のテーブルからデータを挿入 (INSERT ... SELECT)</title><link>https://mysql.sql55.com/sql/mysql-insert-select.php</link><description>MySQL で他のテーブルからデータを挿入 (INSERT ... SELECT)&lt;br&gt;&lt;br&gt; &lt;br&gt;前回「 MySQL でデータの挿入 (INSERT) 」では、 INSERT と VALUES を使ってテーブルにデータを挿入しました。&lt;br&gt;&lt;br&gt;今回は INSERT と SELECT を使って、他のテーブルから取得した結果セットを、別のテーブルに挿入する方法をご説明します。&lt;br&gt;&lt;br&gt;&lt;br&gt;INSERT ... SELECT で他のテーブルからデータを挿入する&lt;br&gt;MySQL で他のテーブルから取得した結果セットを、別のテーブルに挿入するには INSERT ... SELECT 文を使います。&lt;br&gt;&lt;br&gt;[テーブル2] から SELECT で取得した結果セットを [テーブル1] に挿入する INSERT ... SELECT 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;INSERT INTO [テーブル1] (&lt;br&gt;            [カラム1],&lt;br&gt;            [カラム2],&lt;br&gt;            [カラム3],&lt;br&gt;            ...&lt;br&gt;   )&lt;br&gt;   SELECT   [カラム1],&lt;br&gt;            [カラム2],&lt;br&gt;            [カラム3],&lt;br&gt;            ...&lt;br&gt;   FROM     [テーブル2]&lt;br&gt;&lt;br&gt;カラムの数と、データ型がマッチしていれば、テーブル1 と テーブル2 のカラム名は同じでなくても大丈夫です。&lt;br&gt;&lt;br&gt;挿入するデータ元の結果セットを取得する SELECT 文のほうは、WHERE 句や ORDER BY 句などがあってもかまいません。&lt;br&gt;&lt;br&gt;SELECT 文の結果セットが [テーブル1] に INSERT したいカラムとマッチしさえすれば、 データの取得は同じテーブルからでも、結合したテーブルからでも、集計した結果でも OK です。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、次のような students テーブルと students_temp テーブルがあります。&lt;br&gt;&lt;br&gt;MySQL で INSERT と SELECT を使って他のテーブルからデータを挿入する 1&lt;br&gt;&lt;br&gt;MySQL で INSERT と SELECT を使って他のテーブルからデータを挿入する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;students_temp テーブルの女性の学生 (gender = &#039;F&#039;) を students テーブルに一括で挿入したい時は次のようにできます。&lt;br&gt;&lt;br&gt;INSERT INTO students (&lt;br&gt;			student_number,&lt;br&gt;			first_name,&lt;br&gt;			last_name,&lt;br&gt;			birthday,&lt;br&gt;			gender,&lt;br&gt;            paid_flag&lt;br&gt;	)&lt;br&gt;	SELECT 	student_number,&lt;br&gt;			first_name,&lt;br&gt;			last_name,&lt;br&gt;			birthday,&lt;br&gt;			gender,&lt;br&gt;            paid_flag&lt;br&gt;	FROM 	students_temp&lt;br&gt;	WHERE 	gender = &#039;F&#039;;&lt;br&gt;&lt;br&gt;&lt;br&gt;上の INSERT ... SELECT 文を実行して、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL で INSERT と SELECT を使って他のテーブルからデータを挿入する 3&lt;br&gt;&lt;br&gt;students テーブルに students_temp テーブルの女性の学生のレコードが挿入されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で INSERT ... SELECT 文を使って、他のテーブルから取得した結果セットを、別のテーブルに挿入する方法をご説明しました。</description><pubDate>Wed, 30 Jun 2021 22:16:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でデータの挿入 (INSERT)</title><link>https://mysql.sql55.com/sql/mysql-insert.php</link><description>MySQL でデータの挿入 (INSERT)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でテーブルにデータを挿入 (INSERT) する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;INSERT 文でデータを 1 行挿入する&lt;br&gt;INSERT 文でデータを複数行挿入する&lt;br&gt;INSERT 文でデータを 1 行挿入する&lt;br&gt;MySQL でテーブルにデータを作成するには INSERT 文を使います。&lt;br&gt;&lt;br&gt;1 レコードを挿入する、基本の INSERT 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;INSERT INTO テーブル名 &lt;br&gt;        (カラム名1, カラム名2, カラム名3, ...) &lt;br&gt;    VALUES &lt;br&gt;        (値1, 値2, 値3, ...);&lt;br&gt;カラム1 に値1 が、カラム2 に値2 が、と順番に挿入されます。&lt;br&gt;&lt;br&gt;NULL のカラムや、NOT NULL でもデフォルト値の指定されているカラムや AUTO_INCREMENT が指定されているカラムは指定しなくても大丈夫です。&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは「MySQL でテーブルの作成 (CREATE TABLE)」で以下のスクリプトで生成した students テーブルに、INSERT 文を使って 1 行データを挿入してみましょう。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL DEFAULT FALSE,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number),&lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;&lt;br&gt;students テーブルに 1 行挿入するスクリプトは次の通りです。&lt;br&gt;&lt;br&gt;INSERT INTO students &lt;br&gt;		(student_number, first_name, last_name, birthday, gender)&lt;br&gt;	VALUES &lt;br&gt;		(&#039;S000001&#039;, &#039;Yuta&#039;, &#039;Tanaka&#039;, &#039;2025-01-15&#039;, &#039;M&#039;);&lt;br&gt;&lt;br&gt;student_id カラムはデータを挿入することもできますが、AUTO_INCREMENT で採番されて欲しいので指定していません。&lt;br&gt;&lt;br&gt;middle_name カラムは NULL が許可されているカラムで今回は必要ないので指定していません。&lt;br&gt;&lt;br&gt;paid_flag カラムはデフォルト値の FALSE(0) でかまわないので、指定していません。&lt;br&gt;&lt;br&gt;&lt;br&gt;SELECT * FROM テーブル名; でテーブルの全カラム全行を表示することができます。&lt;br&gt;&lt;br&gt;SELECT * FROM students;&lt;br&gt;&lt;br&gt;上の INSERT 文を実行して、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータの挿入 (INSERT) 1&lt;br&gt;&lt;br&gt;student_id が 1 で、1 行データが挿入されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;INSERT 文でデータを複数行挿入する&lt;br&gt;先ほどは INSERT 文を使って 1 行データを挿入しましたが、複数行まとめて挿入することもできます。&lt;br&gt;&lt;br&gt;複数行挿入したい時は VALUES に続けて、カンマで区切って値のセットを指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;複数行を一度に挿入する、基本の INSERT 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;INSERT INTO テーブル名 &lt;br&gt;        (カラム名1, カラム名2, カラム名3, ...) &lt;br&gt;    VALUES &lt;br&gt;        (値1-1, 値1-2, 値1-3, ...),&lt;br&gt;        (値2-1, 値2-2, 値2-3, ...),&lt;br&gt;        (値3-1, 値3-2, 値3-3, ...),&lt;br&gt;        ...&lt;br&gt;        (値n-1, 値n-2, 値n-3, ...);&lt;br&gt;&lt;br&gt;例えば、students テーブルに INSERT 文で 3 行一度に挿入するには、次のようにできます。&lt;br&gt;&lt;br&gt;INSERT INTO students &lt;br&gt;		(student_number, first_name, last_name, birthday, gender)&lt;br&gt;	VALUES &lt;br&gt;		(&#039;S000002&#039;, &#039;Sakura&#039;, &#039;Hata&#039;, &#039;2025-07-07&#039;, &#039;F&#039;),&lt;br&gt;        (&#039;S000003&#039;, &#039;Aya&#039;, &#039;Tanaka&#039;, &#039;2025-12-11&#039;, &#039;F&#039;),&lt;br&gt;        (&#039;S000004&#039;, &#039;Hiroki&#039;, &#039;Suzuki&#039;, &#039;2026-02-23&#039;, &#039;M&#039;);&lt;br&gt;&lt;br&gt;上の INSERT 文を実行して、students テーブルの中身を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータの挿入 (INSERT) 2&lt;br&gt;&lt;br&gt;student_id  が 2 ~ 4 で、3 行データが挿入されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でテーブルにデータを挿入 (INSERT) する方法をご説明しました。&lt;br&gt;</description><pubDate>Tue, 29 Jun 2021 08:24:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でテーブルの削除 (DROP TABLE)</title><link>https://mysql.sql55.com/sql/mysql-drop-table.php</link><description>MySQL でテーブルの削除 (DROP TABLE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でテーブルを削除する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;DROP TABLE でテーブルを削除する&lt;br&gt;DROP TABLE IF EXISTS でテーブルが存在すれば削除する&lt;br&gt;DROP TABLE でテーブルを削除する&lt;br&gt;MySQL でテーブルを作成するには DROP TABLE 文を使います。&lt;br&gt;&lt;br&gt;基本の DROP TABLE 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;DROP TABLE テーブル名;&lt;br&gt;テーブル名をカンマで続けて、複数のテーブルを同時に削除することもできます。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、test_db データベースに test という名前のテーブルがあります。&lt;br&gt;&lt;br&gt;MySQL でテーブルの削除 (DROP TABLE) 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この test テーブルを削除するには、test_db を選択して、次のクエリーを実行します。&lt;br&gt;&lt;br&gt;DROP TABLE test;&lt;br&gt;&lt;br&gt;上のクエリーを実行すると、MySQL Workbench の Schemas タブ の Tables から test テーブルが削除されました。&lt;br&gt;&lt;br&gt;MySQL でテーブルの削除 (DROP TABLE) 2&lt;br&gt;&lt;br&gt;&lt;br&gt;DROP TABLE IF EXISTS でテーブルが存在すれば削除する&lt;br&gt;先ほどの DROP TABLE クエリーをもう一度実行すると、削除しようとするテーブルが存在しないため、以下のように「Error Code: 1051. Unknown table &#039;test_db.test&#039;」というエラーになります。&lt;br&gt;&lt;br&gt;MySQL でテーブルの削除 (DROP TABLE) 3&lt;br&gt;&lt;br&gt;&lt;br&gt;次のように DROP TABLE に続けて IF EXISTS を指定することで、テーブルが存在する時のみ削除し、存在しなくてもエラーにならないようにすることができます。&lt;br&gt;&lt;br&gt;DROP TABLE IF EXISTS テーブル名;&lt;br&gt;削除しようとするテーブルが存在しなかった場合は Warning が生成されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;もう一度 test テーブルを作って、次のクエリーを二回実行してみます。&lt;br&gt;&lt;br&gt;DROP TABLE IF EXISTS test;&lt;br&gt;&lt;br&gt;一回目の実行で test テーブルが削除され、二回目の実行時にはエラーにならず、警告が出ていますね。&lt;br&gt;&lt;br&gt;MySQL でテーブルの削除 (DROP TABLE) 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でテーブルを削除する方法をご説明しました。</description><pubDate>Sat, 19 Jun 2021 09:33:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でカラムの追加・変更・削除 (ALTER TABLE)</title><link>https://mysql.sql55.com/sql/mysql-alter-table.php</link><description>MySQL でカラムの追加・変更・削除 (ALTER TABLE)&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL で既存のテーブルのカラムの追加・変更・削除や、制約やインデックスの追加や削除などを行うには、ALTER TABLE 文を使います。&lt;br&gt;&lt;br&gt;ここでは ALTER TABLE 文を使って、テーブルのカラムを追加・変更・削除する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;ALTER TABLE でテーブルにカラムを追加する&lt;br&gt;ALTER TABLE でテーブルのカラムを変更する&lt;br&gt;ALTER TABLE でテーブルのカラムを削除する&lt;br&gt;ALTER TABLE でテーブルにカラムを追加する&lt;br&gt;まずは、ALTER TABLE 文を使って、既存のテーブルにカラムを追加してみましょう。&lt;br&gt;&lt;br&gt;ALTER TABLE 文には CREATE TABLE 文と同様に、オプションや指定できる項目がたくさんあります。&lt;br&gt;&lt;br&gt;シンプルに ALTER TABLE を使ってテーブルに新しいカラムを追加するには、ALTER TABLE と ADD [COLUMN] を使った、次のようなスクリプトを実行します。&lt;br&gt;&lt;br&gt;ALTER TABLE テーブル名&lt;br&gt;ADD [COLUMN] カラム名 データ型 [NOT NULL | NULL];&lt;br&gt;&lt;br&gt;それでは、実際に ALTER TABLE 文を実行して、カラムを追加してみましょう。&lt;br&gt;&lt;br&gt;次のような CREATE TABLE 文で生成した students テーブルがあります。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL DEFAULT FALSE,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number),&lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;MySQL でカラムの追加・変更・削除 (ALTER TABLE) 1&lt;br&gt;&lt;br&gt;&lt;br&gt;この students テーブルにメールアドレスを保存する email という VARCHAR(30) のデータ型のカラムを追加するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;ALTER TABLE students&lt;br&gt;ADD COLUMN email VARCHAR(300) NULL;&lt;br&gt;このスクリプトを実行して、MySQL Workbench の Schemas タブをリフレッシュすると、students テーブルに email カラムが追加されているのがわかります。&lt;br&gt;&lt;br&gt;MySQL でカラムの追加・変更・削除 (ALTER TABLE) 2&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;ALTER TABLE でテーブルのカラムを変更する&lt;br&gt;MySQL で ALTER TABLE を使ってカラムを変更するには MODIFY [COLUMN]、RENAME COLUMN、CHANGE [COLUMN] などのキーワードが使えます。&lt;br&gt;&lt;br&gt;どのキーワードをどんな時に使うかは、次の通りです。&lt;br&gt;&lt;br&gt;MODIFY [COLUMN]: カラムの名前はそのままで、定義を変更したい時&lt;br&gt;RENAME COLUMN: カラムの名前のみを変更したい時&lt;br&gt;CHANGE [COLUMN]: カラムの名前と定義の両方を変更したい時&lt;br&gt;&lt;br&gt;ALTER TABLE &amp; MODIFY [COLUMN]、RENAME COLUMN、CHANGE [COLUMN] の構文は次の通りです。&lt;br&gt;&lt;br&gt;ALTER TABLE テーブル名&lt;br&gt;MODIFY [COLUMN] カラム名 新しいデータ型 [NOT NULL | NULL];&lt;br&gt;ALTER TABLE テーブル名&lt;br&gt;RENAME COLUMN カラム名 TO 新しいカラム名&lt;br&gt;ALTER TABLE テーブル名&lt;br&gt;CHANGE [COLUMN] カラム名 新しいカラム名 新しいデータ型 [NOT NULL | NULL];&lt;br&gt;CHANGE を使ってカラム名を変更しないで定義だけ変更したい時は、新しいカラム名の箇所にも現在のカラム名を指定する必要があります。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば、ALTER TABLE &amp; CHANGE を使って、先ほど students テーブルに追加した email VARCHAR(300) のカラムを、カラム名を email_address に、データ型を VARCHAR(256) に変更するには次のようにします。&lt;br&gt;&lt;br&gt;ALTER TABLE students&lt;br&gt;CHANGE COLUMN email email_address VARCHAR(256) NULL;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、email カラムの名前とデータ型が変更されました。&lt;br&gt;&lt;br&gt;MySQL でカラムの追加・変更・削除 (ALTER TABLE) 3&lt;br&gt;&lt;br&gt;&lt;br&gt;ちなみに、テーブルの定義を確認したい時は、DESCRIBE テーブル名 でテーブルの定意が表示できます。&lt;br&gt;&lt;br&gt;MySQL でカラムの追加・変更・削除 (ALTER TABLE) 4&lt;br&gt;&lt;br&gt;&lt;br&gt;ALTER TABLE でテーブルのカラムを削除する&lt;br&gt;ALTER TABLE を使って既存のテーブルからカラムを削除するには、ALTER TABLE と DROP [COLUMN] を使います。&lt;br&gt;&lt;br&gt;テーブルのカラムを削除する構文は次の通りです。&lt;br&gt;&lt;br&gt;ALTER TABLE テーブル名&lt;br&gt;DROP [COLUMN] カラム名;&lt;br&gt;&lt;br&gt;ALTER TABLE &amp; DROP を使って、先ほど students テーブルに追加した email_address カラムを削除します。&lt;br&gt;&lt;br&gt;ALTER TABLE students&lt;br&gt;DROP COLUMN email_address;&lt;br&gt;&lt;br&gt;このクエリーを実行すると、students テーブルの email_address カラムが削除されました。&lt;br&gt;&lt;br&gt;MySQL でカラムの追加・変更・削除 (ALTER TABLE) 5&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で ALTER TABLE 文を使って、テーブルのカラムを追加・変更・削除する方法をご説明しました。</description><pubDate>Sat, 19 Jun 2021 07:25:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でテーブルの作成 (CREATE TABLE)</title><link>https://mysql.sql55.com/sql/mysql-create-table.php</link><description>MySQL でテーブルの作成 (CREATE TABLE)&lt;br&gt;&lt;br&gt; &lt;br&gt;ここでは MySQL でテーブルを作成する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;CREATE TABLE で新しいテーブルを作成する&lt;br&gt;CREATE TABLE で主キー (PRIMARY KEY) 制約を指定する&lt;br&gt;CREATE TABLE でユニークキー (UNIQUE KEY) 制約を指定する&lt;br&gt;CREATE TABLE でチェック (CHECK) 制約を指定する&lt;br&gt;CREATE TABLE でカラムにデフォルト値を指定する&lt;br&gt;CREATE TABLE で外部キー (FOREIGN KEY) 制約を指定する&lt;br&gt;CREATE TABLE で新しいテーブルを作成する&lt;br&gt;MySQL で新しいテーブルを作成するには CREATE TABLE 文を使います。&lt;br&gt;&lt;br&gt;いろんなオプションが指定できますが、一番基本の CREATE 文の構文は次のようなものになります。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;   ....&lt;br&gt;);&lt;br&gt;リレーショナルデータベースでは、通常これに加えて主キーや外部キーなどの制約を追加します。&lt;br&gt;&lt;br&gt;&lt;br&gt;サンプルとして、学生の情報を保持するための students テーブルを作ってみましょう。&lt;br&gt;&lt;br&gt;次のようなカラムを持つ students テーブルを作ります。&lt;br&gt;&lt;br&gt;student_id: レコードの ID（整数型）&lt;br&gt;student_number: 学生番号（最大 10 桁の文字列型）&lt;br&gt;first_name: 下の名前（最大 50 桁の文字列型）&lt;br&gt;last_name: 名字（最大 50 桁の文字列型）&lt;br&gt;middle_name: ミドルネーム（最大 50 桁の文字列型）&lt;br&gt;birthday: 誕生日（日付型）&lt;br&gt;gender: 性別（一文字の文字列型で M: 男性、F: 女性）&lt;br&gt;paid_flag: 授業料を払ったかどうかのフラグ（BOOL 型で FALSE (0): 未払い、TRUE (1): 支払い済み）&lt;br&gt;&lt;br&gt;こちらが、カラム名、データ型、NOT NULL か NULL かを指定しただけの CREATE TABLE 文です。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL&lt;br&gt;);&lt;br&gt;これに順番に制約などを加えていきましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;CREATE TABLE で主キー (PRIMARY KEY) 制約を指定する&lt;br&gt;主キー (PRIMARY KEY) 制約はテーブルで一番大事な制約で、全テーブルに定義するべき制約です。&lt;br&gt;&lt;br&gt;主キーは、そのテーブルの各行を一意に特定するためのカラムやカラムのコンビネーションのことで、各テーブルにひとつだけ設定できます。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;MySQL のデフォルトのストレージエンジンである InnoDB では、主キーを定義すると、それをクラスター化インデックス (clustered index) として使い、データは主キー順に物理的に格納されます。&lt;br&gt;&lt;br&gt;主キーをつけるカラムやカラムのコンビネーションは、ユニークで、かつ NOT NUL のカラムでなくてはなりません。&lt;br&gt;&lt;br&gt;&lt;br&gt;CREATE TABLE で主キー (PRIMARY KEY) 制約を指定するには PRIMARY KEY キーワードを使います。&lt;br&gt;&lt;br&gt;カラムの定義に続けて指定してもいいですし、下の例のように別の行にしてカラム名を指定しても大丈夫です。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 NOT NULL PRIMARY KEY,&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;    ....&lt;br&gt;);&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 NOT NULL,&lt;br&gt;    カラム名2 データ型 NOT NULL,&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;    ....&lt;br&gt;   　PRIMARY KEY (カラム名1, カラム名2)&lt;br&gt;);&lt;br&gt;&lt;br&gt;先ほどの students テーブルの student_id カラムを主キーに指定します。&lt;br&gt;&lt;br&gt;今回はデータを挿入した時に自動的に id となる数字を採番して欲しいので、AUTO_INCREMENT 属性も一緒に指定しました。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL,&lt;br&gt;    PRIMARY KEY (student_id)&lt;br&gt;);&lt;br&gt;&lt;br&gt; &lt;br&gt;CREATE TABLE でユニークキー (UNIQUE KEY) 制約を指定する&lt;br&gt;カラムに入る値がユニークになる場合は、ユニークキー (UNIQUE KEY) 制約をつけておくと良いと思います。&lt;br&gt;&lt;br&gt;ユニークキー制約がついていると、重複した値を入れようとするとエラーになり、間違いも防ぐことができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;CREATE TABLE でユニークキー (UNIQUE KEY) 制約を指定するには UNIQUE KEY キーワードを使います。&lt;br&gt;&lt;br&gt;主キーと同様に、カラムの定義に続けて指定してもいいですし、下の例のように別の行にしてカラム名を指定しても大丈夫です。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL]　UNIQUE KEY,&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;    ....&lt;br&gt;);&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;    ....&lt;br&gt;    UNIQUE KEY (カラム名1, カラム名2)&lt;br&gt;);&lt;br&gt;&lt;br&gt;先ほどの students テーブルの student_number はユニークな値になるので、ユニークキー (UNIQUE KEY) 制約を指定しておきます。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number)&lt;br&gt;);&lt;br&gt;&lt;br&gt;CREATE TABLE でチェック (CHECK) 制約を指定する&lt;br&gt;カラムに入る値にルールがある場合はチェック (CHECK) 制約をつけておくと良いと思います。&lt;br&gt;&lt;br&gt;チェック制約がついていると、チェック制約に合わない値を入れようとするとエラーになり、想定していないデータが保存されるのを防ぐことができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;CREATE TABLE でチェック制約を指定するには CHECK キーワードを使います。&lt;br&gt;&lt;br&gt;主キーと同様に、カラムの定義に続けて指定してもいいですし、別の行にしてカラム名を指定しても大丈夫です。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL] CHECK (チェック式),&lt;br&gt;    ....&lt;br&gt;);&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;    ....&lt;br&gt;    CHECK (チェック式)&lt;br&gt;);&lt;br&gt;&lt;br&gt;例えば、students テーブルの birthday カラムに入る値を 2000 年 1 月 1 日以降としたい場合は、次のようにチェック制約を指定することができます。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number),&lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;&lt;br&gt; &lt;br&gt;CREATE TABLE でカラムにデフォルト値を指定する&lt;br&gt;テーブルにデータを挿入する際に値を指定しなかった時に入るデフォルトの値を指定しておくことができます。&lt;br&gt;&lt;br&gt;CREATE TABLE でカラムにデフォルト値を指定するには DEFAULT キーワードを使います。&lt;br&gt;&lt;br&gt;カラムの定義に続けて、DEFAULT デフォルト値のように指定します。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL] DEFAULT デフォルト値,&lt;br&gt;    ....&lt;br&gt;);&lt;br&gt;&lt;br&gt;例えば、students テーブルの paid_flag カラムのデフォルト値を FALSE (0) にしたい時は次のように指定することができます。&lt;br&gt;&lt;br&gt;FALSE は MySQL のブーリアンリテラルで 0 のことなので、DEFAULT 0 でも大丈夫です。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL DEFAULT FALSE&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number), I &lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;&lt;br&gt;CREATE TABLE で外部キー (FOREIGN KEY) 制約を指定する&lt;br&gt;テーブルのカラムの値を、他のテーブルのあるカラムに存在している値のみに制限したい場合、外部キー(FOREIGN KEY) 制約をつけます。&lt;br&gt;&lt;br&gt;CREATE TABLE でチェック制約を指定するには FOREIGN KEY と REFERENCES というキーワードを使います。&lt;br&gt;&lt;br&gt;カラムの定義に続ける場合は、定義に続けて次のように参照する他のテーブル名とカラム名を指定します。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL] REFERENCES 他のテーブル名 (他のテーブルのカラム名),&lt;br&gt;    ....&lt;br&gt;);&lt;br&gt;別の行で外部キーを指定する場合は FOREIGN KEY (そのテーブルのカラム名) REFERENCES 他のテーブル名 (他のテーブルのカラム名) のように指定します。&lt;br&gt;&lt;br&gt;CREATE TABLE テーブル名 (&lt;br&gt;    カラム名1 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名2 データ型 [NOT NULL | NULL],&lt;br&gt;    カラム名3 データ型 [NOT NULL | NULL],&lt;br&gt;    ....&lt;br&gt;    FOREIGN KEY (そのテーブルのカラム名) REFERENCES 他のテーブル名 (他のテーブルのカラム名)&lt;br&gt;);&lt;br&gt;&lt;br&gt;例えば、追加でコースの情報を保持する courses テーブルと、どの生徒がどのコースをとっているかを保持する student_courses テーブルを定義します。&lt;br&gt;&lt;br&gt;student_courses テーブルの student_id には、students テーブルの student_id にある値、course_id には courses テーブルの course_id にある値しか入って欲しくないので、外部キー制約を追加します。&lt;br&gt;&lt;br&gt;CREATE TABLE students (&lt;br&gt;    student_id      INT             NOT NULL AUTO_INCREMENT,&lt;br&gt;    student_number  VARCHAR(10)     NOT NULL,&lt;br&gt;    first_name      VARCHAR(50)     NOT NULL,&lt;br&gt;    last_name       VARCHAR(50)     NOT NULL,&lt;br&gt;    middle_name     VARCHAR(50)     NULL,&lt;br&gt;	birthday  	    DATE            NOT NULL,&lt;br&gt;    gender          ENUM (&#039;M&#039;,&#039;F&#039;)  NOT NULL,&lt;br&gt;    paid_flag       BOOL            NOT NULL DEFAULT FALSE,&lt;br&gt;    PRIMARY KEY (student_id),&lt;br&gt;    UNIQUE KEY (student_number),&lt;br&gt;    CHECK (birthday &gt;= &#039;2000-01-01&#039;)&lt;br&gt;);&lt;br&gt;&lt;br&gt;CREATE TABLE courses (&lt;br&gt;	course_id 	INT         NOT NULL AUTO_INCREMENT,&lt;br&gt;    course_name VARCHAR(20)	NOT NULL,&lt;br&gt;    PRIMARY KEY (course_id)&lt;br&gt;);&lt;br&gt;&lt;br&gt;CREATE TABLE student_courses (&lt;br&gt;    student_id	INT NOT NULL,&lt;br&gt;    course_id	INT NOT NULL,&lt;br&gt;	PRIMARY KEY (student_id, course_id),&lt;br&gt;    FOREIGN KEY (student_id) REFERENCES students (student_id),&lt;br&gt;	FOREIGN KEY (course_id) REFERENCES courses (course_id)&lt;br&gt;);&lt;br&gt;&lt;br&gt;このスクリプトを実行すると次のようになりテーブルが三つ生成されました。&lt;br&gt;&lt;br&gt;MySQL でテーブルの作成 (CREATE TABLE) 1&lt;br&gt;&lt;br&gt;今回それぞれ制約名は省略しているので、名前は MySQL が自動的につけますが、制約の定義の最初に「CONSTRAINT 制約名」と追加することで、制約名を指定することもできます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でテーブルを作成する方法をご説明しました。</description><pubDate>Thu, 17 Jun 2021 06:24:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で四捨五入・切り捨て・切り上げする</title><link>https://mysql.sql55.com/query/mysql-date-rounding.php</link><description>MySQL で四捨五入・切り捨て・切り上げする&lt;br&gt;ここでは、MySQL で四捨五入・切り捨て・切り上げする方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL で ROUND 関数を使って四捨五入する&lt;br&gt;MySQL で FLOOR 関数を使って切り捨てする&lt;br&gt;MySQL で CEILING 関数を使って切り上げする&lt;br&gt;MySQL で ROUND 関数を使って四捨五入する&lt;br&gt;MySQL で数値を四捨五入するには ROUND 関数が使えます。&lt;br&gt;&lt;br&gt;ROUND 関数の構文は次の通りで、数値を指定した小数点以下の桁数に四捨五入します。&lt;br&gt;&lt;br&gt;ROUND(数値, 小数点以下の桁数)&lt;br&gt;&lt;br&gt;小数点以下の桁数はオプショナルで、指定しないとデフォルトで 0 になります。&lt;br&gt;&lt;br&gt;小数点以下の桁数にマイナスの値を指定すると、小数点より左側側（整数部分）に向かって四捨五入される桁を指定できます。&lt;br&gt;&lt;br&gt;SELECT 	ROUND(1234.5678),		-- 1235&lt;br&gt;		ROUND(1234.5678, -3),	-- 1000&lt;br&gt;		ROUND(1234.5678, -2),	-- 1200&lt;br&gt;		ROUND(1234.5678, -1),	-- 1230&lt;br&gt;		ROUND(1234.5678, 0),	-- 1235&lt;br&gt;		ROUND(1234.5678, 1),	-- 1234.6&lt;br&gt;		ROUND(1234.5678, 2),	-- 1234.57&lt;br&gt;		ROUND(1234.5678, 3);	-- 1234.568&lt;br&gt;MySQL で四捨五入・切り捨て・切り上げする 1&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で FLOOR 関数を使って切り捨てする&lt;br&gt;MySQL で数値を切り捨てするには FLOOR 関数が使えます。&lt;br&gt;&lt;br&gt;FLOOR 関数の構文は次の通りで、指定した数値を整数に切り捨てします。&lt;br&gt;&lt;br&gt;FLOOR(数値)&lt;br&gt;&lt;br&gt;小数点第二位に切り捨てしたい時は、数値を 100 で掛けて FLOOR 関数を使ったあとに 100 で割ることで取得できます。&lt;br&gt;&lt;br&gt;SELECT 	FLOOR(1234.1234), -- 1234&lt;br&gt;		FLOOR(1234.5678), -- 1234&lt;br&gt;        FLOOR(1234.5678 * 10) / 10, 	-- 1234.5000&lt;br&gt;        FLOOR(1234.5678 * 100) / 100, 	-- 1234.5600&lt;br&gt;		FLOOR(1234.5678 * 1000) / 1000; -- 1234.5670&lt;br&gt;MySQL で四捨五入・切り捨て・切り上げする 2&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で CEILING 関数を使って切り上げする&lt;br&gt;MySQL で数値を切り上げするには CEILING 関数が使えます。&lt;br&gt;&lt;br&gt;CEILING 関数の構文は次の通りで、指定した数値を整数に切り上げします。&lt;br&gt;&lt;br&gt;CEILING(数値)&lt;br&gt;&lt;br&gt;小数点第二位に切り上げしたい時は、数値を 100 で掛けて CEILING 関数を使ったあとに 100 で割ることで取得できます。&lt;br&gt;&lt;br&gt;SELECT 	CEILING(1234.1234), -- 1235&lt;br&gt;		CEILING(1234.5678), -- 1235&lt;br&gt;        CEILING(1234.5678 * 10) / 10,     -- 1234.6000&lt;br&gt;        CEILING(1234.5678 * 100) / 100,   -- 1234.5700&lt;br&gt;		CEILING(1234.5678 * 1000) / 1000; -- 1234.5680&lt;br&gt;MySQL で四捨五入・切り捨て・切り上げする 3&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で四捨五入・切り捨て・切り上げする方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:35:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL で AUTO_INCREMENT の値をリセットする方法</title><link>https://mysql.sql55.com/query/mysql-reset-auto-increment.php</link><description>MySQL で AUTO_INCREMENT の値をリセットする方法&lt;br&gt;テーブルのレコード数が増えてきて、レコードを大量に削除した後で、AUTO_INCREMENT の値を現在のレコードに合わせてリセットしたいような時ありませんか？&lt;br&gt;&lt;br&gt;ここでは MySQL で AUTO_INCREMENT の値をリセットする方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL で現在の AUTO_INCREMENT の値を確認する&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする&lt;br&gt;MySQL で現在の AUTO_INCREMENT の値を確認する&lt;br&gt;まずは、あるテーブルの現在の AUTO_INCREMENT の値を確認してみましょう。&lt;br&gt;&lt;br&gt;test_db と言う名前のデータベースに、以下のようなシンプルな table1 というテーブルがあって、10 レコードが入っています。&lt;br&gt;&lt;br&gt;CREATE TABLE table1 (&lt;br&gt;	id INT NOT NULL AUTO_INCREMENT,&lt;br&gt;    value1 VARCHAR(20) NULL,&lt;br&gt;	PRIMARY KEY (id)&lt;br&gt;);&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;テーブルの現在の AUTO_INCREMENT の値は次のクエリーで確認できます。&lt;br&gt;&lt;br&gt;ANALYZE TABLE テーブル名;&lt;br&gt;  &lt;br&gt;SELECT 	AUTO_INCREMENT&lt;br&gt;FROM  	INFORMATION_SCHEMA.TABLES&lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;データベース名&#039;&lt;br&gt;		AND TABLE_NAME  = &#039;テーブル名&#039;;&lt;br&gt;まず、ANALYZE TABLE 文でテーブルの情報を最新のものに更新します。&lt;br&gt;&lt;br&gt;そして、INFORMATION_SCHEMA.TABLES から、データベース名とテーブル名を指定して、AUTO_INCREMENT の値を取得しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以下のクエリーを実行して、test_db データベースの table1 テーブルの AUTO_INCREMENT の値を確認します。&lt;br&gt;&lt;br&gt;ANALYZE TABLE table1;&lt;br&gt;&lt;br&gt;SELECT 	AUTO_INCREMENT&lt;br&gt;FROM  	INFORMATION_SCHEMA.TABLES&lt;br&gt;WHERE 	TABLE_SCHEMA = &#039;test_db&#039;&lt;br&gt;		AND TABLE_NAME  = &#039;table1&#039;;&lt;br&gt;AUTO_INCREMENT の値が 11 であることがわかりました。&lt;br&gt;&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法 2&lt;br&gt;&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする&lt;br&gt;ここで、table1 テーブルの id が 4 以上のレコードを削除しました。&lt;br&gt;&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法 3&lt;br&gt;&lt;br&gt;現在のこのテーブルの AUTO_INCREMENT の値は 11 なので、次のデータをインサートすると id は 11 になります。&lt;br&gt;&lt;br&gt;こんな状況で次の id の値を 11 ではなく、4 にしたいような時、AUTO_INCREMENT の値を現在の最大値 + 1 にリセットすることができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;ALTER TABLE 文で、AUTO_INCREMENT に設定しようとした値が、AUTO_INCREMENT が設定されているカラムの最大値 + 1 より小さい場合は、AUTO_INCREMENT の値が最大値 + 1 に設定されます。&lt;br&gt;&lt;br&gt;それを使って以下のクエリーで、AUTO_INCREMENT を現在の最大値 + 1 にリセットすることができます。&lt;br&gt;&lt;br&gt;ALTER TABLE テーブル名 AUTO_INCREMENT = 1;&lt;br&gt;&lt;br&gt;次のクエリーを実行して、table1 の AUTO_INCREMENT の値をリセットし、もう一度 AUTO_INCREMENT の値を確認してみます。&lt;br&gt;&lt;br&gt;ALTER TABLE table1 AUTO_INCREMENT = 1;&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法 4&lt;br&gt;&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法 5&lt;br&gt;&lt;br&gt;AUTO_INCREMENT の値が 4 になっていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;試しに 1 レコード挿入すると、id に 4 が入りました。&lt;br&gt;&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法 6&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で AUTO_INCREMENT の値をリセットする方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:34:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL で日付をフォーマットされた文字列に変換する</title><link>https://mysql.sql55.com/query/mysql-date-format.php</link><description>MySQL で日付をフォーマットされた文字列に変換する&lt;br&gt;日付型の値をデータベース側でフォーマットされた文字列に変換したい時ありますよね。&lt;br&gt;&lt;br&gt;ここでは、よく使う例とともに、MySQL で日付をフォーマットされた文字列に変換する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;DATE_FORMAT で日付をフォーマットされた文字列に変換する&lt;br&gt;MySQL でよく使う日付変換のサンプルクエリー&lt;br&gt;DATE_FORMAT で日付をフォーマットされた文字列に変換する&lt;br&gt;MySQL で DATE や DATETIME 型の値をフォーマットされた文字列に変換するには DATE_FORMAT 関数が使えます。&lt;br&gt;&lt;br&gt;DATE_FORMAT 関数の構文は次の通りです。&lt;br&gt;&lt;br&gt;DATE_FORMAT(date, format)&lt;br&gt;format にはフォーマット指定子を使って、フォーマットを指定します。&lt;br&gt;&lt;br&gt;よく使うフォーマット指定子には次のようなものがあり、format に組み合わせて指定できます。&lt;br&gt;&lt;br&gt;指定子	説明	例&lt;br&gt;%Y	4 桁の年	2024&lt;br&gt;%y	2 桁の年	24&lt;br&gt;%c	月	0 ~ 12&lt;br&gt;%m	2 桁の月	00 ~ 12&lt;br&gt;%e	日	0 ~ 31&lt;br&gt;%d	2 桁の日	00 ~ 31&lt;br&gt;%H	24時制の時間	00 ~ 23&lt;br&gt;%h	12時制の時間	01 ~ 12&lt;br&gt;%p	午前・午後	AM か PM&lt;br&gt;%i	分	00 ~ 59&lt;br&gt;%S, %s	秒	00 ~ 59&lt;br&gt;%f	ミリ秒	000000 ~ 999999&lt;br&gt;%M	月名	January ~ December&lt;br&gt;%b	簡略月名	Jan ~ Dec&lt;br&gt;%W	曜日名	Sunday ~ Saturday&lt;br&gt;%b	簡略曜日名	Sun ~ Sat&lt;br&gt;%a	12時制の時間・分・秒。 hh:mm:ss フォーマット	21:40:13&lt;br&gt;%T	24時制の時間・分・秒。 フォーマット	21:40:13&lt;br&gt;フォーマット指定子以外の文字も format に含むことができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL でよく使う日付変換のサンプルクエリー&lt;br&gt;DATE_FORMAT 関数を使って、日付をフォーマットされた文字列に変換してみます。&lt;br&gt;&lt;br&gt;MySQL でよく使う日付変換のサンプルクエリーは以下の通りです。&lt;br&gt;&lt;br&gt;SET @in_date = &#039;2024-09-25 21:40:13&#039;;&lt;br&gt;&lt;br&gt;SELECT 	DATE_FORMAT(@in_date, &#039;%m/%d/%Y&#039;) AS &#039;MM/dd/yyyy&#039;, -- 09/25/2024&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%m/%d/%y&#039;) AS &#039;MM/dd/yy&#039;, -- 09/25/24&lt;br&gt;        DATE_FORMAT(@in_date, &#039;%Y/%m/%d&#039;) AS &#039;yyyy/MM/dd&#039;, -- 2024/09/25&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%y/%m/%d&#039;) AS &#039;yy/MM/dd&#039;, -- 24/09/25&lt;br&gt;        DATE_FORMAT(@in_date, &#039;%d/%m/%Y&#039;) AS &#039;dd/MM/yyyy&#039;, -- 25/09/2024&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%Y%m%d&#039;) AS &#039;yyyyMMdd&#039;, -- 20240925&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%H:%i:%s&#039;) AS &#039;HH:mm:ss&#039;, -- 21:40:13&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%T&#039;) AS &#039;HH:mm:ss&#039;, -- 21:40:13&lt;br&gt;        DATE_FORMAT(@in_date, &#039;%r&#039;) AS &#039;hh:mm:ss AM or PM&#039;, -- 09:40:13 PM&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%Y%m%d%H%i%s&#039;) AS &#039;yyyyMMddHHmmss&#039;, -- 20240925214013&lt;br&gt;        DATE_FORMAT(@in_date, &#039;%Y/%m/%d %T&#039;) AS &#039;yyyy/MM/dd HH:mm:ss&#039;, -- 2024/09/25 21:40:13&lt;br&gt;		DATE_FORMAT(@in_date, &#039;%Y年%m月%d日 %H時%i分%s秒&#039;) AS &#039;日時&#039;; -- 2024年09月25日 21時40分13秒&lt;br&gt;MySQL で日付をフォーマットされた文字列に変換する 1&lt;br&gt;&lt;br&gt;&#039;%Y年%m月%d日 %H時%i分%s秒&#039; のように format に日本語も入れて変換できて便利ですね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で日付をフォーマットされた文字列に変換する方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:29:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL の便利なクエリー集</title><link>https://mysql.sql55.com/query/</link><description>ここでは、MySQL で使える、便利なクエリーをご紹介していきます。&lt;br&gt;&lt;br&gt;MySQL で日付をフォーマットされた文字列に変換する&lt;br&gt;DATE_FORMAT で日付をフォーマットされた文字列に変換する&lt;br&gt;MySQL でよく使う日付変換のサンプルクエリー&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする方法&lt;br&gt;MySQL で現在の AUTO_INCREMENT の値を確認する&lt;br&gt;MySQL で AUTO_INCREMENT の値をリセットする&lt;br&gt;MySQL で四捨五入・切り捨て・切り上げする&lt;br&gt;MySQL で ROUND 関数を使って四捨五入する&lt;br&gt;MySQL で FLOOR 関数を使って切り捨てする&lt;br&gt;MySQL で CEILING 関数を使って切り上げする</description><pubDate>Mon, 14 Jun 2021 02:28:00 GMT</pubDate><category>MySQL の便利なクエリー集</category></item>
<item><title>MySQL の日付と時間型</title><link>https://mysql.sql55.com/sql/mysql-data-type-datetime.php</link><description>MySQL の日付と時間型&lt;br&gt;ここでは MySQL の日付と時間のデータ型についてご説明します。&lt;br&gt;&lt;br&gt;MySQL の日付と時間のデータ型&lt;br&gt;MySQL の日付と時間のデータ型には次のようなものがあります。&lt;br&gt;&lt;br&gt;データ型	説明&lt;br&gt;DATE	時間なしで日付だけを保持するデータ型です。表示フォーマットは YYYY-MM-DD で &#039;1000-01-01&#039; から &#039;9999-12-31&#039; の範囲の日付が保持できます。&lt;br&gt;DATETIME	日付と時間を保持するデータ型です。表示フォーマットは YYYY-MM-DD hh:mm:ss で &#039;1000-01-01 00:00:00&#039; から&#039;9999-12-31 23:59:59&#039; の範囲の日時が保持できます。&lt;br&gt;TIMESTAMP	日付と時間を保持するデータ型で UTC 時間で保持されます。表示フォーマットは YYYY-MM-DD hh:mm:ss で &#039;1970-01-01 00:00:01&#039; UTC から &#039;2038-01-19 03:14:07&#039; UTC の範囲の日時が保持できます。&lt;br&gt;TIME	日付なしで時間だけを保持するデータ型です。表示フォーマットは hh:mm:ss で &#039;-838:59:59&#039; から &#039;838:59:59&#039; の範囲の時間が保持できます。&lt;br&gt;YEAR	4 桁の年をデータを保持するデータ型です。フォーマットは YYYY で、&#039;1901&#039; から &#039;2155&#039; の範囲の年と &#039;0000&#039; が保持できます。&lt;br&gt;年のデータを代入する時に二桁で指定した時は、70 ~ 99 は 1900年代、00 ~ 69 は 2000 年代に変換されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の日付と時間のデータ型についてご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:26:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の数値型</title><link>https://mysql.sql55.com/sql/mysql-data-type-numeric.php</link><description>MySQL の数値型&lt;br&gt;ここでは MySQL の数値のデータ型についてご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL の整数のデータ型&lt;br&gt;MySQL の固定小数点のデータ型&lt;br&gt;MySQL の浮動小数点のデータ型&lt;br&gt;MySQL の BOOL 型 と BIT 型&lt;br&gt;MySQL の整数のデータ型&lt;br&gt;MySQL の基本の整数のデータ型には次のようなものがあります。&lt;br&gt;&lt;br&gt;データ型	ストレージ&lt;br&gt;（バイト数）	最小値 ~ 最大値（​符号付き）	最小値 ~ 最大値（符号なし）&lt;br&gt;INT	4	-2147483648 ~ 2147483647	0 ~ 4294967295&lt;br&gt;SMALLINT	2	-32768 ~ 32767	0 ~ 65535&lt;br&gt;TINYINT	1	-128 ~ 127	0 ~ 255&lt;br&gt;MEDIUMINT	3	-8388608 ~ 8388607	0 ~ 16777215&lt;br&gt;BIGINT	8	-2^63 ~ 2^63 - 1	0 ~ 2^64 - 1&lt;br&gt;デフォルトは符号付きで、定義するときに データ型に続けて UNSIGNED とすると符号なしになります。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の固定小数点のデータ型&lt;br&gt;MySQL の固定小数点型のデータ型には DECIAL、NUMERIC があります。&lt;br&gt;&lt;br&gt;これらのデータ型は、お金などの精度が重要になってくるデータを保持する時に使われます。&lt;br&gt;&lt;br&gt;NUMERIC は DECIAL として実装されるので、DECIMAL と同じです。&lt;br&gt;&lt;br&gt;&lt;br&gt;DECIMAL を定義する時には DECIAL(M, D) のように定義します。 M が小数点を除く全体の桁数で、D が小数点以下が使う桁数です。&lt;br&gt;&lt;br&gt;例えば、 DECIMAL(6,2) と定義した場合、値は -9999.99 から 9999.99 までの値を保持できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;D（小数点以下が使う桁数）を省略すると、デフォルト値は 0 になります。&lt;br&gt;&lt;br&gt;DECIMAL とだけ定義すると M（小数点を除く全体の桁数）のデフォルト値は 10 なので、DECIMAL(10, 0) と同等になります。&lt;br&gt;&lt;br&gt;M に指定できる最大値は 65 で、D に指定できる最大値は 30 です。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の浮動小数点のデータ型&lt;br&gt;MySQL の浮動小数点のデータ型には FLOAT、DOUBLE があります。&lt;br&gt;&lt;br&gt;ストレージに必要な容量は FLOAT が 4 バイトで、DOUBLE が 8 バイトです。&lt;br&gt;&lt;br&gt;FLOAT(p) のように定義した場合は、p が 0 ~ 23 の時は 4 バイト単精度 の FLOAT 型に、24 ~ 53 の時は 8 バイト倍精度の DOUBLE 型になります。&lt;br&gt;&lt;br&gt;FLOAT(M,D) と DOUBLE(M,D) のフォーマットはサポートされなくなるので、使わないようにしましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL の BOOL 型 と BIT 型&lt;br&gt;BOOL 型は真偽を示すデータを保持するのに使われます。&lt;br&gt;&lt;br&gt;実際は TINYINT(1) が使われていて、値が 0 の時は false、0 以外の時は true になります。&lt;br&gt;&lt;br&gt;BOOL 型には 0, 1 以外の数字も入りますが、MySQL のブーリアンリテラルの TRUE と FALSE は 1 と 0 なので、0 以外の時は true であっても、true を示す値は 1 を使っておくのが混乱しなくて良いと思います。&lt;br&gt;&lt;br&gt;BOOL 型の変数やカラムに値を代入する時は、MySQL のブーリアンリテラルの TRUE と FALSE を使うのがおすすめです。&lt;br&gt;&lt;br&gt;&lt;br&gt;BIT 型はビットのデータを保持するのに使われます。&lt;br&gt;&lt;br&gt;BIT(M) のように定義します。 M はビットの長さで、1 ~ 64 の数字が指定できます。&lt;br&gt;&lt;br&gt;M は省略可能で、省略するとデフォルトで 1 になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の数値のデータ型についてご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:24:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の文字列型</title><link>https://mysql.sql55.com/sql/mysql-data-type-string.php</link><description>MySQL の文字列型&lt;br&gt;ここでは MySQL の文字列のデータ型についてご説明します。&lt;br&gt;&lt;br&gt;MySQL の文字列のデータ型&lt;br&gt;MySQL の基本の文字列のデータ型には次のようなものがあります。&lt;br&gt;&lt;br&gt;データ型	説明&lt;br&gt;CHAR(M)	固定長の文字列型。M には 0 ~ 255 の数字を長さとして指定します。 CHAR(6) のデータ型でカラムや変数を定義して、2文字を保存した時は右側に 4 文字の空白文字が入ります。&lt;br&gt;VARCHAR(M)	可変長の文字列型。M には 0 ~ 最大 65,535 までの数字が長さとして指定できますが、テーブルの全カラムの長さの合計が 65,535 なので、実際の最大値は他のカラムの長さに依存します。 CHAR 型と違い、指定した長さより短い長さの文字列を保存しても、空白が右側に入ることはありません。&lt;br&gt;BINARY(M)	固定長のバイナリー文字列型。CHAR 型と似ていますが、普通の文字列ではなく、バイナリ文字列保持する型です。M の数字はバイト数での長さが入り、省略すると 1 になります。&lt;br&gt;VARBINARY(M)	可変長のバイナリー文字列型。VARCHAR 型と似ていますが、普通の文字列ではなく、バイナリ文字列を保持する型です。M の数字はバイト数での最大の長さが入ります。&lt;br&gt;BLOB	サイズの大きなバイナリの値を保存するためのデータ型。サイズによって TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB があります。&lt;br&gt;TEXT	サイズの大きな文字列の値を保存するためのデータ型。サイズによって TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT があります。&lt;br&gt;ENUM(値1,値2,...)	文字列ですが、定義した時に指定した候補の値しか保存できないデータ型です。例えば gender ENUM(&#039;M&#039;,&#039;F&#039;) と定義した時には gender カラムには &#039;M&#039; か &#039;F&#039; か NULL しか保存できません。&lt;br&gt;SET(値1,値2,...)	ENUM に似ていますが、こちらは候補の中から複数の値が保存可能です。例えば column1 SET(&#039;a&#039;, &#039;b&#039;, &#039;c&#039;) のように定義した場合は、column1 には &#039;a,b&#039; や &#039;a,b,c&#039; のような値も保存できます。&lt;br&gt;全体的に一番よく使われるのは VARCHAR 型で、BLOB と TEXT はファイルや画像などを保存するのによく使われます。&lt;br&gt;&lt;br&gt;カラムのデータの長さは、基本的に保存する可能性のある最大の長さを考慮した上で、できるだけ小さいものを選ぶのが良いとされています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL の基本の文字列のデータ型についてご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:20:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のデータ型</title><link>https://mysql.sql55.com/sql/mysql-data-types.php</link><description>ここでは MySQL のデータ型についてご説明します。&lt;br&gt;&lt;br&gt;テーブルを定義する時にはカラムのデータ型を指定しますし、変数やストアドプロシージャや関数の引数を定義する時にもデータ型を指定します。&lt;br&gt;&lt;br&gt;テーブルのデザインをしたり、クエリーを書く時に、適切なデータ型を選ぶ必要があります。&lt;br&gt;&lt;br&gt;たくさんあるので、よく使われる基本のデータ型を確認しておきましょう。&lt;br&gt;&lt;br&gt;MySQL の文字列型&lt;br&gt;MySQL の数値型&lt;br&gt;MySQL の日付と時間型</description><pubDate>Mon, 14 Jun 2021 02:19:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL で使用するデータベースを選択する</title><link>https://mysql.sql55.com/sql/mysql-use-database.php</link><description>MySQL で使用するデータベースを選択する&lt;br&gt;MySQL で、あるデータベースに対してクエリーを実行するには、その前にそのデータベースを選択しておく必要があります。&lt;br&gt;&lt;br&gt;現在選択されているデータベースを意識しておかないと、意図していないデータベースに対して、間違ってクエリーを実行してしまうかもしれません。&lt;br&gt;&lt;br&gt;ここでは MySQL で選択されているデータベースを確認する方法と、データベースを選択する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL で現在選択されているデータベースを確認する&lt;br&gt;MySQL のクエリーで使用するデータベースを選択する&lt;br&gt;MySQL Workbench で使用するデータベースを選択する&lt;br&gt;MySQL で現在選択されているデータベースを確認する&lt;br&gt;データベースを選択する前に、現在選択されているデータベースを確認しておきましょう。&lt;br&gt;&lt;br&gt;現在選択されているデータベースを表示するには、は次のクエリーで確認できます。&lt;br&gt;&lt;br&gt;SELECT DATABASE();&lt;br&gt;&lt;br&gt;DATABASE() は現在選択されているデータベース名を返す情報関数です。&lt;br&gt;&lt;br&gt;何も選択されていない場合は NULL が返ります。&lt;br&gt;&lt;br&gt;&lt;br&gt;こちらがクエリーの実行した結果です。sys データベースが選択されていることがわかります。&lt;br&gt;&lt;br&gt;MySQL で使用するデータベースを選択する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL のクエリーで使用するデータベースを選択する&lt;br&gt;MySQL のクエリーで使用するデータベースを選択するには USE 文を使います。&lt;br&gt;&lt;br&gt;USE 文の構文は次の通りです。&lt;br&gt;&lt;br&gt;USE データベース名;&lt;br&gt;&lt;br&gt;例えば、test_db という名前のデータベースを選択するには次のクエリーを実行します。&lt;br&gt;&lt;br&gt;USE test_db;&lt;br&gt;&lt;br&gt;このクエリーを実行すると以下のようになります。&lt;br&gt;&lt;br&gt;MySQL で使用するデータベースを選択する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;もう一度 DATABASE() 関数を実行して、現在選択されているデータベースを確認してみましょう。&lt;br&gt;&lt;br&gt;MySQL で使用するデータベースを選択する 3&lt;br&gt;&lt;br&gt;test_db が選択されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench で使用するデータベースを選択する&lt;br&gt;MySQL Workbench の画面からも、使用するデータベースを選択することができます。&lt;br&gt;&lt;br&gt;MySQL Workbench の Schema タブでは、現在選択されているデータベース名が太字になっています。&lt;br&gt;&lt;br&gt;MySQL で使用するデータベースを選択する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;Schema タブのデータベース名をダブルクリックすると、そのダブルクリックしたデータベースが選択されます。&lt;br&gt;&lt;br&gt;試しに sys データベースをダブルクリックして、DATABASE() 関数を実行して、現在選択されているデータベースを確認してみます。&lt;br&gt;&lt;br&gt;MySQL で使用するデータベースを選択する 5&lt;br&gt;&lt;br&gt;Schema タブの sys データベース名が太字になり、DATABASE() 関数の実行結果も sys になりました。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL で選択されているデータベースを確認する方法と、データベースを選択する方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:18:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でデータベースの作成</title><link>https://mysql.sql55.com/sql/mysql-create-database.php</link><description>MySQL でデータベースの作成&lt;br&gt;ここでは MySQL でデータベースを作成する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL でデータベースの一覧を確認する&lt;br&gt;MySQL で新しいデータベースを作成する&lt;br&gt;MySQL でデータベースの一覧を確認する&lt;br&gt;新しいデータベースを作成する前に、MySQL サーバの現在のデータベースの一覧を確認しておきましょう。&lt;br&gt;&lt;br&gt;MySQL サーバのデータベースの一覧は SHOW DATABASES 文で表示できます。&lt;br&gt;&lt;br&gt;次のクエリーを実行してください。&lt;br&gt;&lt;br&gt;SHOW DATABASES;&lt;br&gt;&lt;br&gt;MySQL サーバをインストールしてデータベースを作っていない状態だと、次のような結果になるはずです。&lt;br&gt;&lt;br&gt;これらのデータベースはシステムが使うデータベースです。&lt;br&gt;&lt;br&gt;MySQL でデータベースの作成 1&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で新しいデータベースを作成する&lt;br&gt;それでは、MySQLサーバに新しいデータベースを作成してみましょう。&lt;br&gt;&lt;br&gt;MySQL で新しいデータベースを作成するには、CREATE DATABASE 文を使います。&lt;br&gt;&lt;br&gt;CREATE DATABASE データベース名;&lt;br&gt;&lt;br&gt;例えば、test_db という名前のデータベースを作るクエリーは次の通りです。&lt;br&gt;&lt;br&gt;CREATE DATABASE test_db;&lt;br&gt;&lt;br&gt;実行結果は次のようになります。&lt;br&gt;&lt;br&gt;MySQL Workbench の Schemas タブのリフレッシュボタンをクリックすると test_db が表示されます。&lt;br&gt;&lt;br&gt;MySQL でデータベースの作成 2&lt;br&gt;&lt;br&gt;&lt;br&gt;もう一度、SHOW DATABASES 文を実行して、MySQL サーバのデータベースの一覧を確認します。&lt;br&gt;&lt;br&gt;MySQL でデータベースの作成 3&lt;br&gt;&lt;br&gt;test_db データベースが追加されていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL でデータベースを作成する方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:17:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL でコメントを書く方法</title><link>https://mysql.sql55.com/sql/mysql-comment.php</link><description>MySQL でコメントを書く方法&lt;br&gt;ここでは MySQL のクエリーにコメントを書く方法をご説明します。&lt;br&gt;&lt;br&gt;コメントは、スクリプトの中に書くメモのようなもので、実行時には無視されます。&lt;br&gt;&lt;br&gt;何をするクエリーなのか、どうしてこうしたのか、などをコメントに書いておくと、他の人がスクリプトを見たり、自分も後から見た時にわかりやすいです。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL で # 記号を使ってコメントを書く&lt;br&gt;MySQL で -- 記号を使ってコメントを書く&lt;br&gt;MySQL で /* */ 記号を使ってコメントを書く&lt;br&gt;MySQL で # 記号を使ってコメントを書く&lt;br&gt;MySQL のクエリーにコメントを書くには、三つの方法があります。&lt;br&gt;&lt;br&gt;まずひとつめは、# 記号を使ってコメントを書く方法です。&lt;br&gt;&lt;br&gt;同じ行の # 記号から後ろの文字が全てコメントになります。&lt;br&gt;&lt;br&gt;# これはコメントです。&lt;br&gt;SELECT VERSION(); #これもコメントです。&lt;br&gt;MySQL のコメント 1&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で -- 記号を使ってコメントを書く&lt;br&gt;二つ目は -- 記号を使ってコメントを書く方法です。&lt;br&gt;&lt;br&gt;# 記号と同様に、同じ行の -- 記号から後ろの文字が全てコメントになります。&lt;br&gt;&lt;br&gt;注意しないといけないのは -- 記号の後ろに、少なくともスペースやタブなどの空白文字をひとつ入れないといけないところです。&lt;br&gt;&lt;br&gt;-- これはコメントです。&lt;br&gt;SELECT VERSION(); -- これもコメントです。&lt;br&gt;SELECT VERSION(); --これはエラーになります。&lt;br&gt;MySQL のコメント 2&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL で /* */ 記号を使ってコメントを書く&lt;br&gt;三つ目は /* */ 記号を使ってコメントを書く方法です。&lt;br&gt;&lt;br&gt;/* 記号から始まって、*/ 記号までの囲まれた部分がコメントになります。&lt;br&gt;&lt;br&gt;同じ行内にコメントを書いて、その後にスクリプトを続けることもできます。&lt;br&gt;&lt;br&gt;また、/* */ 記号を使えば、複数行にわたるコメントを書くこともできます。&lt;br&gt;&lt;br&gt;/* これはコメントです。 */&lt;br&gt;SELECT /* これもコメントです。 */ VERSION();&lt;br&gt;/*&lt;br&gt;複数行の&lt;br&gt;コメントも&lt;br&gt;書けます。&lt;br&gt;*/&lt;br&gt;MySQL のコメント 3&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL のクエリーにコメントを書く方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:16:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL Workbench でクエリーを実行する方法</title><link>https://mysql.sql55.com/sql/how-to-run-query-in-mysql-workbench.php</link><description>MySQL Workbench でクエリーを実行する方法&lt;br&gt;ここでは、初めて MySQL Workbench を使ってクエリーを書く方を対象に、MySQL Workbench でクエリーを実行する方法をご説明します。&lt;br&gt;&lt;br&gt;クエリーを実行できる方は、このページはスキップしてください。&lt;br&gt;&lt;br&gt;MySQL サーバと MySQL Workbench はインストールされている前提で進めますので、まだの方は「 MySQL の環境設定 」のページをご参考にインストールしてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL Workbench を起動する&lt;br&gt;MySQL Workbench で MySQL サーバに接続する&lt;br&gt;MySQL Workbench のクエリータブにクエリーを書く&lt;br&gt;MySQL Workbench でクエリーを実行する&lt;br&gt;MySQL Workbench を起動する&lt;br&gt;まず、MySQL Workbench プログラムを起動します。&lt;br&gt;&lt;br&gt;Windows の場合はスタートメニューの MySQL フォルダから MySQL Workbench 起動するか、タスクバーの検索ボックスで MySQL Workbench と検索しても出てきます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;Mac の場合はアプリケーションフォルダーの MySQLWorkbench.app をダブルクリックするか、ランチパッドやスポットライト検索からも起動できます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench で MySQL サーバに接続する&lt;br&gt;MySQL Workbench を起動すると、インストールしてスタートされているインスタンスが MySQL Connections に表示されているはずなので、それをダブルクリックします。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;もし、接続したい MySQL サーバが MySQL Connections に表示されていない場合は、MySQL Connections の横の ＋ ボタンをクリックして接続情報を入力します。&lt;br&gt;&lt;br&gt;MySQL サーバをデフォルトの設定でインストールした場合、以下の情報で接続できるはずです。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 6&lt;br&gt;&lt;br&gt;&lt;br&gt;パスワードを保存していない場合は、パスワードを入力するダイアログが出てくるので、パスワードを入力して OK ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL サーバの接続に成功すると以下のような画面が開きます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench のクエリータブにクエリーを書く&lt;br&gt;MySQL Workbench のクエリータブにクエリーを書きます。&lt;br&gt;&lt;br&gt;接続するとクエリータブが開いていて、この緑で囲まれた部分にクエリーを書くことができます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 7&lt;br&gt;&lt;br&gt;&lt;br&gt;新しいクエリータブを開きたい場合は、File メニューの New Query Tab を選択するか、開いているクエリータブの名前のところで右クリックして New Tab を選択しあす。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 8&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 9&lt;br&gt;&lt;br&gt;&lt;br&gt;クエリータブに、MySQL サーバのバージョンを文字列で返す、以下のクエリーを書きます。&lt;br&gt;&lt;br&gt;SELECT Version();&lt;br&gt;MySQL Workbench でクエリーを実行する方法 10&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する&lt;br&gt;MySQL Workbench でクエリーを実行するには、以下の実行ボタンをクリックします。&lt;br&gt;&lt;br&gt;クエリーが何個か書かれていて、一部が選択状態の時は、その選択されている部分だけが、選択状態になっている箇所がない時は、そのタブに書かれている全てのクエリーが実行されます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 11&lt;br&gt;&lt;br&gt;&lt;br&gt;また、Query メニューの Execute (All or Selection) を選択しても実行できます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 12&lt;br&gt;&lt;br&gt;&lt;br&gt;実行すると、Result Grid に実行結果が表示されます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 13&lt;br&gt;&lt;br&gt;&lt;br&gt;エラーがある時は、Action Output にエラー情報が表示されます。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法 14&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL Workbench でクエリーを実行する方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:15:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL の基礎</title><link>https://mysql.sql55.com/sql/</link><description>ここでは、MySQL を使って、データベースの作成、テーブルの作成・変更・削除、データの取得・挿入・更新・削除 など基本的な SQL の書き方から、ユーザー定義の関数やストアド プロシージャの作成などをご説明します。&lt;br&gt;&lt;br&gt;本サイトでは、クライアントプログラムは MySQL Workbench を使いますが、mysql クライアントなど、他のクライアントプログラムをご利用の方でも、クエリー自体は同じですので大丈夫です。&lt;br&gt;&lt;br&gt;MySQL Workbench でクエリーを実行する方法&lt;br&gt;MySQL Workbench を起動する&lt;br&gt;MySQL Workbench で MySQL サーバに接続する&lt;br&gt;MySQL Workbench のクエリータブにクエリーを書く&lt;br&gt;MySQL Workbench でクエリーを実行する&lt;br&gt;MySQL でコメントを書く方法&lt;br&gt;MySQL でデータベースの作成&lt;br&gt;MySQL でデータベースの一覧を確認する&lt;br&gt;MySQL で新しいデータベースを作成する&lt;br&gt;MySQL で使用するデータベースの選択&lt;br&gt;MySQL で現在選択されているデータベースを確認する&lt;br&gt;MySQL のクエリーで使用するデータベースを選択する&lt;br&gt;MySQL Workbench で使用するデータベースを選択する&lt;br&gt;MySQL のデータ型&lt;br&gt;MySQL の文字列型&lt;br&gt;MySQL の数値型&lt;br&gt;MySQL の日付と時間型</description><pubDate>Mon, 14 Jun 2021 02:14:00 GMT</pubDate><category>MySQL の基礎</category></item>
<item><title>MySQL のバージョンを確認する方法</title><link>https://mysql.sql55.com/env/how-to-check-mysql-version.php</link><description>MySQL のバージョンを確認する方法&lt;br&gt;ここでは、MySQL サーバのバージョンを確認する方法をご説明します。&lt;br&gt;&lt;br&gt;MySQL サーバのバージョンを確認するには、何通りか方法があります。&lt;br&gt;&lt;br&gt;今回はその中でも、クライアントプログラムによらず、クエリーでバージョンを確認する方法を中心に何個かご紹介します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;Version() を使って MySQL のバージョンを確認する&lt;br&gt;@@Version を使って MySQL のバージョンを確認する&lt;br&gt;SHOW VARIABLES ステートメントで MySQL のバージョンを確認する&lt;br&gt;MySQL Workbench のサーバステータス画面で MySQL のバージョンを確認する&lt;br&gt;Version() を使って MySQL のバージョンを確認する&lt;br&gt;まずは、Version() を使って MySQLのバージョンを確認する方法です。&lt;br&gt;&lt;br&gt;Version() は MySQL サーバのバージョンを文字列で返す、ビルドイン関数です。&lt;br&gt;&lt;br&gt;クエリーを実行する必要があるので、お使いのクライアントプログラムで MySQL サーバに接続します。&lt;br&gt;&lt;br&gt;&lt;br&gt;ここでは、MySQL Workbench で、MySQL サーバに接続し、クエリータブで次のクエリーを実行します。&lt;br&gt;&lt;br&gt;SELECT Version();&lt;br&gt;&lt;br&gt;実行した結果は以下のようになり、Result Grid にバージョンが表示されます。&lt;br&gt;&lt;br&gt;MySQL のバージョンを確認する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;@@Version を使って MySQLのバージョンを確認する&lt;br&gt;続いて、@@Version を使って MySQL のバージョンを確認する方法です。&lt;br&gt;&lt;br&gt;@@Version を SELECT することで、MySQL サーバシステム変数の Version の情報を表示できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;Version() の時と同じ手順で、MySQL Workbench のクエリータブで次のクエリーを実行します。&lt;br&gt;&lt;br&gt;SELECT @@Version;&lt;br&gt;&lt;br&gt;実行した結果は以下のようになり、Result Grid にバージョンが表示されます。&lt;br&gt;&lt;br&gt;MySQL のバージョンを確認する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;SHOW VARIABLES ステートメントで MySQL のバージョンを確認する&lt;br&gt;次は、SHOW VARIABLES ステートメントで MySQL のバージョンを確認する方法です。&lt;br&gt;&lt;br&gt;SHOW VARIABLES は MySQL サーバのシステム変数一覧を表示するステートメントで、MySQL サーバに接続できさえすれば、特別な権限がなくても実行できます。&lt;br&gt;&lt;br&gt;続けて LIKE 句を使って Variable_name でフィルターすることができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;SHOW VARIABLES ステートメントを使って、MySQL サーバのバージョンを表示するクエリーは次の通りです。&lt;br&gt;&lt;br&gt;SHOW VARIABLES LIKE &#039;version&#039;;&lt;br&gt;&lt;br&gt;実行した結果は以下のようになり、Result Grid にサーバシステム変数の Version の値が表示されます。&lt;br&gt;&lt;br&gt;MySQL のバージョンを確認する方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench のサーバステータス画面で MySQL のバージョンを確認する&lt;br&gt;MySQL Workbench の Server Status 画面でも、MySQL のバージョンを確認することができます&lt;br&gt;&lt;br&gt;MySQL Workbench を起動し、MySQL サーバに接続します。&lt;br&gt;&lt;br&gt;左側の Navigator（ナビゲーター）パネルの MANAGEMENT（マネージメント）の Server Status（サーバステータス）をクリックします。&lt;br&gt;&lt;br&gt;以下のような画面が表示され、MySQL サーバのバージョンを確認できます。&lt;br&gt;&lt;br&gt;MySQL のバージョンを確認する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL サーバのバージョンを確認する方法をご紹介しました。</description><pubDate>Mon, 14 Jun 2021 02:12:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL Workbench のインストール方法 - Mac</title><link>https://mysql.sql55.com/env/how-to-install-mysql-workbench-mac.php</link><description>MySQL Workbench のインストール方法 - Mac&lt;br&gt;ここでは MySQL Workbench を Mac にインストールする方法をご説明します。&lt;br&gt;&lt;br&gt; MySQL サーバをインストールしていない方は先に 「 MySQL のインストール方法 - Mac 」から MySQL Community Server をインストールしてください。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;MySQL Workbench をインストールする&lt;br&gt;MySQL Workbench を起動して確認する&lt;br&gt;MySQL Workbench をインストールする&lt;br&gt;MySQL のサイトから、MySQL Workbench をダウンロードします。&lt;br&gt;&lt;br&gt;MySQL のサイトの MySQL Workbench のダウンロードページ https://dev.mysql.com/downloads/workbench/ にアクセスします。&lt;br&gt;&lt;br&gt;ダウンロードページの URL はずっと変わっていないようですが、もし変わっている場合は 「MySQL Workbench ダウンロード」で検索するとすぐ出てくると思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;Mac OS 用の最新の MySQL Workbench のダウンロードページが表示されます。&lt;br&gt;&lt;br&gt;Operating System が macOS になっていることを確認して、DMG Archive をダウンロードします。&lt;br&gt;&lt;br&gt;MySQL Workbench のインストール方法 - Mac 1&lt;br&gt;&lt;br&gt;この記事を書いている時点での最新バージョンは MySQL Workbench 8.0.25 ですが、サイトに行った時にバージョンが違っても、最新のバージョンをインストールして大丈夫です。&lt;br&gt;&lt;br&gt;&lt;br&gt;無料のアカウントを作る画面が出てきますが、作らなくても &quot;No thanks, just start my download.&quot; リンクからダウンロードできます。&lt;br&gt;&lt;br&gt;MySQL Workbench のインストール方法 - Mac 2&lt;br&gt;&lt;br&gt;&lt;br&gt;dmg ファイル (この時点では mysql-workbench-community-8.0.25-macos-x86_64.dmg) がダウンロードされるので、ダブルクリックします。&lt;br&gt;&lt;br&gt;次のような画面が出てくるので、矢印のように MySQL Workbench のアイコンを Applications アイコンにドラッグ＆ドロップします。&lt;br&gt;&lt;br&gt;MySQL Workbench のインストール方法 - Mac 3&lt;br&gt;&lt;br&gt;&lt;br&gt;これで MySQL Workbench のインストールが完了です。&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL Workbench を起動して確認する&lt;br&gt;MySQL Workbench を起動するには、アプリケーションフォルダーの MySQLWorkbench.app をダブルクリックします。&lt;br&gt;&lt;br&gt;MySQL Workbench のインストール方法 - Mac 4&lt;br&gt;&lt;br&gt;&lt;br&gt;初回起動時には以下のようなメッセージが出てくるかもしれませんが、Open ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL Workbench のインストール方法 - Mac 5&lt;br&gt;&lt;br&gt;&lt;br&gt;そうすると、MySQL Workbench が起動し、インストールした MySQL サーバのインスタンスが MySQL Connections に表示されているはずです。&lt;br&gt;&lt;br&gt;MySQL Workbench のインストール方法 - Mac 6&lt;br&gt;&lt;br&gt;&lt;br&gt;その他、MySQL Workbench の起動は、ランチパッドからもできますし、スポットライト検索で MySQL Workbench で検索しても出てきます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL Workbench を Mac にインストールする方法をご説明しました。&lt;br&gt;&lt;br&gt;</description><pubDate>Mon, 14 Jun 2021 02:11:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL Workbench とは？</title><link>https://mysql.sql55.com/env/what-is-mysql-workbench.php</link><description>MySQL Workbench とは？&lt;br&gt;MySQL Workbench とは？&lt;br&gt;&lt;br&gt;MySQL Workbench とは、MySQL オフィシャルの MySQL データベースシステムを使った開発や管理、データベースのデザインや、マイグレーションなどを行うための統合管理ツールです。&lt;br&gt;&lt;br&gt;SQL Server データベースを使ったことある方は、SQL Server データベースに対する、SQL Server Management Studio のようなものです。&lt;br&gt;&lt;br&gt;MySQL Community Server をインストールしましたが、そのデータベースサーバに MySQL Workbench で接続して、データベースを作成したり、テーブルを作ったり、データを挿入したり、いろんなクエリーを実行したりすることができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;このサイトでは MySQL Workbench を使って、MySQL データベースサーバに接続してクエリー実行しながら、MySQL を学んでいきます。&lt;br&gt;&lt;br&gt;Windows を使っていて、MySQL Installer for Windows を使ってデフォルトの設定のまま MySQL プロダクトをインストールされた方は、MySQL Workbench も同時にインストールされていると思います。&lt;br&gt;&lt;br&gt;Mac の方は「MySQL Workbench のインストール方法 - Mac」をご参考に、インストールしておいてください。</description><pubDate>Mon, 14 Jun 2021 02:09:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL のインストール方法 - Windows</title><link>https://mysql.sql55.com/env/how-to-install-mysql-windows.php</link><description>MySQL のインストール方法 - Windows&lt;br&gt;ここでは MySQL Community Server と MySQL Workbench などを Windows にインストールする方法をご説明します。&lt;br&gt;&lt;br&gt;MySQL Installer をダウンロードしてインストールする&lt;br&gt;MySQL のサイトから、無料の MySQL Community Server を含む Windows 用の MySQL インストーラーをダウンロードします。&lt;br&gt;&lt;br&gt;Windows から MySQL のサイトのダウンロードページ https://dev.mysql.com/downloads/mysql/ にアクセスします。&lt;br&gt;&lt;br&gt;ダウンロードページの URL はずっと変わっていないようですが、もし変わっている場合は 「MySQL Community サーバ ダウンロード」で検索するとすぐ出てくると思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;Microsoft Windows 用の最新の MySQL Community Server のダウンロードページが表示されます。&lt;br&gt;&lt;br&gt;MySQL Installer for Windows がおすすめとして表示されているので、クリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 1&lt;br&gt;&lt;br&gt;この記事を書いている時点での最新バージョンは MySQL Community Server 8.0.25 ですが、サイトに行った時にバージョンが違っても、最新のバージョンをインストールして大丈夫です。&lt;br&gt;&lt;br&gt;&lt;br&gt;Windows 用の MySQL Installer のダウンロードページが表示されるので、ダウンロードします。&lt;br&gt;&lt;br&gt;どちらでも良いですが、今回は下の mysql-installer-community-8.0.25.0.msi を選択します。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 2&lt;br&gt;&lt;br&gt;&lt;br&gt;無料のアカウントを作る画面が出てきますが、作らなくても &quot;No thanks, just start my download.&quot; リンクからダウンロードできます。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 3&lt;br&gt;&lt;br&gt;&lt;br&gt;msi ファイル (この時点では mmysql-installer-community-8.0.25.0.msi) がダウンロードされるので、ダブルクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 4&lt;br&gt;&lt;br&gt;&lt;br&gt;次のようなインストーラーが立ち上がり、セットアップタイプを選ぶ画面が出てきます。 今回 Developer Default を選択します。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 5&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL プロダクトをインストールするのに必要となるプロダクトのチェックが行われ、その結果が表示されます。&lt;br&gt;&lt;br&gt;ここで Status が Manual となっているものは、MySQL Installer が自動的にインストールできないもので、別途自分でインストールする必要があります。&lt;br&gt;&lt;br&gt;この場合は Python がなかったので、表示されたリンクから、ダウンロードしてインストールしました。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 6&lt;br&gt;&lt;br&gt;&lt;br&gt;Python をインストールした後に Check ボタンをクリックすると、ステータスが Complete に変わるので、Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 7&lt;br&gt;&lt;br&gt;&lt;br&gt;インストールの確認画面が表示されるので、 Excecute ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 8&lt;br&gt;&lt;br&gt;&lt;br&gt;インストールが終わったらら、Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 9&lt;br&gt;&lt;br&gt;&lt;br&gt;次に Product Configuration（プロダクトの構成）の画面が表示されるので、Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 10&lt;br&gt;&lt;br&gt;&lt;br&gt;Type and Networking（タイプとネットワーク）の画面が表示されるので、そのままで Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 11&lt;br&gt;&lt;br&gt;&lt;br&gt;パスワードの暗号化の方法を選択する画面が出てきますので、&quot;Use Strong Password Encryption for Authentication&quot; が選択されたままで Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 12&lt;br&gt;&lt;br&gt;&lt;br&gt;root アカウントという、全ての権限のあるアカウントのユーザーのパスワードを入力し Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 13&lt;br&gt;&lt;br&gt;&lt;br&gt;ここからデフォルトの設定のまま、以下のスクリーンショットのように進めていきます。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 14&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 15&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 16&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 17&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 18&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 19&lt;br&gt;&lt;br&gt;&lt;br&gt;Connect To Server （サーバーに接続する）画面が出てくるので、先ほど設定した root のパスワードを入力して Check ボタンをクリックします。&lt;br&gt;&lt;br&gt;接続が成功して、Status が Connection Succeeded になると思いますので、Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 20&lt;br&gt;&lt;br&gt;&lt;br&gt;またデフォルトの設定のまま、以下のスクリーンショットのように進めていきます。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 21&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 22&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 23&lt;br&gt;&lt;br&gt;&lt;br&gt;インストール完了の画面が出てきますので、Finish ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Windows 24&lt;br&gt;&lt;br&gt;これで、MySQL サーバと MySQL Workbench などのツールのインストールが完了しました。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL Community Server と MySQL Workbench などを Windows にインストールする方法をご説明しました。</description><pubDate>Mon, 14 Jun 2021 02:07:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL のインストール方法 - Mac</title><link>https://mysql.sql55.com/env/how-to-install-mysql-mac.php</link><description>MySQL のインストール方法 - Mac&lt;br&gt;ここでは MySQL Community Server を Mac にインストールする方法をご説明します。&lt;br&gt;&lt;br&gt;MySQL Community Server をダウンロードしてインストールする&lt;br&gt;MySQL のサイトから、無料の MySQL Community Server をダウンロードします。&lt;br&gt;&lt;br&gt;MySQL のサイトのダウンロードページ https://dev.mysql.com/downloads/mysql/にアクセスします。&lt;br&gt;&lt;br&gt;ダウンロードページの URL はずっと変わっていないようですが、もし変わっている場合は 「MySQL Community サーバ ダウンロード」で検索するとすぐ出てくると思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;Mac OS 用の最新の MySQL Community Server のダウンロードページが表示されます。&lt;br&gt;&lt;br&gt;Operating System が macOS になっていることを確認して、DMG Archive をダウンロードします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 1&lt;br&gt;&lt;br&gt;この記事を書いている時点での最新バージョンは MySQL Community Server 8.0.25 ですが、サイトに行った時にバージョンが違っても、最新のバージョンをインストールして大丈夫です。&lt;br&gt;&lt;br&gt;&lt;br&gt;無料のアカウントを作る画面が出てきますが、作らなくても &quot;No thanks, just start my download.&quot; リンクからダウンロードできます。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 2&lt;br&gt;&lt;br&gt;&lt;br&gt;dmg ファイル (この時点では mysql-8.0.25-macos11-x86_64.dmg) がダウンロードされるので、ダブルクリックします。&lt;br&gt;&lt;br&gt;次のような画面が出てくるので、pkg ファイルをダブルクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 3&lt;br&gt;&lt;br&gt;&lt;br&gt;インストーラーが立ち上がり、次のような警告が出てきた場合は許可します。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以下のスクリーンショットのように、Continue して、ライセンスに同意して MySQL サーバをインストールします。&lt;br&gt;&lt;br&gt;インストール時に macOS のパスワード入力画面が出てきますので入力してください。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 5&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 6&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 7&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 8&lt;br&gt;&lt;br&gt;&lt;br&gt;パスワードの暗号化の方法を選択する画面が出てきますので、&quot;Use Strong Password Encryption&quot; を選択し Next ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 9&lt;br&gt;&lt;br&gt;&lt;br&gt;root ユーザーという、全ての権限のあるユーザーのパスワードを入力し Finish ボタンをクリックします。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 10&lt;br&gt;&lt;br&gt;&lt;br&gt;インストール完了の画面が表示されるので、Close ボタンをクリックしてインストーラーを終了します。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 11&lt;br&gt;&lt;br&gt;&lt;br&gt;これで MySQL Community Server のインストールが完了です。&lt;br&gt;&lt;br&gt;先ほど、&quot;Start MySQL Server once the installation is complete&quot;「インストールが完了したら MySQL Server をスタートする」オプションにチェックをつけてインストールしたので、MySQL Server は開始しているはずです。&lt;br&gt;&lt;br&gt;&lt;br&gt;インストールされた MySQL Server の状態は、システム環境設定 (System Preferences) &gt; MySQL の画面で確認できます。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 12&lt;br&gt;&lt;br&gt;&lt;br&gt;この画面から、MySQL Server のスタートやストップ、データベースのイニシャライズ、アンインストールが可能です。&lt;br&gt;&lt;br&gt;MySQL のインストール方法 - Mac 13&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、MySQL Community Server を Mac にインストールする方法をご説明しました。&lt;br&gt;</description><pubDate>Mon, 14 Jun 2021 01:59:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL とは？</title><link>https://mysql.sql55.com/env/what-is-mysql.php</link><description>MySQL とは？&lt;br&gt;MySQL ウエブサイト&lt;br&gt;&lt;br&gt;&lt;br&gt;MySQL データベースはオープソースで、世界中で一番よく使われているリレーショナルデータベース管理システム (RDBMS)です。&lt;br&gt;&lt;br&gt;DB-Engines Ranking では、有料のデータベース管理システムも含めても、オラクルに続き２位になっています。&lt;br&gt;&lt;br&gt;YouTube、Facebook、Twitter、Paypal などの大企業も MySQL データベースを使用していて、オープンソースですが信頼と実績があります。&lt;br&gt;&lt;br&gt;&lt;br&gt;また、MySQL データベースはウエブ開発のソフトウエアバンドルの LAMP のデータベースとして含まれています。&lt;br&gt;&lt;br&gt;ホスティングサーバ（レンタルサーバ）でも、MySQL データベースが提供されているホスティングサービスが多いです。&lt;br&gt;&lt;br&gt;&lt;br&gt;現在はオラクルに買収されましたが、MySQL Community Server は無料で利用できます。&lt;br&gt;&lt;br&gt;このサイドでは、MySQL Community Server を使って、MySQL を学習していきます。&lt;br&gt;&lt;br&gt;</description><pubDate>Mon, 14 Jun 2021 01:57:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL の環境設定</title><link>https://mysql.sql55.com/env/</link><description>ここでは、これから MySQL データベースを学ぶ方のために、MySQL とは何か、MySQL のデータベースサーバ や Workbench のインストール方法と基本的な使い方などをご説明します。&lt;br&gt;&lt;br&gt;MySQL とは？&lt;br&gt;MySQL のインストール方法 - Mac&lt;br&gt;MySQL のインストール方法 - Windows&lt;br&gt;MySQL Workbench とは？&lt;br&gt;MySQL Workbench のインストール方法 - Mac&lt;br&gt;MySQL Workbench をインストールする&lt;br&gt;MySQL Workbench を起動して確認する&lt;br&gt;MySQL のバージョンを確認する方法&lt;br&gt;Version() を使って MySQL のバージョンを確認する&lt;br&gt;@@Version を使って MySQL のバージョンを確認する&lt;br&gt;SHOW VARIABLES ステートメントで MySQL のバージョンを確認する&lt;br&gt;MySQL Workbench のサーバステータス画面で MySQL のバージョンを確認する</description><pubDate>Mon, 14 Jun 2021 01:53:00 GMT</pubDate><category>MySQL の環境設定</category></item>
<item><title>MySQL 入門</title><link>https://mysql.sql55.com/</link><description>MySQL データベースを使いこなそう&lt;br&gt;このサイトは MySQL を初めて学ぶ人のための学習サイトです。&lt;br&gt;&lt;br&gt;MySQLデータベースはオープンソースで世界で一番よく使われているリレーショナルデータベース管理システム (RDBMS)です。&lt;br&gt;&lt;br&gt;MySQL を使って、基本的な SQL クエリーの書き方を順を追って説明しています。&lt;br&gt;&lt;br&gt;また、開発に使える便利なクエリーなどを掲載しています。</description><pubDate>Mon, 14 Jun 2021 01:51:00 GMT</pubDate><category>MySQL 入門</category></item>
</channel>
</rss>
