[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