当前位置: 首页 > news >正文

2.15 sql基础查询(SELECT、FROM、字段别名、常量与表达式)

2.15 基础查询(SELECT、FROM、字段别名、常量与表达式)

SELECT是SQL中最基础、最常用的语句,没有之一。无论你是做订单统计、用户分析,还是活动复盘,第一步都是把数据从数据库里“捞”出来。这一章我会带你彻底搞懂SELECTFROM的最基本用法,学会指定字段、起别名、用常量做计算。学完之后,你能独立从订单表、商品表中提取核心数据,为后续分析打好基础。

学习前准备:

  • 已完成MySQL安装(参考系列前几章)

  • 已安装DBeaver或Navicat

  • 准备一个练习数据库,比如select_demo

学习前环境准备

步骤1:确保MySQL服务已启动。

步骤2:创建练习数据库和表,并插入示例数据。

CREATEDATABASEselect_demoCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;USEselect_demo;-- 订单表CREATETABLEorders(order_idVARCHAR(50)PRIMARYKEYCOMMENT'订单号',user_idINTNOTNULLCOMMENT'用户ID',shop_nameVARCHAR(50)NOTNULLCOMMENT'店铺名称',amountDECIMAL(10,2)NOTNULLCOMMENT'订单金额',order_statusVARCHAR(20)NOTNULLCOMMENT'订单状态',create_timeDATETIMENOTNULLCOMMENT'下单时间');-- 插入测试数据INSERTINTOordersVALUES('ORD001',1001,'女装旗舰店',299.00,'已支付','2025-06-01 10:00:00'),('ORD002',1002,'女装旗舰店',189.00,'已取消','2025-06-01 11:00:00'),('ORD003',1003,'男装专营店',599.00,'已支付','2025-06-02 09:30:00'),('ORD004',1001,'女装旗舰店',399.00,'已支付','2025-06-03 14:20:00'),('ORD005',1004,'童装店',99.00,'已完成','2025-06-03 16:00:00');-- 商品表(用于后续案例)CREATETABLEproducts(product_idINTPRIMARYKEYAUTO_INCREMENT,product_nameVARCHAR(100)NOTNULL,categoryVARCHAR(50)NOTNULL,priceDECIMAL(10,2)NOTNULL,costDECIMAL(10,2)NOTNULL);INSERTINTOproducts(product_name,category,price,cost)VALUES('碎花连衣裙','女装',299.00,120.00),('纯棉T恤','男装',89.00,35.00),('牛仔裤','男装',199.00,85.00);

SELECT & FROM基础认知

SELECTFROM是SQL查询中最核心的两个关键字:

  • SELECT:指定要查询哪些列。

  • FROM:指定从哪张表中查询。

最简单的查询:从某张表中取出所有列和所有行。

SELECT*FROMorders;
  • *代表“所有列”。

  • 执行顺序:数据库先找到FROM指定的表,再从中取出SELECT指定的列。

在电商数据分析中,SELECT的用途

  • 查看订单明细。

  • 提取特定字段用于报表。

  • 作为子查询的基础。

我的踩坑经历:第一次写SELECT *时,我以为*代表“所有行”,其实它代表“所有列”。行是由WHERE等条件控制的。后来读了文档才明白。

全字段查询与指定字段查询

4.1 全字段查询(SELECT *)

SELECT*FROMorders;

分步操作

  1. 在DBeaver中打开SQL编辑器。

  2. 输入SELECT * FROM orders;

  3. 点击执行(三角形图标)。

  4. 观察结果返回了所有列(order_id, user_id, shop_name, amount, order_status, create_time)和5行数据。

预期结果:完整的订单表内容。

何时使用

  • 快速查看表的所有数据。

  • 探索性分析,不确定有哪些字段时。

避坑提醒:生产环境的表可能有几十个字段,甚至包含敏感信息。SELECT *会拉取所有列,浪费带宽和内存。更重要的是,可能把不该看的字段(如用户手机号)也查出来。日常查询建议只取需要的列

4.2 指定字段查询

SELECTorder_id,amount,order_statusFROMorders;

分步操作

  1. 列出需要的列名,用逗号分隔。

  2. 执行,结果只包含指定的三列。

电商实操案例:运营需要一份订单号、金额、状态的列表,用于核对。

SELECTorder_id,amount,order_statusFROMorders;

预期结果:只显示三列,行数不变。

指定字段查询的好处

  • 减少数据传输量,提升查询速度。

  • 避免暴露敏感字段。

  • 让结果集更清晰,只关注需要的列。

实操避坑提醒:列名写错会导致Unknown column报错。建议在DBeaver中,可以从左侧树拖拽表名或字段名,避免手误。

