近期我找工作很多岗位问到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哈哈,希望各位大佬给我点歌星星!