MySQL道普請便り

第238回MySQL Shell for VS Codeを活用してみる[その2]

第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.4.3を使用しております。

mysql>  select version();
+-----------+
| version() |
+-----------+
| 8.4.3     |
+-----------+
1 row in set (0.01 sec)

今回も、第226回のテストデータとして第2回 MySQLにはじめてのデータを入れてみるで紹介されている「サンプルデータその3、KEN_ALL.CSV」のデータを利用して行うため、--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_ALL_CSV_UTF8.csvを置いたファイルが--secure-file-privで指定を行っている'/tmp'配下にあるか確認してみてください。

VSCodeのインストールに関しては省略しますが、公式サイトからダウンロードして行います。

複数のSELECT文をまとめて実行する

では、zipcodeテーブルの結果を取得してみましょう。北海道と青森のデータをそれぞれ調べてみようと思います。クエリはSELECT * FROM zipcode WHERE prefecture = "北海道";SELECT * FROM zipcode WHERE prefecture = "青森県";を指定してみましょう。

MySQL Shell for VS Codeでは、Notebookのコードブロック中にSELECT文を複数指定することができます。

複数SELECT文のクエリ
複数SELECT文のクエリ

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

複数SELECTした場合の結果
複数SELECTした場合の結果

実行結果を見ると、RESULT #1とRESULT #2があるのがわかります。最初に実行した北海道を探すクエリがRESULT #1に、その後に実行した青森県を探すクエリがRESULT #2に指定されることがわかりました。

ここでSELECT * FROM zipcode WHERE prefecture IS NULL;というクエリを実行してみましょう。

このクエリは都道府県がNULLのデータを探すクエリなのですが、そういった内容は存在しません。結果が0件になるクエリです。これを実行した結果が下記になります。

複数SELECT文のクエリ(結果が0件の場合)
複数SELECT文のクエリ(0件の結果がある場合)

RESULT #3というタブが増えるかと思うかもしれませんが、OUTPUTというタブが増えていることがわかります。0件の場合、OUTPUTにOK, 0 records retrieved in 1.003msと表示されています。0件のデータがある場合は注意をしましょう。

少し気になるのは、複数のクエリが0件になる場合です。その場合にどのような出力になるのでしょうか。先頭にも0件になるクエリを追加して実行して確認してみましょう。

0件になるクエリが複数ある場合
0件になるクエリが複数ある場合

この場合、先頭に行数が追加されているのがわかります。

取得したデータをテキストとして取得する

続いて、取得した結果をテキストとして受け取る方法を紹介します。

RESULT SET中の中のデータを右クリックします。

結果を右クリックした時のメニュー
結果を右クリックした時のメニュー

結果をテキストを受け取る方法は、大まかに分けて3種類あります。フィールドごとにデータを取得する方法と、1行ごとに取得する方法と、複数行を取得する方法になります。以下、各方法について説明します。

フィールドを取得する

カラムの内容を取得したい場合は、Copy Filed、Copy Field Unquotedが使用できます。

Copy Filedを選択すると、文字列の場合は「'」で囲われた文字列を取得できます。prefectureの値を取得すると「'北海道'」となります。prefectureの値を選択してCopy Filed Unquotedを選択すると「北海道」のテキストが得られます。

1行取得する

Copy Single Rowのメニューの中にある項目を使用すると、1行ずつ取得することができます。

1行取得するメニュー
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とついているものに関しては、フィールドを取得する際と同様に行を取得する際に「'」が無いものになります。Tab Separatedに関しては、カンマ区切りではなくタブ区切りで取得できます。

複数行取得する

Copy Multiple Rowsのメニュー無いの項目を使用すると、複数行取得することができます。

複数行取得するメニュー
複数行取得するメニュー

AllとSelectedがありますが、名前の通り全件と選択した行のみ習得する違いになります。それ以外の単語に関してはすでに紹介しているので、省略させていただきます。

このように、クエリで確認した結果をテキストとして取り出すことができます。

まとめ

今回はMySQL Shell for VS Codeの結果を取得するTIPSに関して紹介を行いました。今後も便利な機能を見つけたら紹介していきます。

おすすめ記事

記事・ニュース一覧