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 表中检索 title 和 author 列。
列别名
列别名可在结果集中临时重命名列,以提高可读性:
SELECT title AS book_title, author AS writer FROM books;AS: 为列分配一个别名。- 结果将显示标记为
book_title和writer的列。
执行计算
你可以直接在 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子句中执行计算并使用函数。 - 在查询中连接字符串并包含字面量值。
在后续课程中,我们将探讨更多的子句,如 WHERE、JOIN 和 ORDER 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;