第235回に続いて今回も、第232回 MySQL Shell for VS Codeをインストールしてみるで紹介したMySQL Shell for VS Codeの基本的なデータの取得に関する紹介をしていきます。
今回は、取得したデータを扱う方法に関して紹介していきます。
検証環境
今回はDockerで建てたMySQLを使用します。以下のコマンドでDockerを建てて、ローカルからアクセスします。
% docker run --platform linux/x86_64 -p 127.0.0.1:3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_USER=kk2170 -e MYSQL_PASSWORD=my-secret-pw -d mysql:8.4.3 --secure-file-priv='/tmp'
今回はMySQL Shellをインストールして実行していきますが、いったん従来のmysqlクライアントでアクセスが可能であることを確認しましょう。方法は以下の通りです。
% mysql -uroot -pmy-secret-pw -h127.0.0.1 -P3307
執筆時点では、以下の通りMySQL 8.
mysql> select version(); +-----------+ | version() | +-----------+ | 8.4.3 | +-----------+ 1 row in set (0.01 sec)
今回も、第226回のテストデータとして第2回 MySQLにはじめてのデータを入れてみるで紹介されている--secure-file-priv='/tmp'
を指定しています。
コンテナ内にunzipが入っていないため、unzipからiconvまでのコマンドをローカルで行い、docker cp
でファイルを事前に送り、その後LOAD DATA INFILE
を実行しています。
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
というエラーが表示された場合は、KEN_--secure-file-priv
で指定を行っている'/tmp'配下にあるか確認してみてください。
VSCodeのインストールに関しては省略しますが、公式サイトからダウンロードして行います。
複数のSELECT文をまとめて実行する
では、zipcodeテーブルの結果を取得してみましょう。北海道と青森のデータをそれぞれ調べてみようと思います。クエリはSELECT * FROM zipcode WHERE prefecture = "北海道";SELECT * FROM zipcode WHERE prefecture = "青森県";
を指定してみましょう。
MySQL Shell for VS Codeでは、Notebookのコードブロック中にSELECT文を複数指定することができます。

上記のように入力してShift+Enterを押して実行をしてみましょう。

実行結果を見ると、RESULT #1とRESULT #2があるのがわかります。最初に実行した北海道を探すクエリがRESULT #1に、その後に実行した青森県を探すクエリがRESULT #2に指定されることがわかりました。
ここでSELECT * FROM zipcode WHERE prefecture IS NULL;
というクエリを実行してみましょう。
このクエリは都道府県がNULLのデータを探すクエリなのですが、そういった内容は存在しません。結果が0件になるクエリです。これを実行した結果が下記になります。

RESULT #3というタブが増えるかと思うかもしれませんが、OUTPUTというタブが増えていることがわかります。0件の場合、OUTPUTにOK, 0 records retrieved in 1.
と表示されています。0件のデータがある場合は注意をしましょう。
少し気になるのは、複数のクエリが0件になる場合です。その場合にどのような出力になるのでしょうか。先頭にも0件になるクエリを追加して実行して確認してみましょう。

この場合、先頭に行数が追加されているのがわかります。
取得したデータをテキストとして取得する
続いて、取得した結果をテキストとして受け取る方法を紹介します。
RESULT SET中の中のデータを右クリックします。

結果をテキストを受け取る方法は、大まかに分けて3種類あります。フィールドごとにデータを取得する方法と、1行ごとに取得する方法と、複数行を取得する方法になります。以下、各方法について説明します。
フィールドを取得する
カラムの内容を取得したい場合は、Copy Filed、Copy Field Unquotedが使用できます。
Copy Filedを選択すると、文字列の場合は
1行取得する
Copy Single Rowのメニューの中にある項目を使用すると、1行ずつ取得することができます。

メニューの中身は組み合わせになります。With Namesとついている場合はカラム名のヘッダーが取得できます。
# code, old_zipcode, zip_code, prefecture_kana, city_kana, town_kana, prefecture, city, town '01101', '060 ', '0600042', 'ホッカイドウ', 'サッポロシチュウオウク', 'オオドオリニシ(1-19チョウメ)', '北海道', '札幌市中央区', '大通西(1〜19丁目)'
上の結果はCopy Row With Namesのものです。
Unquotedとついているものに関しては、フィールドを取得する際と同様に行を取得する際に
複数行取得する
Copy Multiple Rowsのメニュー無いの項目を使用すると、複数行取得することができます。

AllとSelectedがありますが、名前の通り全件と選択した行のみ習得する違いになります。それ以外の単語に関してはすでに紹介しているので、省略させていただきます。
このように、クエリで確認した結果をテキストとして取り出すことができます。
まとめ
今回はMySQL Shell for VS Codeの結果を取得するTIPSに関して紹介を行いました。今後も便利な機能を見つけたら紹介していきます。