Playground

https://www.db-fiddle.com/

Tutorial

https://www.postgresqltutorial.com/

Playground で実行してみよう

# 左側の Schema SQL に書く
# テーブルの作成、レコードのインサートをする

## テーブルを作成し
CREATE TABLE tableName (
  id INT,
  name VARCHAR (255)
);

## 作成したテーブルにインサート
INSERT INTO tableName (id, name) VALUES (1, "nakanishi"), (2, "kihara");

# Query SQL に書く
# 既存の DB から値を参照する

## テーブル操作の結果を見る
SELECT * FROM tableName;

JS エンジニアがつまづくであろう ; , , の使い方

;, の使い方にかなり強い制限がある。

我々 JS エンジニアは ; を対して意味のない記号だと考えているが、SQL においては厳密に運用されている。

また , に関しては、トレイリングコンマのようにはいかないということを覚えておいて欲しい。

# コマンドの終わりには、必ず `;` が必須。ないとエラーになる。

CREATE TABLE tableName (
  id INT,
  name VARCHAR (255)
); <= これを絶対つける

INSERT INTO tableName (id, name) VALUES (1, "nakanishi"), (2, "kihara"); <= これを絶対つける

## 以下エラーの例
CREATE TABLE tableName (
  id INT,
  name VARCHAR (255)
)

INSERT INTO tableName (id, name) VALUES (1, "nakanishi"), (2, "kihara")
# item が複数あるときは、かならず `,` で区切る。ないとエラーになる。
# しかし item が単数の場合には、`,` をつけるとエラーになる。つまり、JS のようなトレイリングコンマは許容されない。

CREATE TABLE tableName (
  id INT, <= 複数 item あるケースなのでこれを絶対つける
  name VARCHAR (255)
);

CREATE TABLE tableName2 (
  id INT <= 単数 item のケースなのでこれを絶対つけてはダメ
);

INSERT INTO tableName (id, name) VALUES (1, "nakanishi"), <= 複数 item なので絶対つける (2, "kihara");

INSERT INTO tableName2 (id, name) VALUES (1, "nakanishi"), ; <= 単数 item なので `,` をつけたら絶対にだめ 

## 以下エラー例 なおしてみましょう

CREATE TABLE tableName (
  id INT
  name VARCHAR (255)
);

CREATE TABLE tableName2 (
  id INT,
);

JS エンジニアがつまづくであろう INSERT の引数

INSERT INTO の引数のような部分 (id, name) の部分は必ず、対象の table の Schema に存在するプロパティのみが許容される。

つまりここでは、id, name 以外の例えば blar を入れれば、エラーになる。

CREATE TABLE tableName (
  id INT,
  name VARCHAR (255)
);

INSERT INTO tableName (id, name) <= ここは必ず、table Schema にある property のみだけが許容される
VALUES (1, "nakanishi"), (2, "kihara");

INSERT INTO tableName (id, name, blar) <= テーブルスキーマに存在しないのでエラーになる
VALUES (1, "nakanishi"), (2, "kihara");

INSERT INTO の引数のような部分 (id, name) の部分は必ず、対象の table の Schema に存在するプロパティに存在すれば、どんな順番でもいい。

CREATE TABLE tableName (
  id INT,
  name VARCHAR (255)
);

INSERT INTO tableName (name, id) <= Schema にある property なのでどの順番でもいい
VALUES ("nakanishi", 1), ("kihara", 2);

INSERT INTO tableName (id, name) <= 順番を変えても OK
VALUES (1, "nakanishi"), (2, "kihara");

Values の並びは INSERT INTO の引数のような部分 (id, name) で指定した順番となる

CREATE TABLE tableName (
  id INT,
  name VARCHAR (255)
);

INSERT INTO tableName (name, id) <= name, id の順番なので
VALUES ("nakanishi", 1), ("kihara", 2); <= VALUES の値も、name, id の順番にする

INSERT INTO tableName (id, name) <= id, name の順番なので
VALUES (1, "nakanishi"), (2, "kihara"); <= VALUES の値も、id, name の順番にする

メモ

## playgorund だと動かないが、table 名を全て取得する
#show tables
SELECT * FROM pg_catalog.pg_tables;
# table schema を取得する

SELECT * FROM information_schema.columns WHERE TABLE_NAME = 'users';