如何在 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哈哈,希望各位大佬给我点歌星星!

相关推荐
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU6 小时前
三大范式和E-R图
数据库