🐣

[AWS-DB] RDSで動かしながら学ぶSQL基礎

に公開

目的

SQLの勉強をし直そうと思いました。
DBのデータを操作する魔法の文というイメージがSQLですが
せっかくなのでAWSのRDSの勉強も兼ねて一緒に学んでいこうというのが目的です。

RDS(PostgreSQL)を作成してみる

まずはAWSマネジメントコンソール → RDSでデータベースを作成します。

ここでPostgreSQLを選択します。
勉強のため標準作成をしていきます。

今回はただの練習なので無料利用枠を選択します。
また、DBインスタンスサイズをdb.t3.micro にしました。
VPCはデフォルトのものがあるみたいなのでそちらで構築します。

また、適当にユーザー名とパスワードを設定しておきましょう。

そして今回は自分のPCのIPアドレスからアクセス可能にするためパブリックアクセス: はい
で作成しておきます。

あとは、自分のPC(pgAdmin4)がインターネット経由でRDSの5432番ポートにアクセスできるように、セキュリティグループのインバウンドルールを編集しておきます。

これでRDSでtest-dbというデータベースを用意できました。
RDSの作成は完了です。

pgadmin4で接続してみる

次はpgadmin4に接続情報を書いていきます。
pgadin4を開いてServers右クリック→Register→Serverで追加できます。

そうしたら以下のような画面が登場します。ここでConnectionのところに接続情報を書いていきます。

書き方は
Hostname:RDSの「接続とセキュリティ」タブでクラスターエンドポイントをコピー
例: db-test.cluster-xxxxxxxx.ap-northeast-1.rds.amazonaws.com
Port: 5432
Username: DB作成時に設定したマスターユーザー名
Password: RDS作成時に設定したパスワード
Database: postgres(デフォルトDB名)
あとはGeneralのタブで表示名を決めてpgadmin4の接続設定は完了です。

自分の場合は名前RDS_connectで作成してみました。

最初からpostgresというデータベースができているみたいですね。

SQLの基礎を学んでみる

では実際にSQL文を実行してみましょう。
最初にデフォルトのpostgresのデータベースを右クリックしてQueryToolを召喚します。

ここで色々SQL文を試してみましょう。

CREATE TABLEでテーブルを作成

CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    city VARCHAR(50)
);

INSERTでデータを追加

INSERT INTO customers (name, age, city)
VALUES
('田中', 25, 'Tokyo'),
('松本', 32, 'Osaka'),
('須藤', 29, 'Nagoya');

SELECTでデータを取得

-- 全件取得
SELECT * FROM customers;
-- 特定の列だけ
SELECT name, age FROM customers;
-- 条件をつけて取得
SELECT * FROM customers WHERE city = 'Tokyo';
-- 並び替え
SELECT * FROM customers ORDER BY age DESC;

UPDATEでデータを変更

UPDATE customers
SET age = 26
WHERE name = '須藤';

DELETEでデータを削除

DELETE FROM customers WHERE name = '田中';

個人的にはWHERE句を試してみようと思います。
例えば複数条件のANDやORを試してみます。

今のところこのようなデータがあったとき

以下のSQLを投げると27歳以上なので松本さんと須藤さんのデータが取得されます。

SELECT * FROM customers WHERE age >= 27;


そして、大阪に住んでてかつ30歳以上みたいな複数条件検索でこのように松本を取得できます。

-- 大阪に住んでいて、かつ年齢が30以上
SELECT * FROM customers WHERE city = 'Osaka' AND age >= 30;


複数条件はANDで繋げて一つのSQL文にすることができるわけですね。

逆に松本以外、つまり、大阪以外の東京または・名古屋に住んでいる人はORで繋げます。

-- 東京または名古屋に住んでいる
SELECT * FROM customers WHERE city = 'Tokyo' OR city = 'Nagoya';


それかさっきのANDの条件のNOTで松本選択条件以外の場合のデータを取得できます。

SELECT * FROM customers WHERE NOT (city = 'Osaka' AND age >= 30);

AND、OR、NOT
ここらへんは便利で覚えておきたいですね。。

RDSインスタンス削除

今回テスト用に作ったRDSインスタンスは削除しておきます。
余計なリソースは削除した方が良さげです。

まとめ

クラウド上のDBってなんだという感じでしたが、これで色々学べました。
SQL文もAIでかけるやんじゃなくて、ちゃんと基礎を学んで自分で操作してみると面白いです。

Discussion