オラクル実機操作に使えるサンプル表と結合の実例

オラクルデータベースの基本

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_IDFIRST_NAMELAST_NAMEHIRE_DATESALARYDEPARTMENT_ID
1TaroYamada2023-01-0150000010
2HanakoTanaka2022-06-1560000020
3JiroSuzuki2021-03-2045000010

2. 条件付きのデータ取得

特定の条件に合致するデータを抽出する例です。

SALARYが50万円以上の社員を取得

SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY >= 500000;

結果例:

FIRST_NAMELAST_NAMESALARY
TaroYamada500000
HanakoTanaka600000

3. データのソート

データを特定の列でソートして取得します。

SALARYの降順で社員情報を取得

SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC;

結果例:

FIRST_NAMELAST_NAMESALARY
HanakoTanaka600000
TaroYamada500000
JiroSuzuki450000

サンプル表を使った結合の実例

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_IDFULL_NAMEDEPARTMENT_NAME
1Taro YamadaSales
2Hanako TanakaHR
3Jiro SuzukiSales

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_IDCUSTOMER_NAMEPRODUCT_NAMEQUANTITYTOTAL_PRICE
1001AliceLaptop2240001.00
1002BobSmartphone180000.00
1003CharlieDesk Chair345002.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;

結果例:

CATEGORYTOTAL_SALESTOTAL_STOCK
Electronics320001.00200
Furniture45002.2520

まとめ

これらのサンプル表と結合例を活用することで、実践的なSQLスキルを効率的に磨けます。

練習のポイント

  1. 基本的なクエリの理解: SELECT文の構文や条件の設定を学ぶ。
  2. JOINの応用: INNER JOIN、LEFT JOIN、RIGHT JOINの違いを体感。
  3. 集計と分析: GROUP BYや集計関数を駆使してデータを深掘り。

これらを実際のOracle環境で試して、業務で活用できる知識を身につけてください!

[参考]
Oracle Database SQL言語リファレンス 19c

コメント

タイトルとURLをコピーしました