PostgreSQL 教程
1. PostgreSQL 教程 2. Linux 上安装 PostgreSQL 3. Windows 上安装 PostgreSQL 4. Mac OS 上安装 PostgreSQL 5. PostgreSQL 语法 6. PostgreSQL 数据类型 7. PostgreSQL 创建数据库 8. PostgreSQL 选择数据库 9. PostgreSQL 删除数据库 10. PostgreSQL 创建表格 11. PostgreSQL 删除表格 12. PostgreSQL 模式(SCHEMA) 13. PostgreSQL INSERT INTO 语句 14. PostgreSQL SELECT 语句 15. PostgreSQL 运算符 16. PostgreSQL 表达式 17. PostgreSQL WHERE 子句 18. PostgreSQL AND & OR 运算符 19. PostgreSQL UPDATE 语句 20. PostgreSQL DELETE 语句 21. PostgreSQL LIKE 子句 22. PostgreSQL LIMIT 子句 23. PostgreSQL ORDER BY 语句 24. PostgreSQL GROUP BY 语句 25. PostgreSQL WITH 子句 26. PostgreSQL HAVING 子句 27. PostgreSQL DISTINCT 关键字 28. PostgreSQL 约束 29. PostgreSQL 连接(JOIN) 30. PostgreSQL UNION 操作符 31. PostgreSQL NULL 值 32. PostgreSQL 别名 33. PostgreSQL 触发器 34. PostgreSQL 索引 35. PostgreSQL ALTER TABLE 命令 36. PostgreSQL TRUNCATE TABLE 37. PostgreSQL View(视图) 38. PostgreSQL TRANSACTION(事务) 39. PostgreSQL LOCK(锁) 40. PostgreSQL 子查询 41. PostgreSQL AUTO INCREMENT(自动增长) 42. PostgreSQL PRIVILEGES(权限) 43. PostgreSQL 时间/日期函数和操作符 44. PostgreSQL 常用函数

PostgreSQL WHERE 子句

PostgreSQL WHERE 子句

在 PostgreSQL 中,当我们需要根据指定条件从单张表或者多张表中查询数据时,就可以在 SELECT 语句中添加 WHERE 子句,从而过滤掉我们不需要数据。

WHERE 子句不仅可以用于 SELECT 语句中,同时也可以用于 UPDATE,DELETE 等等语句中。

语法

以下是 SELECT 语句中使用 WHERE 子句从数据库中读取数据的通用语法:

SELECT column1, column2, columnN

FROM table_name

WHERE [condition1]

我们可以在 WHERE 子句中使用比较运算符或逻辑运算符,例如 >, <, =, LIKE, NOT 等等。

创建 COMPANY 表(下载 COMPANY SQL 文件 ),数据内容如下:

db# select * from COMPANY;

 id | name  | age | address   | salary

----+-------+-----+-----------+--------

  1 | Paul  |  32 | California|  20000

  2 | Allen |  25 | Texas     |  15000

  3 | Teddy |  23 | Norway    |  20000

  4 | Mark  |  25 | Rich-Mond |  65000

  5 | David |  27 | Texas     |  85000

  6 | Kim   |  22 | South-Hall|  45000

  7 | James |  24 | Houston   |  10000

(7 rows)
以下几个实例我们使用逻辑运算符来读取表中的数据。

AND

找出 AGE(年龄) 字段大于等于 25,并且 SALARY(薪资) 字段大于等于 65000 的数据:

db=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

 id | name  | age |  address   | salary

----+-------+-----+------------+--------

  4 | Mark  |  25 | Rich-Mond  |  65000

  5 | David |  27 | Texas      |  85000

(2 rows)

OR

找出 AGE(年龄) 字段大于等于 25,或者 SALARY(薪资) 字段大于等于 65000 的数据:

db=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

id | name  | age | address     | salary

----+-------+-----+-------------+--------

  1 | Paul  |  32 | California  |  20000

  2 | Allen |  25 | Texas       |  15000

  4 | Mark  |  25 | Rich-Mond   |  65000

  5 | David |  27 | Texas       |  85000

(4 rows)

NOT NULL

在公司表中找出 AGE(年龄) 字段不为空的记录:

db=#  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;

  id | name  | age | address    | salary

 ----+-------+-----+------------+--------

   1 | Paul  |  32 | California |  20000

   2 | Allen |  25 | Texas      |  15000

   3 | Teddy |  23 | Norway     |  20000

   4 | Mark  |  25 | Rich-Mond  |  65000

   5 | David |  27 | Texas      |  85000

   6 | Kim   |  22 | South-Hall |  45000

   7 | James |  24 | Houston    |  10000

(7 rows)

LIKE

在 COMPANY 表中找出 NAME(名字) 字段中以 Pa 开头的的数据:

db=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';

id | name | age |address    | salary

----+------+-----+-----------+--------

  1 | Paul |  32 | California|  20000

IN

以下 SELECT 语句列出了 AGE(年龄) 字段为 25 或 27 的数据:

db=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );

 id | name  | age | address    | salary

----+-------+-----+------------+--------

  2 | Allen |  25 | Texas      |  15000

  4 | Mark  |  25 | Rich-Mond  |  65000

  5 | David |  27 | Texas      |  85000

(3 rows)

NOT IN

以下 SELECT 语句列出了 AGE(年龄) 字段不为 25 或 27 的数据:

db=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );

 id | name  | age | address    | salary

----+-------+-----+------------+--------

  1 | Paul  |  32 | California |  20000

  3 | Teddy |  23 | Norway     |  20000

  6 | Kim   |  22 | South-Hall |  45000

  7 | James |  24 | Houston    |  10000

(4 rows)

BETWEEN

以下 SELECT 语句列出了 AGE(年龄) 字段在 25 到 27 的数据:

db=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

 id | name  | age | address    | salary

----+-------+-----+------------+--------

  2 | Allen |  25 | Texas      |  15000

  4 | Mark  |  25 | Rich-Mond  |  65000

  5 | David |  27 | Texas      |  85000

(3 rows)

子查询

以下的 SELECT 语句使用了 SQL 的子查询,子查询语句中读取 SALARY(薪资) 字段大于 65000 的数据,然后通过 EXISTS 运算符判断它是否返回行,如果有返回行则读取所有的 AGE(年龄) 字段。

db=# SELECT AGE FROM COMPANY

        WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

 age

-----

  32

  25

  23

  25

  27

  22

  24

(7 rows)

以下的 SELECT 语句同样使用了 SQL 的子查询,子查询语句中读取 SALARY(薪资) 字段大于 65000 的 AGE(年龄) 字段数据,然后用 > 运算符查询大于该 AGE(年龄) 字段数据:

db=# SELECT * FROM COMPANY

        WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

 id | name | age | address    | salary

----+------+-----+------------+--------

  1 | Paul |  32 | California |  20000