服务创造价值、存在造就未来
哈喽,大家好!
我是老陈,这节课一起来学习数据库。数据库是专门用于存储、管理、检索和维护数据的系统, 关系数据库是一种基于关系模型(由表、行、列组成的二维结构)的数据库系统,核心特点是通过结构化的表格存储数据,并利用SQL 进行数据操作,广泛应用于各类业务系统。
这些是市面上常见的关系数据库,大家了解一下即可。在企业开发时,后端常用的是MySql数据库,App端用的则是Sqlite数据库。对于绝大多数程序员而言,掌握操作数据库的结构化查询语言(SQL),是绕不开的基础技能。
下面我们就用SQLite 数据库学习SQL。
首先去DB Browser for SQLite的官网http://sqlitebrowser.org/下载SQLite 操作工具,它是一个高品质,可视化,开放源码的工具。用于创建,设计和编辑 SQLite 数据库文件。下载安装自己搞定。
打开DB Browser for SQLite,点击【新建数据库】,选择存放路径,输入数据库名称 crm,点击【保存】。
我们学习用SQL创建表,关闭这个窗口。
打开【执行SQL】编辑器。SQL是通用的。不管你用什么工具、什么数据库(MySQL、PostgreSQL 等),SQL大同小异,学会了在哪儿都能用。
1. 创建表结构SQL
-- 1. 创建users表 CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL, email TEXT UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 2. 创建orders表 CREATE TABLE IF NOT EXISTS orders ( order_id INTEGER PRIMARY KEY, user_id INTEGER, order_date TIMESTAMP, amount NUMERIC(10,2), FOREIGN KEY (user_id) REFERENCES users(id) );2. 插入数据
-- 1. 插入数据 INSERT INTO users (username, email) VALUES (user1, user1@example.com) ; --2.批量插入20条用户数据 INSERT INTO users (username, email) VALUES (user2, user2@example.com), (user3, user3@example.com), (user4, user4@example.com), (user5, user5@example.com), (user6, user6@example.com), (user7, user7@example.com), (user8, user8@example.com), (user9, user9@example.com), (user10, user10@example.com), (user11, user11@example.com), (user12, user12@example.com), (user13, user13@example.com), (user14, user14@example.com), (user15, user15@example.com), (user16, user16@example.com), (user17, user17@example.com), (user18, user18@example.com), (user19, user19@example.com), (user20, user20@example.com), (user21, user21@example.com); --3. 批量插入20条订单数据(关联到用户ID 1-20) INSERT INTO orders (user_id, order_date, amount) VALUES (1, 2025-01-01, 100.00), (1, 2025-01-01, 300.00), (2, 2025-01-02, 150.50), (2, 2025-01-02, 650.20), (3, 2025-01-03, 75.25), (4, 2025-01-04, 200.00), (5, 2025-01-05, 99.99), (6, 2025-01-06, 120.75), (7, 2025-01-07, 180.20), (8, 2025-01-08, 50.00), (9, 2025-01-09, 140.60), (10, 2025-01-10, 110.80), (11, 2025-01-11, 85.30), (12, 2025-01-12, 160.40), (13, 2025-01-13, 220.90), (14, 2025-01-14, 65.10), (15, 2025-01-15, 130.75), (16, 2025-01-16, 90.25), (17, 2025-01-17, 175.50), (18, 2025-01-18, 45.80), (19, 2025-01-19, 125.30), (20, 2025-01-20, 190.00);3. 查询数据
-- 3. 查询数据 SELECT * FROM users; SELECT username, email FROM users; SELECT username, email FROM users LIMIT 5; SELECT username, email FROM users LIMIT 5 OFFSET 10; -- 分页查询(跳过前10条) SELECT * FROM users WHERE created_at > 2025-01-01; SELECT * FROM users WHERE username LIKE user1% AND created_at > 2025-02-01; -- 排序查询ASC; SELECT * FROM orders ORDER BY order_date DESC; -- 日期范围查询 SELECT * FROM orders WHERE order_date BETWEEN 2025-01-05 AND 2025-01-15; --聚合函数 --统计总订单数 SELECT COUNT(order_id) AS total_orders FROM orders; --计算订单总金额 SELECT SUM(amount) AS total_amount FROM orders; -- 查找最大/最小订单金额 SELECT MAX(amount) AS highest_order, MIN(amount) AS lowest_order FROM orders; --查询没有下过订单的用户 SELECT username, email FROM users WHERE id NOT IN (SELECT DISTINCT user_id FROM orders WHERE user_id IS NOT NULL); -- 内连接查询 SELECT u.username, o.order_date, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; --分组统计,每个用户的订单数 SELECT u.username, COUNT(o.order_id) AS order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.username;4. 更新数据
UPDATE users SET email = john.doe@example.com WHERE username = user20;5. 删除数据
DELETE FROM users WHERE username = user21;6. 事务处理
BEGIN TRANSACTION; -- 开始事务 -- 1. 插入新用户 INSERT INTO users (username, email) VALUES (alice_smith, alice@example.com); -- 2. 为该用户创建订单(使用LAST_INSERT_ROWID()获取用户ID) INSERT INTO orders (user_id, order_date, amount) VALUES (LAST_INSERT_ROWID(), CURRENT_TIMESTAMP, 49.99); COMMIT; -- 提交事务SQL关键字(按功能分类)整理的表格
关键字
功能描述
示例
CREATE
创建数据库对象(表、视图等)
CREATE TABLE users (...)
ALTER
修改表结构(添加 / 删除列)
ALTER TABLE ADD COLUMN age INT
DROP
删除数据库对象
DROP TABLE users
TRUNCATE
删除表中所有数据(保留表结构)
TRUNCATE TABLE orders
关键字
功能描述
示例
INSERT
插入数据
INSERT INTO users VALUES (1, Alice)
UPDATE
更新数据
UPDATE users SET age = 30 WHERE id = 1
DELETE
删除数据
DELETE FROM users WHERE age < 18
SELECT
查询数据
SELECT * FROM users
关键字
功能描述
示例
FROM
指定查询的表
SELECT name FROM users
WHERE
过滤查询结果
WHERE age > 25
AND/OR/NOT
逻辑运算符(组合条件)
WHERE age > 25 AND city = Beijing
LIKE
模糊匹配(% 匹配任意字符)
WHERE name LIKE A%
IN
多值匹配
WHERE id IN (1, 3, 5)
BETWEEN
范围查询
WHERE age BETWEEN 20 AND 30
ORDER BY
排序结果(ASC/DESC)
ORDER BY age DESC
LIMIT
限制返回行数(SQLite/MySQL)
LIMIT 10
OFFSET
跳过指定行数(分页)
OFFSET 20 LIMIT 10
关键字
功能描述
示例
GROUP BY
分组统计
GROUP BY department
HAVING
过滤分组结果(配合 GROUP BY)
HAVING COUNT(*) > 5
SUM
求和
SUM(amount)
AVG
求平均值
AVG(age)
COUNT
计数
COUNT(id)
MAX/MIN
求最大值 / 最小值
MAX(price)
DISTINCT
去重
SELECT DISTINCT city
关键字
功能描述
示例
JOIN
内连接(匹配两表共有的记录)
INNER JOIN orders ON users.id = orders.user_id
LEFT JOIN
左连接(保留左表所有记录)
LEFT JOIN orders ON users.id = orders.user_id
RIGHT JOIN
右连接(保留右表所有记录)
RIGHT JOIN orders ON users.id = orders.user_id
FULL JOIN
全连接(保留两表所有记录)
FULL JOIN orders ON users.id = orders.user_id
UNION/UNION ALL
合并查询结果(UNION 去重)
SELECT name FROM users UNION SELECT product_name FROM products
关键字
功能描述
示例
NULL
空值
WHERE email IS NULL
AS
别名
SELECT name AS username
CASE
条件表达式
CASE WHEN age > 18 THEN Adult ELSE Minor END
EXISTS
子查询判断(存在记录返回 TRUE)
WHERE EXISTS (SELECT * FROM orders WHERE user_id = 1)
WITH
临时结果集(CTE)
WITH temp AS (SELECT * FROM users) SELECT * FROM temp
1. 大小写不敏感:SELECT与select等效,但建议大写关键字提高可读性。
2. 保留字冲突:避免使用SQL关键字(如USER、GROUP)作为表名 / 列名。
3. 方言差异:部分关键字(如LIMIT)在不同数据库(SQLite/MySQL/PostgreSQL)中可能有差异。
好了,SQL就学到这,它们都是最常用的知识点。大家一定要自己动手试试,多写多练才能掌握。记得点赞关注,评论区留下你遇到的数据库问题,我们一起解决!