PostgreSQL - WHERE 子句
PostgreSQL - WHERE 子句
Section titled “PostgreSQL - WHERE 子句”WHERE 子句是 SQL 最基本也是最重要的组成部分之一。它用于过滤记录并仅检索满足特定条件的行。它可以与 SELECT、UPDATE 和 DELETE 语句一起使用。
SELECT column1, column2, ...FROM table_nameWHERE [condition];[condition] 是一个计算结果为真、假或未知(unknown)的表达式。它通常涉及比较运算符(=、>、<、<>、!=)、逻辑运算符(AND、OR、NOT)以及其他专用运算符。
让我们为示例设置一个 employees 表:
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, age INT NOT NULL, department TEXT, salary NUMERIC(10, 2));
INSERT INTO employees (name, age, department, salary) VALUES('Alice', 32, 'Engineering', 95000.00),('Bob', 25, 'Marketing', 60000.00),('Charlie', 28, 'Engineering', 80000.00),('David', 45, 'Sales', 120000.00),('Eve', 32, 'Marketing', 68000.00),('Frank', 38, 'Sales', 115000.00);使用逻辑运算符 (AND, OR)
Section titled “使用逻辑运算符 (AND, OR)”查找“工程”部门中年龄大于 25 岁的所有员工:
SELECT name, department, ageFROM employeesWHERE department = 'Engineering' AND age > 25;查找“销售”部门或薪资超过 100,000 美元的员工:
SELECT name, department, salaryFROM employeesWHERE department = 'Sales' OR salary > 100000;使用 IN 和 NOT IN
Section titled “使用 IN 和 NOT IN”查找“市场”或“销售”部门的员工:
SELECT name, departmentFROM employeesWHERE department IN ('Marketing', 'Sales');使用 BETWEEN
Section titled “使用 BETWEEN”查找薪资在 70,000 美元到 100,000 美元之间(含边界)的员工:
SELECT name, salaryFROM employeesWHERE salary BETWEEN 70000 AND 100000;使用 LIKE 和 ILIKE 进行模式匹配
Section titled “使用 LIKE 和 ILIKE 进行模式匹配”查找姓名以 ‘A’ 开头的员工。LIKE 区分大小写。
SELECT name FROM employees WHERE name LIKE 'A%';PostgreSQL 提供了 ILIKE 用于不区分大小写的匹配。查找部门名称包含 ‘market’ 的员工,不区分大小写:
SELECT name, department FROM employees WHERE department ILIKE '%market%';检查 NULL 值
Section titled “检查 NULL 值”首先,我们添加一名没有部门的员工:
INSERT INTO employees (name, age, salary) VALUES ('Grace', 29, 72000);查找未分配部门的员工。始终使用 IS NULL 或 IS NOT NULL,而不是 = NULL。
SELECT name, department FROM employees WHERE department IS NULL;在子查询中使用 EXISTS
Section titled “在子查询中使用 EXISTS”EXISTS 操作符检查子查询中是否存在行。这是一种不检索实际数据而检查条件的有效方法。让我们找出所有工作在一个至少有一人收入超过 100,000 美元的部门的员工。
SELECT name, departmentFROM employees e1WHERE EXISTS ( SELECT 1 FROM employees e2 WHERE e2.department = e1.department AND e2.salary > 100000);此查询返回“销售”部门的所有员工,因为该部门包含高收入者(‘David’ 和 ‘Frank’)。这是一种用于复杂条件过滤的强大模式。