高级查询

在企业环境中,数据库中往往有许多数据表,甚至业务会面对多个数据库。因此AI产品经理往往需要掌握高级查询与数据分析能力,如:构造多表关联查询与子查询,整合多维度数据等,从而帮助我们为进一步深入的数据分析做好数据准备。

什么是多表关联查询?

当数据库中有多个数据表时,为了从这些数据中获取有价值的洞察,我们需要进行多表关联查询。

关联查询(Join Query)是指通过在多个数据表之间建立连接关系,将各个表中的信息整合起来。常见的关联查询包括:

  • INNER JOIN:只返回两个表中匹配的数据。
  • LEFT JOIN:返回左边表的所有数据以及右边表中匹配的数据。
  • RIGHT JOIN:返回右边表的所有数据以及左边表中匹配的数据。

例如,假设你有两个数据表:用户表和订单表。你可以通过关联查询,将每个用户和其对应的订单信息结合起来。

在这个示例中,我们会使用Python内置的 sqlite3 模块,它是一个轻量级的关系型数据库管理系统。由于其简单、易用且功能强大的特点,SQLite 特别适合初学者和中小型项目。

下面是示例代码:

import sqlite3

# 连接数据库(或创建内存数据库)
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()

# 创建示例数据表:用户表和订单表
cursor.execute('''
CREATE TABLE users (
    user_id INTEGER PRIMARY KEY,
    name TEXT
)
''')

cursor.execute('''
CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY,
    user_id INTEGER,
    product TEXT,
    amount REAL,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
)
''')

# 插入示例数据
cursor.executemany("INSERT INTO users (name) VALUES (?)", [('Alice',), ('Bob',)])
cursor.executemany("INSERT INTO orders (user_id, product, amount) VALUES (?, ?, ?)", [
    (1, '电脑', 5000),
    (1, '鼠标', 100),
    (2, '键盘', 150)
])

# 使用 INNER JOIN 进行关联查询
cursor.execute('''
SELECT users.name, orders.product, orders.amount
FROM users
INNER JOIN orders ON users.user_id = orders.user_id
''')

for row in cursor.fetchall():
    print(row)

conn.close()

提示词示例:

提示词:

请帮我写一段 Python 代码,使用内置的 sqlite3 模块在内存中创建一个临时数据库。

  1. 创建两个数据表:users 和 orders。
    • users 表包含两个字段:user_id(主键)和 name。
    • orders 表包含四个字段:order_id(主键)、user_id(外键,关联到 users 表的 user_id)、product 和 amount。
  2. 向 users 表插入两个用户数据(例如 "Alice" 和 "Bob"),向 orders 表插入几条订单数据。
  3. 使用 INNER JOIN 查询出每个用户对应的订单信息,并打印查询结果。 请给出完整的代码。

什么是子查询?

子查询指的是在一个查询中嵌入另一个查询。它可以帮助你先提取一部分数据,然后将其作为条件应用于主查询中。例如,如果你想查找订单金额高于所有订单平均金额的订单,就可以使用子查询。

以下示例代码展示了如何利用子查询:

cursor.execute('''
SELECT order_id, user_id, amount
FROM orders
WHERE amount > (SELECT AVG(amount) FROM orders)
''')

在这个例子中,子查询先计算出所有订单的平均金额,然后主查询筛选出金额高于平均金额的订单。

提示词示例:

提示词:

请帮我写一段 Python 代码,使用内置的 sqlite3 模块连接到一个内存数据库,并创建一个名为 orders 的数据表,该表包含字段 order_id(主键)、user_id 和 amount。 之后,插入一些示例数据到 orders 表。

接下来,编写一条 SQL 查询,该查询使用子查询来计算所有订单的平均金额,并返回 order_id、user_id 和 amount,要求只返回 amount 大于所有订单平均金额的记录。

请生成完整代码。

练习:

在之前课程中,你使用Python创建了一个产品反馈系统的数据库和数据表。

现在,请在原有的 feedback_db 数据库中,再创建一个新的数据表,例如 products 表,用于存储产品的详细信息。建议字段包括:

  • product_id(主键)
  • product_name
  • product_category
  • release_date
  • price
  • 其他你认为对后续数据分析有帮助的字段

在新建数据表后,请在 feedback 表中增加了一个字段 product_id,表示反馈是针对哪款产品提出的。

然后,请使用 INNER JOIN 或其他关联查询方式,将 feedback 表和 products 表关联起来,查询出每条反馈对应的产品信息。例如,查询结果应显示用户反馈内容、评分、反馈类别以及产品名称、价格等信息。

另外,假设我们需要筛选出反馈中评分高于所有反馈平均评分的记录,或者筛选出反馈次数超过某个阈值的产品信息。

请利用子查询实现这一需求。例如,可以在 feedback 表中使用子查询计算所有反馈的平均评分,然后查询出评分高于该平均值的反馈记录。

请设计相应的提示词,完成代码输出。

AI 助教

提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。