s

import sqlite3

conn = sqlite3.connect(“:memory:”)

cur = conn.cursor()

# テーブル作成

cur.executescript(“””

    CREATE TABLE orders (

        id INTEGER,

        customer_id INTEGER,

        amount INTEGER

    );

    CREATE TABLE customers (

        id INTEGER,

        name TEXT,

        country TEXT

    );

    INSERT INTO orders VALUES (1, 101, 5000);

    INSERT INTO orders VALUES (2, 102, 3000);

    INSERT INTO orders VALUES (3, 103, 8000);

    INSERT INTO orders VALUES (4, 999, 1000);  — 存在しない顧客

    INSERT INTO customers VALUES (101, ‘田中’, ‘日本’);

    INSERT INTO customers VALUES (102, ‘鈴木’, ‘日本’);

    INSERT INTO customers VALUES (103, ‘John’, ‘USA’);

    INSERT INTO customers VALUES (104, ‘李’,   ‘中国’);  — 注文なし顧客

“””)

print(“=” * 50)

print(“【JOIN】横につなぐ”)

print(“=” * 50)

print(“\n— INNER JOIN(両方に存在するもの)—“)

cur.execute(“””

    SELECT o.id, c.name, o.amount

    FROM orders o

    INNER JOIN customers c ON o.customer_id = c.id

“””)

for row in cur.fetchall():

    print(row)

print(“\n— LEFT JOIN(ordersを全部残す)—“)

cur.execute(“””

    SELECT o.id, c.name, o.amount

    FROM orders o

    LEFT JOIN customers c ON o.customer_id = c.id

“””)

for row in cur.fetchall():

    print(row)

print(“\n— RIGHT JOIN相当(customersを全部残す)—“)

cur.execute(“””

    SELECT o.id, c.name, o.amount

    FROM customers c

    LEFT JOIN orders o ON o.customer_id = c.id

“””)

for row in cur.fetchall():

    print(row)

print(“\n” + “=” * 50)

print(“【UNION】縦につなぐ”)

print(“=” * 50)

print(“\n— UNION(重複除去)—“)

cur.execute(“””

    SELECT name, country FROM customers WHERE country = ‘日本’

    UNION

    SELECT name, country FROM customers WHERE country = ‘USA’

“””)

for row in cur.fetchall():

    print(row)

print(“\n— UNION ALL(重複そのまま)—“)

cur.execute(“””

    SELECT country FROM customers

    UNION ALL

    SELECT country FROM customers

“””)

for row in cur.fetchall():

    print(row)

conn.close()

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