第 6 章:查询数据 (SELECT) 🔍 - PostgreSQL入门

B站影视 欧美电影 2025-08-04 22:33 1

摘要:如果说数据库是一座巨大的宝库,那么 SELECT 语句就是你手中那张唯一的藏宝图和挖掘工具。到目前为止,我们所做的一切——安装、建库、建表、插数据——都是为了这一刻做准备:从数据中提取价值。

欢迎来到 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 个朋友的数据集,可以开始我们的探险了!

最简单粗暴的查询方式,就是把一张表里所有行、所有列的数据都捞出来。我们之前已经“偷看”过这个用法了。

* 是一个通配符,代表“所有列”。

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 不写列名类似:

性能问题:查询了你可能根本用不到的列,浪费网络带宽和数据库资源。可维护性差:如果别人给表加了一列,你的程序可能会因为没预料到新数据而崩溃。

好习惯:需要什么,就明确地查询什么。✨

这才是 SELECT 的正确打开方式。明确地告诉数据库,你只对哪些列感兴趣。

比如,我们只想看看所有朋友的 名字生日

SELECT name, birthday FROM friends;

结果就变得非常干净,只包含我们想要的信息:

name | birthday------+ 老王 | 1990-05-20 小李 | 1992-08-15 张三 | 1988-01-30 赵四 | 1978-11-11(4 rows)

你可以选择任意数量的列,并用逗号 , 隔开。

有时候,表的原始列名可能不那么直观(比如 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)

观察一下我们的数据,张三和赵四我们都认识 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 条件过滤 的使命了。准备好给你的查询加上“精确制导”系统了吗?我们下一章见!

来源:linux运维菜

相关推荐