如何在 Jupyter Notebook 执行和学习 SQL 语句(上)—— 基本原理详解和相关库安装篇

近期我找工作很多岗位问到sql,由于我简历上有写,加上我实习的时候确实运用了,所以我还是准备复习一下SQL语句,常见的内容,主要包括一些内容,比如SQL基础(主要是取数select,毕竟用的时候基本上不会让我一个实习生进行一个删除之类的操作)和一些进阶的用法比如窗口函数之类的!

FROM:指定表格或视图,支持多表连接。

WHERE:条件过滤,筛选符合条件的行。

GROUP BY:按指定列分组,通常配合聚合函数使用。

HAVING:分组后的条件过滤,应用于聚合结果。

ORDER BY:排序结果,默认升序,支持降序。

LIMIT:限制返回的行数,常用于分页。

|--------------|------------------------------|--------------------------------------------------|-----------------------------------------------------------------------|
| 步骤 | 功能说明 | 常用方法 | 示例 |
| SELECT | 选择要返回的列、表达式、聚合函数 | - 列名 | SELECT name, SUM(price), COUNT(id) |
| SELECT | 选择要返回的列、表达式、聚合函数 | - 聚合函数(COUNT, SUM, AVG, MAX, MIN) | SELECT CASE WHEN age > 18 THEN 'Adult' ELSE 'Child' END AS age_group |
| SELECT | 选择要返回的列、表达式、聚合函数 | - CASE 表达式 | |
| FROM | 指定要查询的表格或视图 | - 单表查询 | FROM users u JOIN transactions t ON u.id = t.user_id |
| FROM | 指定要查询的表格或视图 | - 多表连接 (JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN) | FROM users u JOIN transactions t ON u.id = t.user_id |
| FROM | 指定要查询的表格或视图 | - 笛卡尔积 (CROSS JOIN) | FROM users u JOIN transactions t ON u.id = t.user_id |
| WHERE | 条件过滤,筛选符合条件的行 | - 条件运算符 (=, <>, >, <, BETWEEN) | WHERE age > 25 |
| WHERE | 条件过滤,筛选符合条件的行 | - 模式匹配 (LIKE, RLIKE) | WHERE email LIKE '%example.com' |
| WHERE | 条件过滤,筛选符合条件的行 | - 集合运算 (IN, EXISTS) | WHERE id IN (SELECT id FROM other_table) |
| GROUP BY | 对结果按某些列进行分组,通常配合聚合函数使用 | - 列名分组 | GROUP BY user_id |
| GROUP BY | 对结果按某些列进行分组,通常配合聚合函数使用 | - 多列分组 (GROUP BY col1, col2) | GROUP BY department, role |
| HAVING | 在分组后的结果上进一步过滤,通常用于聚合结果 | - 聚合函数条件 (HAVING SUM(price) > 1000) | HAVING COUNT(*) > 2 |
| HAVING | 在分组后的结果上进一步过滤,通常用于聚合结果 | - 聚合函数条件 (HAVING SUM(price) > 1000) | HAVING SUM(total_price) > 500 |
| ORDER BY | 对结果进行排序,按指定列升序(ASC)或降序(DESC) | - 按单列排序 (ORDER BY col) | ORDER BY transaction_date DESC |
| ORDER BY | 对结果进行排序,按指定列升序(ASC)或降序(DESC) | - 按多列排序 (ORDER BY col1 ASC, col2 DESC) | ORDER BY name ASC, age DESC |
| LIMIT | 限制返回的行数,通常用于分页 | - LIMIT | LIMIT 10 |
| LIMIT | 限制返回的行数,通常用于分页 | - OFFSET | LIMIT 10 OFFSET 20 |

然后由于我在自己的小破电脑上没有安装SQL的环境,但还是想要联系一下,除了牛客我只能选择了在Jupyter Notebook中使用SQL,我通过以下步骤创建一个数据库并连接到该数据库:

1. 安装SQLite和SQLAlchemy

SQLite 是一个轻量级的数据库系统,适合本地小型项目。SQLAlchemy 是一个强大的数据库连接工具,可以在Jupyter中方便地运行SQL查询。

在Jupyter Notebook的单元格中运行以下命令来安装:

bash 复制代码
!pip install sqlalchemy sqlite

2. 创建SQLite数据库

SQLite数据库是一个文件,我选择直接在本地创建一个SQLite数据库文件。

sql 复制代码
import sqlite3

# 创建一个名为 example.db 的SQLite数据库
conn = sqlite3.connect('example.db')

# 创建游标对象,用于执行SQL语句
cursor = conn.cursor()

# 创建一个示例表格
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
    )
''')

# 插入一些数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")

# 提交事务保存数据
conn.commit()

# 关闭连接
conn.close()

3. 连接到数据库并查询

再次打开连接并执行SQL查询。

python 复制代码
# 重新连接到数据库
conn = sqlite3.connect('example.db')

# 使用 pandas 方便读取 SQL 查询结果
import pandas as pd

# 查询数据
query = "SELECT * FROM users"
df = pd.read_sql_query(query, conn)

# 展示数据
print(df)

# 关闭连接
conn.close()

1. 基础SQL操作------简历一个数据表

execute()使用这个方法就可以轻松在python的环境中是执行一些sql语言,由于我本人没有安装sql的环境,我为了紧急复习一下sql也是煞费苦心

创建数据库和表,插入数据:
python 复制代码
import sqlite3

# 创建SQLite数据库并连接
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 创建用户表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL,
        email TEXT
    )
''')

# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com')")
cursor.execute("INSERT INTO users (name, age, email) VALUES ('Bob', 30, 'bob@example.com')")
cursor.execute("INSERT INTO users (name, age, email) VALUES ('Charlie', 35, 'charlie@example.com')")
cursor.execute("INSERT INTO users (name, age, email) VALUES ('David', 40, 'david@example.com')")

conn.commit()
conn.close()

查询数据:

python 复制代码
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 查询所有用户
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row)

conn.close()

比如user表长这样!

然后是这个表格

然后是

下一篇我将从所有类型的数据,比如数值数据和字符数据,和时间数据的种种操作,和一些常见函数比如sum()之类简单函数和子查询和窗口函数大法的理论(超级常用),进行一个系统的复习!下下篇是我珍藏已久的实战操作题目,一个题包含了种种做法!基本上我感觉学会了我珍藏的实战题目,其他的都无敌了。

代码即将开源在github哈哈,希望各位大佬给我点歌星星!

相关推荐
sheng12345678rui28 分钟前
mfc100.dll丢失的解决方法-电脑基础知识
数据库·microsoft·电脑·dll修复工具·1024程序员节
nice6666037 分钟前
初识JDBC
java·数据库·sql·mysql·idea
贩卖纯净水.1 小时前
MySQL架构和存储引擎
数据库·mysql·架构
java1234_小锋1 小时前
为什么需要MQ消息系统,mysql 不能满足需求吗?
数据库·mysql
Karoku0662 小时前
【缓存与加速技术实践】Redis 高可用
运维·服务器·数据库·redis·mysql·缓存
Karoku0662 小时前
【缓存与加速技术实践】Redis 主从复制
linux·运维·服务器·数据库·redis·缓存
尘浮生3 小时前
Java项目实战II基于Spring Boot的火锅店管理系统设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·旅游
海波东3 小时前
oracle和mysql的区别常用的sql语句
sql·mysql·oracle
FIN技术铺3 小时前
Redis有什么不一样?
数据库·redis·缓存
华为云开发者联盟3 小时前
遇到慢查询怎么办?一文解读MySQL 8.0查询分析工具
sql·mysql·查询分析·explain analyze