😎

VSCodeでSQLを書く環境を整えて、LeetCodeの問題を解く

2021/07/11に公開約2,800字

概要

VSCodeでSQLを書いて、ショートカットで実行できる環境を整えてみました。また、LeetCodeにSQLの問題があるので、それを解いて使い心地を確認してみました。

本記事ではMySQLを使っていますが、今回使った拡張機能は、Microsoft SQL Server/PostgreSQL/SQLite/MongoDB/Redis/Elasticsearchにも対応しているようです。またLeetCodeのSQLの問題では、MySQL/Microsoft SQL Server/Oracleの3つから選択することが出来ます。

SQLを書くときに求めること

  • クエリを快適に編集できる
  • クエリをショートカットで実行できて、結果がすぐ確認できる
  • (できれば)テーブルのデータやスキーマを確認できる

手順

  • データベースのセットアップ
  • 拡張機能の設定
    • インストール・DBとの接続
  • LeetCodeの問題を解いてみる

データベースのセットアップ

今回はMySQLを使います。docker-compose.ymlを作成して、以下を入力します(ホストのMySQLを使っても大丈夫です)。

docker-compose.yml
version: "3.8"

services:
  db:
    image: mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=leetcode

docker-compose.ymlを作成したら、以下を実行してコンテナを起動します。

# コンテナの起動
docker-compose up -d

# コンテナが起動していることを確認
docker-compose ps

拡張機能の設定

拡張機能のウィンドウからmysqlで検索して、以下の拡張機能をインストールします。拡張機能の名前はMySQLですが、先述の通り他にも色々なデータベースに対応しているようです。

mysql extension

インストールすると、左のアクティビティバーにアイコンが2つ追加されます。2つのうち上側のアイコンをクリック後、サイドバー右上の+ボタンをクリックすると、接続情報の入力画面が表示されます。パスワードの欄には、上のdocker-compose.ymlで作成した場合はpasswordと入力します。Connectをクリックしてsuccess!と表示されればOKです。

次にクエリを書けるようにします。データベース名の横のファイルアイコンをクリックすると、拡張子がsqlのファイルが作成されます。[1]

試しにファイルに以下を入力して実行してみます。

show databases;

実行は、クエリの上に表示されるRun SQLをクリックするか、Ctrl+Enterでできます。実行すると、右側に結果が表示されます。

LeetCodeの問題を解いてみる

以下の問題を解いてみます。

https://leetcode.com/problems/customers-who-never-order/

顧客テーブル(Customers)と注文テーブル(Orders)が与えられるので、注文をしていない顧客の名前を求める問題です。

まず、DBにデータを投入します。問題上部のSQL Schemaをクリックすると、モーダルが出現してデータを作成するクエリが表示されるので、コピーしてVSCodeに貼り付けます。


なぜか末尾にセミコロンがついていないので追加します。Ctrl+Shift+Enterで、現在のファイルの全てのクエリを実行できるので、実行してデータを作成します。

データが作成出来れば、解答を作成していきます。以下のように素直にNOT EXISTSを使って実装してみました。

select
  Name as Customers
from
  Customers
where
  not exists (
    select *
    from Orders
    where Orders.CustomerId = Customers.Id
  )
;

クエリを作成したら、Ctrl+Enterで実行して、正しい答えが出ているか確認します。

正しい答えが出たら、LeetCodeの右側の画面にペーストして提出します。Successと表示されれば正解です!

微調整

いくつか使いづらかった箇所があったので調整しました。

  • Enterを押すと変換が確定される。例えばselectを小文字で入力して改行しようとすると、SELECTに変換されてしまう。
    • VSCodeのsetting.jsonに以下を追加して、Enterで確定しないようにしました。
    "editor.acceptSuggestionOnEnter": "off"
    
  • クエリの上のRun SQLが幅を取っている。ショートカットで実行するので非表示にしたい。
    • VSCodeのsetting.jsonに以下を追加しました。
    "database-client.disableSqlCodeLen": true
    

最後に

SQLを書くのにおすすめの方法やツールがあれば教えて下さい!

脚注
  1. ファイルを作成したときに、この拡張機能とデータベースの接続が確立されるようなので、別のファイルからクエリを実行することも出来ます。 ↩︎

GitHubで編集を提案

Discussion

ログインするとコメントできます