网站首页 > 精选文章 正文
欢迎来到 SQL 世界的心脏地带!
如果说数据库是一座巨大的宝库,那么 SELECT 语句就是你手中那张唯一的藏宝图和挖掘工具。到目前为止,我们所做的一切——安装、建库、建表、插数据——都是为了这一刻做准备:从数据中提取价值。
SELECT 是 SQL 中最强大、最常用、也是最有趣的命令。掌握了它,你就掌握了数据查询的超能力!
准备工作:我们的数据集
为了更好地学习查询,让我们确保 friends 表里有足够的数据。如果你跟着上一章做下来了,表里应该有 3-4 条记录。如果你的表是空的,或者想用一个干净的数据集,可以执行下面的代码,它会清空表(TRUNCATE)然后重新插入数据。
-- 清空表,比 DELETE 更快,但不能回滚
TRUNCATE TABLE friends;
-- 重新插入我们的朋友们
INSERT INTO friends (id, name, birthday, years_known)
VALUES
(1, '老王', '1990-05-20', 5),
(2, '小李', '1992-08-15', 3),
(3, '张三', '1988-01-30', 10),
(4, '赵四', '1978-11-11', 10);
好,现在我们有了一个包含 4 个朋友的数据集,可以开始我们的探险了!
6.1 查询所有列 (SELECT *)
最简单粗暴的查询方式,就是把一张表里所有行、所有列的数据都捞出来。我们之前已经“偷看”过这个用法了。
* 是一个通配符,代表“所有列”。
SELECT * FROM friends;
这个命令会返回 friends 表的全部内容:
id | name | birthday | years_known
----+------+------------+-------------
1 | 老王 | 1990-05-20 | 5
2 | 小李 | 1992-08-15 | 3
3 | 张三 | 1988-01-30 | 10
4 | 赵四 | 1978-11-11 | 10
(4 rows)
注意 :SELECT * 在平时自己测试、探索数据时非常方便。但在正式的应用程序代码中,强烈不推荐使用!原因和 INSERT 不写列名类似:
- 性能问题:查询了你可能根本用不到的列,浪费网络带宽和数据库资源。
- 可维护性差:如果别人给表加了一列,你的程序可能会因为没预料到新数据而崩溃。
好习惯:需要什么,就明确地查询什么。
6.2 查询指定列
这才是 SELECT 的正确打开方式。明确地告诉数据库,你只对哪些列感兴趣。
比如,我们只想看看所有朋友的 名字 和 生日。
SELECT name, birthday FROM friends;
结果就变得非常干净,只包含我们想要的信息:
name | birthday
------+------------
老王 | 1990-05-20
小李 | 1992-08-15
张三 | 1988-01-30
赵四 | 1978-11-11
(4 rows)
你可以选择任意数量的列,并用逗号 , 隔开。
6.3 使用AS给列起别名
有时候,表的原始列名可能不那么直观(比如 years_known),或者我们在查询中做了一些计算,希望结果的列头更具可读性。这时,AS 关键字就派上用场了。
AS 用来给查询结果中的列起一个临时的别名 (Alias)。
比如,我们想把 name 显示为“姓名”,years_known 显示为“认识年数”。
SELECT
name AS "姓名",
years_known AS "认识年数"
FROM
friends;
注意:如果你的别名是中文、包含空格或特殊字符,最好用双引号 " 括起来。如果是纯英文字母,双引号和 AS 关键字本身都可以省略:
SELECT name "姓名", years_known "认识年数" FROM friends; -- AS可以省略
SELECT name friend_name, years_known known_years FROM friends; -- 纯英文别名,双引号也可以省略
查询结果的列头就会变成我们起的新名字,是不是感觉专业多了?
姓名 | 认识年数
--------+----------
老王 | 5
小李 | 3
张三 | 10
赵四 | 10
(4 rows)
6.4DISTINCT去除重复行
观察一下我们的数据,张三和赵四我们都认识 10 年了。如果我们只想知道我们认识朋友的“年数”都有哪些,不关心具体是谁,可以这样查询:
SELECT years_known FROM friends;
结果是:
years_known
-------------
5
3
10
10
(4 rows)
这里 10 出现了两次。如果我们只想看不重复的年数列表,就要用到 DISTINCT 关键字。
DISTINCT 会告诉数据库,请帮我筛掉结果中完全重复的行。
SELECT DISTINCT years_known FROM friends;
这下结果就清爽了:
years_known
-------------
3
5
10
(3 rows)
DISTINCT 也可以作用于多个列。当作用于多列时,只有当所有指定的列的值都完全相同时,才被认为是重复行。
本章小结
太棒了!你已经掌握了 SELECT 的基本用法,学会了如何从数据库中精确地取出你想要的数据。
- 我们学会了用 SELECT * 预览全表数据。
- 掌握了更专业的 SELECT column1, column2 用法。
- 学会了用 AS 给结果起一个漂亮的名字。
- 还学会了用 DISTINCT 来获得不重复的结果集。
但是,到目前为止,我们每次查询返回的都是所有的朋友。如果我们只想找某个特定的朋友,或者满足某个条件的朋友该怎么办呢?
这就是下一章 WHERE 条件过滤 的使命了。准备好给你的查询加上“精确制导”系统了吗?我们下一章见!
猜你喜欢
- 2025-09-09 CentOS Linux系统中的getent命令_linux gettickcount
- 2025-09-09 10 个核心 Linux 面试问题及答案,来挑战挑战!
- 2025-09-09 一天一点点:linux - ip 命令_linux ipi
- 2025-09-09 Linux yq 命令使用详解_linux中命令详解
- 2025-09-09 Linux 的 18 个装 B 命令,记得全部搂一遍
- 2025-09-09 Linux系统安装SQL Server数据库_linux安装数据库实例
- 2025-09-09 Linux系统LOG日志分析与管理(四)——配置Loganalyzer
- 2025-09-09 DevOps—Linux命令行进阶_linux dev命令
- 2025-09-09 Linux 简单使用crontab命令(定时任务)
- 2025-09-09 5个Linux服务器IO瓶颈排查命令,让你的系统运维效率提升10倍
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)