Postgresql Where

PostgreSQL WHERE: 过滤数据

欢迎来到我们关于PostgreSQL的下一课!今天我们将探讨WHERE子句,这是用于在PostgreSQL查询中过滤数据的关键组成部分。掌握WHERE子句可以让你精确提取数据库中所需的信息。

WHERE 子句简介

在PostgreSQL中,WHERE子句用于指定过滤查询结果的条件。通过应用条件,你可以将结果集缩小到仅包含符合条件的行。

基本语法

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • SELECT:列出你想要检索的列。
  • FROM:指定要查询的表。
  • WHERE:定义过滤行的条件。

在PostgreSQL中过滤数据

让我们深入探讨多种使用WHERE子句来有效过滤数据的方式。

1. 使用比较操作符

比较操作符用于将列值与指定的表达式进行比较。

  • =:等于
  • <>!=:不等于
  • <:小于
  • >:大于
  • <=:小于或等于
  • >=:大于或等于

示例:检索价格高于$10的书籍

SELECT title, price
FROM books
WHERE price > 10;

查看模式初始化

2. 使用字符串模式过滤

使用LIKE操作符

LIKE操作符允许使用通配符进行模式匹配。

  • %:表示零个或多个字符
  • _:表示单个字符

示例:查找名称以'J'开头的作者

SELECT name
FROM authors
WHERE name LIKE 'J%';

3. 使用逻辑操作符

逻辑操作符结合多个条件。

  • AND:所有条件都必须为真
  • OR:至少一个条件为真
  • NOT:取反条件的结果

示例:检索价格低于$10的'Jane Austen'的书籍

SELECT title, author, price
FROM books
WHERE author = 'Jane Austen' AND price < 10;

4. 使用BETWEEN操作符

BETWEEN操作符用于选择在给定范围内的值。

示例:查找页数在200到400之间的书籍

SELECT title, pages
FROM books
WHERE pages BETWEEN 200 AND 400;

5. 使用IN操作符

IN操作符用于检查某个值是否与列表中的任何值匹配。

示例:检索特定作者的书籍

SELECT title, author
FROM books
WHERE author IN ('George Orwell', 'Harper Lee');

6. 处理NULL值

IS NULL 和 IS NOT NULL

使用这些检查NULL(未知)值。

示例:查找没有列出价格的书籍

SELECT title
FROM books
WHERE price IS NULL;

7. 使用括号组合条件

括号用于对条件进行分组并控制逻辑流。

示例:复杂过滤

SELECT title, author, price
FROM books
WHERE (author = 'George Orwell' OR author = 'J.D. Salinger') AND price < 10;

8. 在WHERE子句中使用函数

PostgreSQL函数可以在WHERE子句中操作数据。

示例:查找书名长度超过15个字符的书籍

SELECT title
FROM books
WHERE LENGTH(title) > 15;

9. 使用EXISTS操作符

检查子查询是否返回任何行。

示例:查找价格低于$8的书籍作者

SELECT name
FROM authors
WHERE EXISTS (
    SELECT 1
    FROM books
    WHERE books.author = authors.name AND price < 8
);

10. 在WHERE子句中使用子查询

使用子查询进行更高级的过滤。

示例:查找拥有多本书的作者

SELECT title, author
FROM books
WHERE author IN (
    SELECT author
    FROM books
    GROUP BY author
    HAVING COUNT(*) = 1
);

结论

WHERE子句是PostgreSQL中根据特定条件过滤数据的强大工具。通过利用各种操作符和函数,你可以从数据中提取有意义的见解。

关键要点:

  • 使用比较操作符来过滤数字和文本数据。
  • 使用LIKEILIKE进行字符串的模式匹配。
  • 使用逻辑操作符组合多个条件。
  • 使用BETWEENIN进行范围和列表过滤。
  • 在过滤数据时注意NULL值。

继续通过不同的场景练习,以增强你对PostgreSQL WHERE子句的熟练度。


Schema Initialization

To run the examples, ensure your PostgreSQL database is set up with the following schema:

-- 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');

请随意探索和修改示例,以加深你对PostgreSQL WHERE子句的理解。祝查询愉快!