VSCodeでSQLを書く環境を整えて、LeetCodeの問題を解く
概要
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を使っても大丈夫です)。
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ですが、先述の通り他にも色々なデータベースに対応しているようです。
インストールすると、左のアクティビティバーにアイコンが2つ追加されます。2つのうち上側のアイコンをクリック後、サイドバー右上の+ボタンをクリックすると、接続情報の入力画面が表示されます。パスワードの欄には、上のdocker-compose.ymlで作成した場合はpasswordと入力します。Connectをクリックしてsuccess!と表示されればOKです。
次にクエリを書けるようにします。データベース名の横のファイルアイコンをクリックすると、拡張子がsqlのファイルが作成されます。[1]
試しにファイルに以下を入力して実行してみます。
show databases;
実行は、クエリの上に表示されるRun SQLをクリックするか、Ctrl+Enterでできます。実行すると、右側に結果が表示されます。
LeetCodeの問題を解いてみる
以下の問題を解いてみます。
顧客テーブル(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を書くのにおすすめの方法やツールがあれば教えて下さい!
-
ファイルを作成したときに、この拡張機能とデータベースの接続が確立されるようなので、別のファイルからクエリを実行することも出来ます。 ↩︎
Discussion