Postgresql Select

PostgreSQL SELECT:查询数据

PostgreSQL SELECT:查询数据

SELECT 语句是 PostgreSQL 数据检索的基石。它允许你从数据库中的一个或多个表中提取数据。在本教程中,我们将专注于 SELECT 语句本身,为未来的高级查询奠定基础。

基本 SELECT 语法

最简单的 SELECT 语句形式是从表中指定的列中检索数据:

SELECT column1, column2, ...
FROM table_name;
  • SELECT: 指定要检索的列。
  • FROM: 指定要从中检索数据的表。

查询所有列

(如果你想在终端中测试这些查询,请记得运行 示例模式代码

要从一个表中检索所有列,可以使用星号 (*) 通配符:

SELECT * FROM books;

此查询将从 books 表中提取所有列和所有行。

查询特定列

如果你只需要某些列,则可以显式列出它们:

SELECT title, author FROM books;

此查询从 books 表中检索 titleauthor 列。

列别名

列别名可在结果集中临时重命名列,以提高可读性:

SELECT title AS book_title, author AS writer FROM books;
  • AS: 为列分配一个别名。
  • 结果将显示标记为 book_titlewriter 的列。

执行计算

你可以直接在 SELECT 子句中执行算术运算:

SELECT title, price, price * 0.9 AS discounted_price FROM books;

此查询为每本书的价格计算 10% 的折扣价。

拼接字符串

使用连接运算符 (||) 将多列组合或添加文本:

SELECT 'Title: ' || title || ', Author: ' || author AS book_info FROM books;

此查询创建了书名和作者的拼接字符串。

使用内置函数

PostgreSQL 提供了多种可以在 SELECT 语句中使用的函数:

  • 字符串函数:用于操作文本数据。
  • 日期/时间函数:用于处理日期和时间值。
  • 数学函数:用于执行数学计算。

示例:

SELECT UPPER(title) AS uppercase_title FROM books;

此查询将所有书名转换为大写字母。

查询字面量值

你可以在不引用表的情况下选择字面量值:

SELECT 'Hello, PostgreSQL!';

此查询返回一行,内容为 Hello, PostgreSQL!

查询表达式

SELECT 子句中可以评估表达式:

SELECT 7 * 3 AS result;

此查询返回一行,计算结果为 21

输出列排序

SELECT 子句中列出的顺序决定了结果集中列的顺序:

SELECT author, title FROM books;

结果将首先显示 author,然后显示 title

从多个表查询(笛卡尔积)

虽然我们在这里不会深入讨论联接,但你可以从多个表中选择数据以生成笛卡尔积:

SELECT * FROM books, authors;

: 这将把 books 的每一行与 authors 的每一行组合,这可能会生成大量的行。

使用 FETCH FIRST 限制结果

即使没有 WHERE 子句,你也可以限制返回的行数:

SELECT * FROM books
FETCH FIRST 5 ROWS ONLY;

此查询从 books 表中检索前五行。

小结

SELECT 语句是你在 PostgreSQL 中查询数据的主要工具。掌握其基本用法为构建更复杂的查询奠定了基础。

需要记住的关键点:

  • 使用 SELECT * 从表中检索所有列。
  • 指定个别列以仅获取所需数据。
  • 通过列别名提高结果集的可读性。
  • SELECT 子句中执行计算并使用函数。
  • 在查询中连接字符串并包含字面量值。

在后续课程中,我们将探讨更多的子句,如 WHEREJOINORDER BY,以进一步筛选和操作你的数据。


通过继续练习 SELECT 语句,熟练掌握 PostgreSQL 数据检索。

Example Schema Code

-- Create the books table
CREATE TABLE books (
    title VARCHAR(255),
    author VARCHAR(255),
    price NUMERIC(10, 2),
    pages INTEGER
);
 
-- Insert sample data into the books table
INSERT INTO books (title, author, price, pages) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 10.99, 180),
('To Kill a Mockingbird', 'Harper Lee', 7.99, 281),
('1984', 'George Orwell', 8.99, 328),
('Pride and Prejudice', 'Jane Austen', 6.99, 279),
('The Catcher in the Rye', 'J.D. Salinger', 9.99, 214),
('Moby-Dick', 'Herman Melville', 11.99, 635),
('War and Peace', 'Leo Tolstoy', 12.99, 1225);
 
-- Create the authors table
CREATE TABLE authors (
    name VARCHAR(255)
);
 
-- Insert sample data into the authors table
INSERT INTO authors (name) VALUES
('F. Scott Fitzgerald'),
('Harper Lee'),
('George Orwell'),
('Jane Austen'),
('J.D. Salinger'),
('Herman Melville'),
('Leo Tolstoy');
 
-- Create the movies table
CREATE TABLE movies (
    title VARCHAR(255)
);
 
-- Insert sample data into the movies table
INSERT INTO movies (title) VALUES
('The Shawshank Redemption'),
('The Godfather'),
('The Dark Knight'),
('Pulp Fiction'),
('The Lord of the Rings');
 
-- Optional: Verify the data insertion
SELECT * FROM books;
SELECT * FROM authors;
SELECT * FROM movies;