字段别名(AS)

5.1 基础语法

给列起一个临时名字,便于阅读或后续引用。

SELECT原列名AS别名FROM表名;

AS可以省略,但建议保留以增强可读性。

5.2 电商实操案例

案例一:订单金额在报表中希望显示为“订单金额”,而不是amount

SELECTorder_idAS订单号,amountAS订单金额FROMorders;

案例二:给计算字段起别名(结合表达式)。

SELECTorder_id,amount*0.9ASdiscount_priceFROMorders;

案例三:中文别名(注意兼容性,大多数环境支持)。

SELECTorder_idAS"订单号",amountAS"金额"FROMorders;

分步操作

  1. SELECT order_id, amount

  2. 在列名后加AS 别名

  3. 执行,查看列头变成了别名。

预期结果:结果集中列名变为中文或自定义名称。

5.3 避坑提醒

  • 别名只在当前查询的结果集中生效,不会修改原表。

  • 别名如果包含空格或特殊字符,需要用双引号或反引号包裹。

  • WHEREGROUP BY等子句中不能使用别名(因为执行顺序问题),但在ORDER BY中可以使用。

我的踩坑经历:我写过一个查询SELECT amount AS a FROM orders WHERE a > 100,结果报错。因为WHERESELECT之前执行,那时候别名a还不存在。正确的写法是WHERE amount > 100

常量与表达式在SELECT中的用法

6.1 常量查询

可以在SELECT中直接返回一个固定值,通常用于添加标识列。

SELECTorder_id,amount,'2025年大促'AScampaign_tagFROMorders;

电商场景:在导出数据时加上数据来源或批次标记。

SELECTorder_id,amount,'618活动'ASsourceFROMorders;

预期结果:每一行都多出一列source,值全是“618活动”。

6.2 表达式计算

对列进行数学运算、字符串拼接等。

数学运算

-- 计算商品销售总额 = 单价 * 数量(假设有quantity字段,这里用amount演示)SELECTorder_id,amount,amount*0.9ASafter_discountFROMorders;

字符串拼接(使用CONCAT函数):

SELECTCONCAT('订单号:',order_id)ASorder_infoFROMorders;

电商实操案例一:计算商品毛利率

假设有商品表products,包含price(售价)和cost(成本)。

SELECTproduct_name,price,cost,(price-cost)ASprofit,(price-cost)/price*100ASprofit_rateFROMproducts;

分步操作

  1. 先写出基础字段。

  2. 添加表达式(price - cost)

  3. 添加除法表达式,注意乘以100得到百分比。

  4. 执行,查看结果。

预期结果:计算出了每个商品的利润和毛利率。

电商实操案例二:订单金额含税计算

SELECTorder_id,amountAS原金额,amount*0.13AS税费,amount*1.13AS含税金额FROMorders;

6.3 避坑提醒

  • 除法运算中分母可能为0,可以用NULLIF避免报错:(price - cost) / NULLIF(price, 0)

  • 字符串拼接如果包含NULL,整个结果为NULL,可用COALESCE处理。

  • 表达式中的列名要确保存在,且数据类型支持运算(如数字列不能和文本列相乘)。

我的踩坑经历:有一次计算折扣价,写成了amount * 0.9,但amount是字符串类型(混了“¥”符号),结果返回了0。后来我先用CAST(amount AS DECIMAL)转换,才得到正确结果。参与运算的列必须是数值类型

综合实操案例:服饰类目店铺月度订单核心数据提取

7.1 案例背景

某服饰类目店铺需要制作日常运营日报,需要从订单表中提取以下信息:

  • 订单号、店铺名称、订单金额、订单状态。

  • 将订单金额字段命名为“金额(元)”。

  • 新增一列“是否高价值订单”,金额≥500为“是”,否则“否”。

  • 新增一列“含税金额”,按13%税率计算。

  • 只查询已支付和已完成的订单(下一章会讲WHERE,这里先全量查询,后续可加)。

7.2 分步操作

步骤1:编写基础查询

SELECTorder_id,shop_name,amount,order_statusFROMorders;

步骤2:添加别名

SELECTorder_idAS订单号,shop_nameAS店铺,amountAS金额,order_statusAS状态FROMorders;

步骤3:添加表达式字段

SELECTorder_idAS订单号,shop_nameAS店铺,amountAS金额,order_statusAS状态,CASEWHENamount>=500THEN'是'ELSE'否'ENDAS是否高价值订单,amount*1.13AS含税金额FROMorders;

步骤4:执行并验证

预期结果:每一行都有订单信息,并包含计算列。

