多表连接 JOIN

56.8 多表连接 JOIN

实际项目常有多张表,如 students 与 classes,通过 class_id 关联。

INNER JOIN:只返回两表都能匹配上的行。

LEFT JOIN:左表全部保留,右表无匹配则为 NULL。

学生与班级

import sqlite3

with sqlite3.connect('school.db') as conn:
    conn.executescript('''
    CREATE TABLE IF NOT EXISTS classes (
        id INTEGER PRIMARY KEY,
        name TEXT
    );
    CREATE TABLE IF NOT EXISTS students (
        id INTEGER PRIMARY KEY,
        name TEXT,
        class_id INTEGER
    );
    INSERT OR IGNORE INTO classes VALUES (1, '一班'), (2, '二班');
    ''')
    conn.execute('INSERT INTO students(name, class_id) VALUES (?,?)', ('小李', 1))
    sql = '''
    SELECT s.name, c.name
    FROM students s
    INNER JOIN classes c ON s.class_id = c.id
    '''
    print(conn.execute(sql).fetchall())