学习Sql-part1 for婷姐

学习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;
相关推荐
JMchen1 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
yunwei371 小时前
eBPF 入门实践教程十七:编写 eBPF 程序统计随机/顺序磁盘 I/O
linux·后端·性能优化
ZHOUPUYU1 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
冰暮流星2 小时前
sql之is not null运算符
数据库·sql·oracle
ZHOUPUYU2 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php
冰暮流星2 小时前
sql之is null 运算符
java·数据库·sql
扶风ff2 小时前
练题簿在线免费刷题:创建个人任务,把刷题、听题和模考目标放到每天的学习中
开发语言·javascript·学习·小程序
2601_962966642 小时前
数学与应用数学专业准备风险管理岗,2027届秋招金融知识和工具技能怎么补?
python·sql
Frag0ut2 小时前
Chrome扩展程序管理技巧:安全安装、权限审查与高效使用指南
chrome·性能优化·谷歌浏览器·浏览器插件·扩展程序管理·权限审查·冲突排查