MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャでIN()を使って特定のレコードのみを取得する方法

MySQLのストアドプロシージャ内でIN()を使用すると、条件に一致する特定のレコードだけを柔軟に取得できます。ここでは、実際の手順をサンプルコードとともに解説します。

1. サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table DemoTable2004
(
    UserId varchar(20),
    UserName varchar(20)
);
Query OK, 0 rows affected (0.57 sec)

2. レコードの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable2004 values('John_123','John');
Query OK, 1 row affected (0.93 sec)
mysql> insert into DemoTable2004 values('23456_Carol','Carol');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable2004 values('111_Bob','Bob');
Query OK, 1 row affected (0.14 sec)

3. テーブル内の全レコードを確認

SELECT文でテーブルの全レコードを表示してみましょう。

mysql> select * from DemoTable2004;

以下のような出力が得られます。

+-------------+----------+
| UserId      | UserName |
+-------------+----------+
| John_123    |     John |
| 23456_Carol |    Carol |
| 111_Bob     |      Bob |
+-------------+----------+
3 rows in set (0.00 sec)

4. IN()を使ったストアドプロシージャの作成

続いて、引数として受け取ったUserIdをIN()で絞り込み、該当するレコードのみを取得するストアドプロシージャを作成します。ストアドプロシージャを定義する際は、あらかじめdelimiterを変更しておくのがポイントです。

mysql> delimiter //
mysql> create procedure test_of_in(IN uId varchar(20))
    BEGIN
       select * from DemoTable2004 where UserId IN(uId);
    END
    //
Query OK, 0 rows affected (0.15 sec)
mysql> delimiter ;

5. ストアドプロシージャの呼び出し

作成したストアドプロシージャをCALL文で呼び出し、特定のレコードを取得します。

mysql> call test_of_in('23456_Carol');

実行結果は以下のとおりです。指定した「23456_Carol」のレコードだけが取得できていることがわかります。

+-------------+----------+
| UserId      | UserName |
+-------------+----------+
| 23456_Carol | Carol    |
+-------------+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.02 sec)

まとめ

このように、ストアドプロシージャの引数をIN()句に渡すことで、呼び出し時に任意の値を指定して特定のレコードのみを取得できます。複数の値を扱いたい場合には、FIND_IN_SET()や動的SQLを組み合わせる方法も検討するとよいでしょう。

  1. 【MySQL】ストアドプロシージャでパラメータを受け取り、動的SQLのLIKE句を使って新しいテーブルを作成する方法

    はじめにMySQLでは、ストアドプロシージャ内でパラメータを受け取り、その値を動的に組み立てたSQLのLIKE句に反映させて、新しいテーブルを作成することができます。このような処理にはプリペアドステートメント(PREPARE / EXECUTE)を使用します。本記事では、サンプルテーブルの作成からストアドプロシージャの定義、実行結果の確認まで、手順を追って解説します。1. サンプルテーブルの作成まず、元となるテーブル「DemoTable1973」を作成します。mysql> create table DemoTable1973     (  

  2. MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法

    MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable