CONTENTS コンテンツ

SQLを学ぼう!(2)

学習編-SQL

2024.06.18

 生成AIで架空のポケモンを作るためのデータベースを作る過程で必要になったSQLについて学んでいます。今回はCREATE文の問題演習から。ChatGPTに作らせた問題を解いています。

問題 2: テーブルの作成と外部キー制約

以下の要件を満たすSQLのCREATE文を作成してください。

  • テーブル名はorders
  • order_idカラムは整数型で、プライマリキーであり、自動インクリメントされる。
  • order_dateカラムは日付型で、NULL値を許可しない。
  • customer_idカラムは整数型で、customersテーブルのidカラムを参照する外部キー制約を持つ。

回答:

CREATE TABLE orders(
order_id INTEGER autoincrement,
prymary key(order_id),
order_date ,#日付型を指定する方法がわからない
customer_id integer
foreign key(customer_id) references customers(id),
);

ChatGPTによる採点:

問題2の正しい答えを以下に示します。日付型の指定方法を含めて修正しました。

問題2の答え

CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY AUTOINCREMENT,
    order_date DATE NOT NULL,
    customer_id INTEGER,
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);

解説

  1. テーブルの作成:
    • CREATE TABLE ordersは、新しいテーブルordersを作成します。
  2. カラムの定義:
    • order_id INTEGER PRIMARY KEY AUTOINCREMENT: order_idカラムは整数型で、プライマリキーです。また、自動インクリメントされます。
    • order_date DATE NOT NULL: order_dateカラムは日付型で、NULL値を許可しません。
    • customer_id INTEGER: customer_idカラムは整数型です。
  3. 外部キー制約の設定:
    • FOREIGN KEY (customer_id) REFERENCES customers(id): customer_idカラムがcustomersテーブルのidカラムを参照する外部キーであることを指定します。

修正点の詳細

  1. order_idカラムの修正:
    • autoincrementPRIMARY KEYの部分に移動しました。AUTOINCREMENTは自動インクリメントを指定します。
  2. 日付型の指定:
    • order_dateカラムにDATEデータ型を指定しました。
  3. 外部キー制約の位置:
    • FOREIGN KEY (customer_id) REFERENCES customers(id)の位置を修正しました。

これで、ordersテーブルが正しく作成され、日付型の指定と外部キー制約が適切に設定されます。

 見た感じ、DATE型とNOT NULL指定以外は合ってそうだ。こんな感じで自分の解答とChatGPTの解答を見比べて問題演習していこう。問題は全5問あって、問題3~5は以下。

問題 3: デフォルト値の設定
以下の要件を満たすSQLのCREATE文を作成してください。

テーブル名はproducts。
product_idカラムは整数型で、プライマリキーであり、自動インクリメントされる。
product_nameカラムは文字列型で、NULL値を許可しない。
priceカラムは実数型で、デフォルト値は0.0。
created_atカラムはタイムスタンプ型で、デフォルト値は現在のタイムスタンプ。

 問題3はデフォルト値の指定をDEFAULT (デフォルト値)で指定する文法、問題4はUNIQUE文、問題5は複数プライマリーキーの設定。初見知識はわからないが、初見部分以外は正しくかけていた。まぁ初手の初手から躓いているようでは困るか。

次回に続く

この記事をシェアする