多表连接 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())