学习sql前,需要先建表
建表先建库



以下是三张表,用户表、订单表、商品表
sql
CREATE TABLE `users` (
`user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户主键',
`username` varchar(50) NOT NULL COMMENT '用户名',
`email` varchar(100) NOT NULL COMMENT '邮箱',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`status` enum('ACTIVE','INACTIVE') NOT NULL DEFAULT 'ACTIVE' COMMENT '用户状态',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
CREATE TABLE `products` (
`product_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品主键',
`product_name` varchar(100) NOT NULL COMMENT '商品名称',
`category` varchar(50) NOT NULL COMMENT '商品分类',
`price` bigint(20) NOT NULL COMMENT '当前标价 单位 分',
`stock` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '库存数量',
`status` int(11) NOT NULL DEFAULT '0' COMMENT '0-下架 3-上架',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
CREATE TABLE `orders` (
`order_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单主键',
`order_no` varchar(32) NOT NULL COMMENT '业务订单号',
`user_id` bigint(20) unsigned NOT NULL COMMENT '下单用户',
`product_id` bigint(20) unsigned NOT NULL COMMENT '所购商品',
`quantity` int(10) unsigned NOT NULL COMMENT '购买数量',
`unit_price` bigint(20) NOT NULL COMMENT '下单时成交单价',
`discount_amount` bigint(20) NOT NULL DEFAULT '0' COMMENT '整单优惠金额',
`total_amount` bigint(20) NOT NULL DEFAULT '0' COMMENT '订单实付金额',
`status` int(11) NOT NULL DEFAULT '0' COMMENT '订单状态 0-待支付 1-已支付 2-已收货 3-取消',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
在query下运行sql,即可创建三张表

然后进行数据初始化,在query中运行以下sql
sql
INSERT INTO users
(user_id, username, email, phone, status, created_at, updated_at)
VALUES
(1, '婷A', 'alice@example.com', '13800000001', 'ACTIVE', '2026-09-01 09:00:00', '2026-09-01 09:00:00'),
(2, '婷B', 'bob@example.com', '13800000002', 'ACTIVE', '2026-09-03 10:30:00', '2026-09-03 10:30:00'),
(3, '婷C', 'carol@example.com', '13800000003', 'INACTIVE', '2026-09-05 14:20:00', '2026-09-05 14:20:00'),
(4, '婷D', 'david@example.com', '13800000004', 'ACTIVE', '2026-09-08 18:10:00', '2026-09-08 18:10:00'),
(5, '婷E', 'eve@example.com', NULL, 'ACTIVE', '2026-09-10 08:40:00', '2026-09-10 08:40:00'),
(6, '婷F', 'frank@example.com', '13800000006', 'ACTIVE', '2026-10-01 13:00:00', '2026-10-01 13:00:00');
INSERT INTO products
(product_id, product_name, category, price, stock, status, created_at, updated_at)
VALUES
(1, '轻薄笔记本电脑', '数码', 599900, 20, 3, '2026-09-01 09:00:00', '2026-09-01 09:00:00'),
(2, '机械键盘', '数码', 39900, 100, 3, '2026-09-01 09:10:00', '2026-09-01 09:10:00'),
(3, '陶瓷咖啡杯', '家居', 5990, 50, 3, '2026-09-01 09:20:00', '2026-09-01 09:20:00'),
(4, '27英寸显示器', '数码', 129900, 35, 3, '2026-09-01 09:30:00', '2026-09-01 09:30:00'),
(5, '硬壳笔记本', '办公', 1990, 200, 3, '2026-09-01 09:40:00', '2026-09-01 09:40:00'),
(6, '无线鼠标', '数码', 12900, 0, 0, '2026-09-01 09:50:00', '2026-09-01 09:50:00'),
(7, '电动升降桌', '办公', 89900, 12, 3, '2026-09-02 10:00:00', '2026-09-02 10:00:00');
INSERT INTO orders
(order_id, order_no, user_id, product_id, quantity,
unit_price, discount_amount, total_amount, status,
created_at, updated_at)
VALUES
(1, 'ORD202609100001', 1, 1, 1, 579900, 20000, 559900, 1, '2026-09-10 10:00:00', '2026-09-10 10:00:00'),
(2, 'ORD202609120001', 1, 2, 2, 39900, 0, 79800, 2, '2026-09-12 11:20:00', '2026-09-12 11:20:00'),
(3, 'ORD202609150001', 2, 3, 3, 5990, 0, 17970, 1, '2026-09-15 15:30:00', '2026-09-15 15:30:00'),
(4, 'ORD202609180001', 2, 4, 1, 119900, 10000, 109900, 3, '2026-09-18 16:40:00', '2026-09-18 16:40:00'),
(5, 'ORD202609200001', 3, 5, 10, 1990, 1000, 18900, 2, '2026-09-20 09:15:00', '2026-09-20 09:15:00'),
(6, 'ORD202610010001', 4, 2, 1, 35900, 4000, 31900, 0, '2026-10-01 12:00:00', '2026-10-01 12:00:00'),
(7, 'ORD202610030001', 1, 3, 2, 5990, 0, 11980, 2, '2026-10-03 19:20:00', '2026-10-03 19:20:00'),
(8, 'ORD202610050001', 4, 4, 2, 129900, 10000, 249800, 1, '2026-10-05 20:10:00', '2026-10-05 20:10:00'),
(9, 'ORD202610080001', 2, 2, 1, 39900, 0, 39900, 2, '2026-10-08 14:30:00', '2026-10-08 14:30:00'),
(10, 'ORD202610090001', 6, 5, 5, 1990, 0, 9950, 1, '2026-10-09 09:45:00', '2026-10-09 09:45:00');
感觉有某个字段值不喜欢,可以双击单元格修改

正经的Sql开始
一 基础查询
1.1 查询整张表
sql
SELECT * FROM users;
* 表示查询所有字段。
1.2 查询指定字段
sql
SELECT user_id, username, email FROM users;
1.3 使用字段别名 AS
sql
SELECT
user_id AS 用户ID,
username AS 用户名,
email AS 邮箱
FROM users;
1.4 统计总数 count
sql
SELECT count(1) FROM users;
二 条件查询
2.1 等值查询 where
sql
查询所有上架商品:
SELECT product_id, product_name, price, stock
FROM products
WHERE status = 3;
查询已支付订单:
SELECT order_no, total_amount, created_at
FROM orders
WHERE status = 1;
2.2 多条件查询 AND OR IN
sql
查询上架且有库存的数码商品:
SELECT product_id, product_name, stock
FROM products
WHERE category = '数码'
AND status = 3
AND stock > 0;
查询家居类或办公类商品:
SELECT product_id, product_name, category
FROM products
WHERE category = '家居'
OR category = '办公';
查询有效订单,即已支付或已收货订单:IN (1, 2) 比 status = 1 OR status = 2 更简洁。
SELECT order_no, status, total_amount
FROM orders
WHERE status IN (1, 2);
2.3 范围查询
sql
查询 2026 年 10 月创建的订单:
SELECT order_no, created_at
FROM orders
WHERE created_at >= '2026-10-01 00:00:00'
AND created_at < '2026-11-01 00:00:00';
查询金额在300-500元的订单
SELECT *
FROM orders
WHERE total_amount >= 30000
AND total_amount <= 50000;
2.4 模糊查询 LIKE
%:匹配任意长度字符,也可以是零个字符。
sql
查询名称中包含"本"的商品:
SELECT product_id, product_name, category
FROM products
WHERE product_name LIKE '%本%';
查询名称中以"本"开头的商品:
SELECT product_id, product_name, category
FROM products
WHERE product_name LIKE '本%';
2.5 排序 order by
ASC:升序,默认值。DESC:降序。
sql
按商品价格从高到低排序:
SELECT * FROM products
ORDER BY price DESC;
查询金额最高的 3 笔有效订单:LIMIT 可以限制查询条数
SELECT *
FROM orders
WHERE status IN (1, 2)
ORDER BY total_amount DESC, order_id DESC
LIMIT 3;
2.6 case重命名
sql
翻译商品状态
SELECT
product_id,
product_name,
CASE status
WHEN 0 THEN '下架'
WHEN 3 THEN '上架'
ELSE '未知状态'
END AS status_name
FROM products;
翻译订单状态
SELECT
order_no,
CASE status
WHEN 0 THEN '待支付'
WHEN 1 THEN '已支付'
WHEN 2 THEN '已收货'
WHEN 3 THEN '已取消'
ELSE '未知状态'
END AS status_name
FROM orders
ORDER BY created_at;
三 数据聚合
3.1 取最值 MIN MAX
sql
获取商品的最大、最小价格
SELECT
MIN(price) / 100.0 AS min_price_yuan,
MAX(price) / 100.0 AS max_price_yuan,
FROM products
WHERE status = 3;
3.2 求和 多行数据累加 SUM
sql
有效订单统计
SELECT
COUNT(*) AS valid_order_count,
SUM(quantity) AS sold_quantity,
SUM(total_amount) / 100.0 AS sales_amount_yuan
FROM orders
WHERE status IN (1, 2);
3.3 分组求和
sql
按商品分类统计,获取每个商品分类的总数、最大价格、求和价格
SELECT
category,
COUNT(*) AS product_count,
SUM(price) as total_price,
MAX(price) AS max_price
FROM products
GROUP BY category
ORDER BY total_price DESC;