SELECT * 到底能不能用?新手第一个坑

简介: 拆解“SQL学会SELECT *就够了”的误区,详解其原理、初学爽感与三大隐患(性能崩塌、列序失控、资源浪费),并指出仅限探索/排查等有限场景可用。真进阶在于懂学会何时不用它!

别信“SQL学会这一句就够了”,这句话害了不少人。

大家好,我是这个DBA不太耶。

上次聊了数据库和Excel的区别,有朋友说:“你倒是教点实在的啊,我连SQL长啥样都不知道。”

行,今天就讲最基础的一个命令:SELECT *。

一、SELECT * 是干嘛的?

说白了:​把这张表里所有的列、所有的行,全端出来​。

  • SELECT = 我要查
  • * = 所有列(星号是通配符)
  • FROM 表名 = 从哪张表

所以 SELECT * FROM orders; 就是把订单表里每一列、每一行全部显示。

这是SQL里最简单的命令,没有之一。新手教程第一课几乎都是它。

二、第一次执行,确实爽

我刚接触数据库时,IT给我一个测试库说,你先看看订单表长什么样。

我打开客户端,照着教程敲了:

sql

SELECT * FROM orders;

执行。

一万行数据,两秒钟刷出来,滚动丝般顺滑。那一刻我突然理解了什么叫“数据库不是Excel”。Excel到一万行早就在转圈了,这边一万行只是热身。

那一刻你会觉得:数据库真牛,SQL真简单。

但如果你以为这就是SQL的全部,那后面有的是坑等着你。

三、为什么说它是个坑?

坑1:数据量大了会炸

假设一张表有100列、1000万行。你执行 SELECT *,相当于一次性把所有数据全拉出来。网络带宽扛不住,你的客户端可能直接内存溢出,甚至把数据库服务器拖慢。

正确做法:​只查你需要的列​。

-- 别这样
SELECT * FROM orders;

-- 要这样
SELECT order_id, customer_name, order_date FROM orders;

坑2:列顺序不可控

SELECT * 返回的列顺序是表定义的顺序。如果你的代码里写死了“第一列是订单号”,哪天表结构调整了(比如加了一列),列顺序一变,程序直接报错。

坑3:性能浪费

哪怕你只想看前10行,数据库也得先把所有列的数据加载出来。尤其是那些带 TEXT、BLOB 大字段的表,纯粹浪费IO和内存。

四、什么时候可以用 SELECT *?

不是完全不能用,但只限几个场景:

  1. ​探索性查询​:刚接触一张新表,不知道有哪些列,先 SELECT * 看一眼数据结构。
  2. ​临时排查问题​:快速确认某条记录的所有字段值。
  3. ​测试环境​:数据量小,怎么折腾都行。

生产环境、正式脚本、性能要求高的地方,千万别这么干。

五、一个口诀帮你记住

平时随便用,​生产要慎重​。

查啥写啥列,​星号是懒虫​。

六、说句大实话

SELECT * 是新手村的第一把木剑——能砍怪,但别指望它屠龙。

学会它是第一步。学会​什么时候不用它​,才是真正的进阶。

大家第一次执行 SELECT * 查了多少行数据?有没有干过SELECT * 然后把电脑卡死的蠢事哈哈哈~

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
5款好用的免费MySQL客户端,新手必备!
告别枯燥命令行!数据库小学妹精选5款免费MySQL图形化工具:Workbench(官方全能)、phpMyAdmin(免安装Web版)、DBeaver(多库支持)、HeidiSQL(Windows轻量之选)、TablePlus(高颜值跨平台)。小白友好,语法高亮、自动补全、可视化结构一应俱全,助你高效学SQL!
|
6月前
|
SQL 关系型数据库 MySQL
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
用生活化比喻(如字典目录)详解索引原理:它通过B+树结构加速查询,避免全表扫描;涵盖创建、查看、删除索引方法,联合索引的最左前缀原则,以及读写平衡等实战要点——让查询从“等几秒”变“秒出”!
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
|
6月前
|
SQL 关系型数据库 MySQL
事务:让数据操作"要么全成功,要么全失败"!|转行学DB第10天
数据库小学妹带你轻松掌握事务!转账不丢钱、数据不混乱的秘密,就在ACID四大特性——原子性(全做或全不做)、一致性、隔离性、持久性。用START TRANSACTION开启,COMMIT提交,ROLLBACK回滚,保障多步操作安全可靠。
|
6月前
|
SQL 关系型数据库 MySQL
子查询:让SQL像俄罗斯套娃一样嵌套!|转行学DB第8天
数据库小学妹带你轻松入门子查询!用“SELECT里套SELECT”,像俄罗斯套娃一样,一步解决“先算平均分、再查高分学生”等两步难题。支持WHERE(条件筛选)、FROM(临时表)、SELECT(标量列)三种用法,简洁直观,新手友好~
|
6月前
|
SQL NoSQL 关系型数据库
数据库分类一次讲清|转行学DB第2天
数据库小学妹(UI转行萌新)用通俗语言拆解数据库分类:从关系型(MySQL/Oracle)、NoSQL(Redis/MongoDB/Cassandra)、NewSQL(TiDB)到2026年爆火的向量数据库(Pinecone/Milvus),按数据模型、部署架构、业务负载三大维度梳理,配场景化案例与选学路径,助新手轻松入门。
|
6月前
|
SQL 人工智能 安全
AI圈开始“养马”了?聊聊龙虾退位、爱马仕登基
AI智能体“龙虾”(OpenClaw)的衰落与“爱马仕”(Hermes Agent)的崛起:前者因API限策与高危漏洞(CVSS 9.9)式微;后者以持久记忆、技能自生成、跨平台互通等实用能力破圈,成技术圈新“拐杖”。但技术无银弹,懂你的工具才是真助力。
|
2月前
|
SQL 关系型数据库 MySQL
UNION vs UNION ALL:一个“ALL”字,性能差了一个数量级
UNION和UNION ALL的区别很多人知道,但INTERSECT和EXCEPT的执行机制、性能差异,以及如何用JOIN和子查询替代,很多人并不清楚。本文从集合操作的执行计划出发,拆解UNION去重的“隐形代价”、INTERSECT与INNER JOIN的本质差异、EXCEPT与NOT EXISTS的性能对比,并通过真实案例展示集合操作在业务场景中的正确用法与避坑指南,帮助读者从“会写集合操作”升级到“理解集合操作的底层逻辑”。
|
人工智能 Java 测试技术
代码采纳率如何提升至50%?AI 自动编写单元测试实践总结
借助Aone Copilot Agent,通过标准化Prompt指导AI生成单元测试代码,实现50%代码采纳率,显著提升测试效率与质量,推动团队智能化研发转型。
1394 20
|
6月前
|
SQL 数据库 数据库管理
从运营到DBA,我用了这3个“偷懒”方法学SQL
用运营人思维教小白轻松学SQL:①把SQL当Excel对话,理解SELECT/FROM/WHERE;②建“报错翻译本”,快速定位解决错误;③用“填空题法”抄改练,复用模板上手。不求完美,先跑通、看懂、不崩溃!
从运营到DBA,我用了这3个“偷懒”方法学SQL