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

相关推荐
dazhong20121 小时前
PLSQL 客户端连接 Oracle 数据库配置
数据库·oracle
路在脚下@2 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
了一li3 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
码农君莫笑4 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
别致的影分身4 小时前
使用C语言连接MySQL
数据库·mysql
京东零售技术5 小时前
“慢”增长时代的企业数据体系建设:超越数据中台
数据库
sdaxue.com6 小时前
帝国CMS:如何去掉帝国CMS登录界面的认证码登录
数据库·github·网站·帝国cms·认证码
o(╥﹏╥)6 小时前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
阿里嘎多学长7 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_7 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端