SQLite 数据库 多表连接案例 MULTI TABLE JOIN CASE

SQLite 数据库阿木 发布于 5 天前 2 次阅读


多表连接案例:SQLite 数据库中的关系查询

在数据库管理系统中,多表连接是一种常见的查询操作,它允许我们从多个表中检索数据,并根据表之间的关系来组合这些数据。SQLite 是一个轻量级的数据库管理系统,它支持多种类型的连接操作,包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)等。本文将围绕一个具体的案例,使用 SQLite 数据库进行多表连接操作,并详细解释相关的代码实现。

假设我们有一个在线书店的数据库,其中包含以下两个表:

1. `books` 表:存储书籍信息,包括书籍ID、书名、作者和价格。

2. `authors` 表:存储作者信息,包括作者ID、姓名和国籍。

我们的目标是查询所有书籍的名称、作者姓名和国籍,以及书籍的价格。

数据库表结构

我们需要定义两个表的SQL创建语句:

sql

CREATE TABLE authors (


author_id INTEGER PRIMARY KEY,


name TEXT NOT NULL,


nationality TEXT NOT NULL


);

CREATE TABLE books (


book_id INTEGER PRIMARY KEY,


title TEXT NOT NULL,


author_id INTEGER,


price REAL,


FOREIGN KEY (author_id) REFERENCES authors (author_id)


);


多表连接查询

为了实现多表连接,我们将使用 SQL 的 `JOIN` 语句。以下是实现上述查询的 SQL 代码:

sql

SELECT books.title, authors.name, authors.nationality, books.price


FROM books


JOIN authors ON books.author_id = authors.author_id;


在这个查询中,我们使用了内连接(INNER JOIN),它只会返回两个表中匹配的行。`JOIN` 子句指定了连接条件,即 `books.author_id` 和 `authors.author_id` 必须相等。

Python 代码实现

接下来,我们将使用 Python 和 SQLite 库来实现上述查询。我们需要安装 SQLite 库,但由于要求不使用外部安装,我们假设该库已经可用。

python

import sqlite3

连接到 SQLite 数据库


如果数据库不存在,会自动在当前目录创建一个数据库文件


conn = sqlite3.connect('bookstore.db')

创建一个 cursor 对象


cursor = conn.cursor()

创建表


cursor.execute('''CREATE TABLE IF NOT EXISTS authors (


author_id INTEGER PRIMARY KEY,


name TEXT NOT NULL,


nationality TEXT NOT NULL


)''')

cursor.execute('''CREATE TABLE IF NOT EXISTS books (


book_id INTEGER PRIMARY KEY,


title TEXT NOT NULL,


author_id INTEGER,


price REAL,


FOREIGN KEY (author_id) REFERENCES authors (author_id)


)''')

插入示例数据


cursor.execute("INSERT INTO authors (author_id, name, nationality) VALUES (1, 'J.K. Rowling', 'United Kingdom')")


cursor.execute("INSERT INTO authors (author_id, name, nationality) VALUES (2, 'George Orwell', 'United Kingdom')")


cursor.execute("INSERT INTO authors (author_id, name, nationality) VALUES (3, 'Agatha Christie', 'United Kingdom')")

cursor.execute("INSERT INTO books (book_id, title, author_id, price) VALUES (1, 'Harry Potter', 1, 29.99)")


cursor.execute("INSERT INTO books (book_id, title, author_id, price) VALUES (2, '1984', 2, 19.99)")


cursor.execute("INSERT INTO books (book_id, title, author_id, price) VALUES (3, 'Murder on the Orient Express', 3, 24.99)")

执行多表连接查询


cursor.execute("SELECT books.title, authors.name, authors.nationality, books.price FROM books JOIN authors ON books.author_id = authors.author_id")

获取查询结果


rows = cursor.fetchall()

打印查询结果


for row in rows:


print(f"Title: {row[0]}, Author: {row[1]}, Nationality: {row[2]}, Price: {row[3]}")

关闭连接


cursor.close()


conn.close()


总结

本文通过一个在线书店的案例,展示了如何在 SQLite 数据库中执行多表连接查询。我们首先定义了两个表的结构,并插入了示例数据。然后,我们使用 SQL 的 `JOIN` 语句实现了多表连接查询,并通过 Python 代码执行了这个查询,并打印了结果。

多表连接是数据库查询中的一项基本技能,它对于从多个相关表中检索和组合数据至关重要。通过理解多表连接的概念和实现方法,我们可以更有效地处理复杂的数据库查询任务。