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

张开发
2026/4/20 0:36:30 15 分钟阅读

分享文章

2.15 sql基础查询(SELECT、FROM、字段别名、常量与表达式)
2.15 基础查询SELECT、FROM、字段别名、常量与表达式SELECT是SQL中最基础、最常用的语句没有之一。无论你是做订单统计、用户分析还是活动复盘第一步都是把数据从数据库里“捞”出来。这一章我会带你彻底搞懂SELECT和FROM的最基本用法学会指定字段、起别名、用常量做计算。学完之后你能独立从订单表、商品表中提取核心数据为后续分析打好基础。学习前准备已完成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基础认知SELECT和FROM是SQL查询中最核心的两个关键字SELECT指定要查询哪些列。FROM指定从哪张表中查询。最简单的查询从某张表中取出所有列和所有行。SELECT*FROMorders;*代表“所有列”。执行顺序数据库先找到FROM指定的表再从中取出SELECT指定的列。在电商数据分析中SELECT的用途查看订单明细。提取特定字段用于报表。作为子查询的基础。我的踩坑经历第一次写SELECT *时我以为*代表“所有行”其实它代表“所有列”。行是由WHERE等条件控制的。后来读了文档才明白。全字段查询与指定字段查询4.1 全字段查询SELECT *SELECT*FROMorders;分步操作在DBeaver中打开SQL编辑器。输入SELECT * FROM orders;。点击执行三角形图标。观察结果返回了所有列order_id, user_id, shop_name, amount, order_status, create_time和5行数据。预期结果完整的订单表内容。何时使用快速查看表的所有数据。探索性分析不确定有哪些字段时。避坑提醒生产环境的表可能有几十个字段甚至包含敏感信息。SELECT *会拉取所有列浪费带宽和内存。更重要的是可能把不该看的字段如用户手机号也查出来。日常查询建议只取需要的列。4.2 指定字段查询SELECTorder_id,amount,order_statusFROMorders;分步操作列出需要的列名用逗号分隔。执行结果只包含指定的三列。电商实操案例运营需要一份订单号、金额、状态的列表用于核对。SELECTorder_id,amount,order_statusFROMorders;预期结果只显示三列行数不变。指定字段查询的好处减少数据传输量提升查询速度。避免暴露敏感字段。让结果集更清晰只关注需要的列。实操避坑提醒列名写错会导致Unknown column报错。建议在DBeaver中可以从左侧树拖拽表名或字段名避免手误。字段别名AS5.1 基础语法给列起一个临时名字便于阅读或后续引用。SELECT原列名AS别名FROM表名;AS可以省略但建议保留以增强可读性。5.2 电商实操案例案例一订单金额在报表中希望显示为“订单金额”而不是amount。SELECTorder_idAS订单号,amountAS订单金额FROMorders;案例二给计算字段起别名结合表达式。SELECTorder_id,amount*0.9ASdiscount_priceFROMorders;案例三中文别名注意兼容性大多数环境支持。SELECTorder_idAS订单号,amountAS金额FROMorders;分步操作写SELECT order_id, amount。在列名后加AS 别名。执行查看列头变成了别名。预期结果结果集中列名变为中文或自定义名称。5.3 避坑提醒别名只在当前查询的结果集中生效不会修改原表。别名如果包含空格或特殊字符需要用双引号或反引号包裹。在WHERE、GROUP BY等子句中不能使用别名因为执行顺序问题但在ORDER BY中可以使用。我的踩坑经历我写过一个查询SELECT amount AS a FROM orders WHERE a 100结果报错。因为WHERE在SELECT之前执行那时候别名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;分步操作先写出基础字段。添加表达式(price - cost)。添加除法表达式注意乘以100得到百分比。执行查看结果。预期结果计算出了每个商品的利润和毛利率。电商实操案例二订单金额含税计算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状态,CASEWHENamount500THEN是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报错用NULLIF或CASE WHEN处理字符串拼接遇到NULL结果为NULL用COALESCE(列, )8.2 电商数据合规提示只查询必要的字段不要用SELECT *查询包含用户手机号、地址的表。即使你有权限也不应该查询不必要的敏感信息。别名不会脱敏起中文别名只是为了显示不会改变底层数据的敏感性。如果字段本身就是敏感字段如phone即使你起了别名“联系电话”结果仍然是明文手机号。导出数据需审批通过查询导出的订单明细如果包含用户ID等信息导出前需确认是否合规。结语SELECT和FROM是SQL查询的基石。学会指定字段、起别名、用常量表达式做计算你就能完成电商日常80%的数据提取需求。有问题的评论区留言我看到会回复。

更多文章