Oracleデータベースでの操作を学ぶ際、サンプル表を作成してデータを操作することは非常に有効です。本記事では、オラクルで使用できるサンプル表を作成するSQL文を紹介し、それらを使った簡単なSELECT文や結合(JOIN)の実例もあわせて解説します。さらに、実務に役立つアドバンスな結合例も加えて、より深い学びを提供します。
リンク
リンク
リンク
サンプル表の作成
以下のSQL文を使用して、基本的なサンプル表を作成します。これらは、さまざまなデータ操作の練習に適しています。
1. 社員管理用の「EMPLOYEES」表
CREATE TABLE EMPLOYEES (
EMPLOYEE_ID NUMBER(6) PRIMARY KEY,
FIRST_NAME VARCHAR2(50),
LAST_NAME VARCHAR2(50),
HIRE_DATE DATE,
SALARY NUMBER(8, 2),
DEPARTMENT_ID NUMBER(4)
);
INSERT INTO EMPLOYEES VALUES (1, 'Taro', 'Yamada', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 500000, 10);
INSERT INTO EMPLOYEES VALUES (2, 'Hanako', 'Tanaka', TO_DATE('2022-06-15', 'YYYY-MM-DD'), 600000, 20);
INSERT INTO EMPLOYEES VALUES (3, 'Jiro', 'Suzuki', TO_DATE('2021-03-20', 'YYYY-MM-DD'), 450000, 10);
2. 商品管理用の「PRODUCTS」表
CREATE TABLE PRODUCTS (
PRODUCT_ID NUMBER(5) PRIMARY KEY,
PRODUCT_NAME VARCHAR2(100),
CATEGORY VARCHAR2(50),
PRICE NUMBER(10, 2),
STOCK NUMBER(5)
);
INSERT INTO PRODUCTS VALUES (101, 'Laptop', 'Electronics', 120000.50, 50);
INSERT INTO PRODUCTS VALUES (102, 'Smartphone', 'Electronics', 80000.00, 150);
INSERT INTO PRODUCTS VALUES (103, 'Desk Chair', 'Furniture', 15000.75, 20);
3. 注文管理用の「ORDERS」表
CREATE TABLE ORDERS (
ORDER_ID NUMBER(8) PRIMARY KEY,
ORDER_DATE DATE,
CUSTOMER_NAME VARCHAR2(100),
PRODUCT_ID NUMBER(5),
QUANTITY NUMBER(3),
TOTAL_PRICE NUMBER(10, 2),
CONSTRAINT FK_PRODUCT FOREIGN KEY (PRODUCT_ID) REFERENCES PRODUCTS(PRODUCT_ID)
);
INSERT INTO ORDERS VALUES (1001, TO_DATE('2023-01-05', 'YYYY-MM-DD'), 'Alice', 101, 2, 240001.00);
INSERT INTO ORDERS VALUES (1002, TO_DATE('2023-01-10', 'YYYY-MM-DD'), 'Bob', 102, 1, 80000.00);
INSERT INTO ORDERS VALUES (1003, TO_DATE('2023-02-15', 'YYYY-MM-DD'), 'Charlie', 103, 3, 45002.25);
4. 部署情報を管理する「DEPARTMENTS」表
CREATE TABLE DEPARTMENTS (
DEPARTMENT_ID NUMBER(4) PRIMARY KEY,
DEPARTMENT_NAME VARCHAR2(100),
MANAGER_ID NUMBER(6)
);
INSERT INTO DEPARTMENTS VALUES (10, 'Sales', 1);
INSERT INTO DEPARTMENTS VALUES (20, 'HR', 2);
INSERT INTO DEPARTMENTS VALUES (30, 'IT', NULL);
簡単なSELECT文の例
1. 全データの取得
テーブル内のすべてのデータを取得する基本的なクエリです。
EMPLOYEESテーブル
SELECT * FROM EMPLOYEES;
結果例:
EMPLOYEE_ID | FIRST_NAME | LAST_NAME | HIRE_DATE | SALARY | DEPARTMENT_ID |
---|---|---|---|---|---|
1 | Taro | Yamada | 2023-01-01 | 500000 | 10 |
2 | Hanako | Tanaka | 2022-06-15 | 600000 | 20 |
3 | Jiro | Suzuki | 2021-03-20 | 450000 | 10 |
2. 条件付きのデータ取得
特定の条件に合致するデータを抽出する例です。
SALARYが50万円以上の社員を取得
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY >= 500000;
結果例:
FIRST_NAME | LAST_NAME | SALARY |
Taro | Yamada | 500000 |
Hanako | Tanaka | 600000 |
3. データのソート
データを特定の列でソートして取得します。
SALARYの降順で社員情報を取得
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC;
結果例:
FIRST_NAME | LAST_NAME | SALARY |
Hanako | Tanaka | 600000 |
Taro | Yamada | 500000 |
Jiro | Suzuki | 450000 |
サンプル表を使った結合の実例
1. 社員と部署情報の結合
社員情報と部署情報を結びつけて、社員が所属する部署名を取得する例です。
SELECT
e.EMPLOYEE_ID,
e.FIRST_NAME || ' ' || e.LAST_NAME AS FULL_NAME,
d.DEPARTMENT_NAME
FROM
EMPLOYEES e
LEFT JOIN
DEPARTMENTS d
ON
e.DEPARTMENT_ID = d.DEPARTMENT_ID;
結果例:
EMPLOYEE_ID | FULL_NAME | DEPARTMENT_NAME |
1 | Taro Yamada | Sales |
2 | Hanako Tanaka | HR |
3 | Jiro Suzuki | Sales |
2. 注文情報と商品情報の結合
注文情報に商品情報を結びつけて、注文された商品の名前を取得する例です。
SELECT
o.ORDER_ID,
o.CUSTOMER_NAME,
p.PRODUCT_NAME,
o.QUANTITY,
o.TOTAL_PRICE
FROM
ORDERS o
INNER JOIN
PRODUCTS p
ON
o.PRODUCT_ID = p.PRODUCT_ID;
結果例:
ORDER_ID | CUSTOMER_NAME | PRODUCT_NAME | QUANTITY | TOTAL_PRICE |
1001 | Alice | Laptop | 2 | 240001.00 |
1002 | Bob | Smartphone | 1 | 80000.00 |
1003 | Charlie | Desk Chair | 3 | 45002.25 |
アドバンス結合の例
商品カテゴリごとの売上集計
商品カテゴリごとに売上を集計し、在庫数も確認できる例です。
SELECT
p.CATEGORY,
SUM(o.TOTAL_PRICE) AS TOTAL_SALES,
SUM(p.STOCK) AS TOTAL_STOCK
FROM
PRODUCTS p
LEFT JOIN
ORDERS o
ON
p.PRODUCT_ID = o.PRODUCT_ID
GROUP BY
p.CATEGORY;
結果例:
CATEGORY | TOTAL_SALES | TOTAL_STOCK |
Electronics | 320001.00 | 200 |
Furniture | 45002.25 | 20 |
まとめ
これらのサンプル表と結合例を活用することで、実践的なSQLスキルを効率的に磨けます。
練習のポイント
- 基本的なクエリの理解: SELECT文の構文や条件の設定を学ぶ。
- JOINの応用: INNER JOIN、LEFT JOIN、RIGHT JOINの違いを体感。
- 集計と分析: GROUP BYや集計関数を駆使してデータを深掘り。
これらを実際のOracle環境で試して、業務で活用できる知識を身につけてください!
[参考]
Oracle Database SQL言語リファレンス 19c
コメント