步骤5:导出结果(可选)

在DBeaver中,可以右键结果集 → 导出数据 → 选择Excel格式。

7.3 案例扩展:商品销售基础指标计算

从商品表计算毛利率、毛利额。

SELECTproduct_nameAS商品名称,categoryAS类目,priceAS售价,costAS成本,(price-cost)AS毛利,ROUND((price-cost)/price*100,2)AS毛利率百分比FROMproducts;

ROUND函数:保留两位小数。

本章踩坑清单与合规总结

8.1 新手常见踩坑

错误原因正确做法
SELECT *在生产环境使用返回大量列,浪费资源只选择需要的列
列名写错拼写错误或大小写从表结构复制列名
别名中带空格不加引号语法错误用双引号包裹,如AS "订单 金额"
表达式分母为0报错NULLIFCASE WHEN处理
字符串拼接遇到NULL结果为NULLCOALESCE(列, '')

8.2 电商数据合规提示

  • 只查询必要的字段:不要用SELECT *查询包含用户手机号、地址的表。即使你有权限,也不应该查询不必要的敏感信息。

  • 别名不会脱敏:起中文别名只是为了显示,不会改变底层数据的敏感性。如果字段本身就是敏感字段(如phone),即使你起了别名“联系电话”,结果仍然是明文手机号。

  • 导出数据需审批:通过查询导出的订单明细,如果包含用户ID等信息,导出前需确认是否合规。

结语

SELECTFROM是SQL查询的基石。学会指定字段、起别名、用常量表达式做计算,你就能完成电商日常80%的数据提取需求。

有问题的评论区留言,我看到会回复。

http://www.jsqmd.com/news/642755/

相关文章:

  • 国内半导体论坛哪家好?精选2026年高端行业论坛,把握产业发展新趋势 - 品牌2026
  • Fish Speech 1.5真实效果:俄语科技文献语音转述准确率实测报告
  • 2026年OpenClaw如何搭建?腾讯云2分钟喂奶级指南+大模型APIKey配置、Skill集成流程
  • 从仿真到实物:永磁同步电机参数辨识的误差分析与实战调优指南(以定子电阻和磁链为例)
  • 国际半导体展会推荐:链接全球资源,优选高规格国际专业展会 - 品牌2026
  • HarmonyOS 6实战::多组件嵌套场景下,自动化测试覆盖复杂交互实践
  • 2026年3月SMT纳米阶梯钢网公司推荐,精密激光切割加工/SMT纳米阶梯钢网,SMT纳米阶梯钢网源头厂家有哪些 - 品牌推荐师
  • 告别传统ChatUI!Nanbeige 4.1-3B Streamlit WebUI真实交互效果分享
  • HY-MT1.5-1.8B实测:轻量级模型如何实现高质量实时翻译?
  • 2026年3月评价好的北村机床源头厂家推荐,加工航空航天复杂结构件/3C 电子壳体高精加工,北村机床厂家怎么选择 - 品牌推荐师
  • 一文讲透数字化转型的十个关键概念:信息化、自动化、数据化、智能化、平台化……
  • 从I2C总线到电平转换:STM32开漏输出的3个实战应用与配置避坑指南
  • 深入大模型-36-learn-claude-code之第十一课Autonomous Agents自治智能体
  • 25美元智能眼镜革命:OpenGlass开源项目如何让普通眼镜拥有AI视觉
  • 程序员副业指南:技术变现全路径从“闻着臭”到“吃着香”,揭秘一碗正宗柳州螺蛳粉的极致体验之旅
  • 免费快速备份QQ空间历史说说的完整解决方案
  • lingbot-depth-pretrain-vitl-14开源部署:镜像内软链机制㊸与双目录防御设计解析
  • 基于 Spring AI 的 RAG(检索增强生成)系统
  • 数据库无法连接情况排查
  • 第5章,[标签 Win32] :GDI 的基本图形
  • Linux设备驱动_概述
  • [STM32] 散列文件与链接地址配置实战解析
  • 【无标题】第二章 Hadoop3安装
  • 对称式目镜设计中的光扇图分析与像差校正
  • VisionTransformer(二)—— 多头注意力机制:从理论到PyTorch实战解析
  • 收藏!小白/程序员入行AI应用开发必看,别被招聘要求吓退(附实操资源)
  • 常州装修设计领域评测与推荐——聚焦实力标杆,认准鸿鹄领跑优势
  • YOLOFuse效果展示:实测RGB+红外融合检测,复杂环境下精度显著提升
  • Dify低代码平台实战:5步搞定企业级AI应用开发(附避坑指南)
  • Redis 常用数据类型