摘要:在本教程中,您將學習如何使用 PostgreSQL
的 WHERE
子句來篩選表中的行。
PostgreSQL WHERE
子句
SELECT FROM
語句從表中所有行的一個或多個列中查詢數據。實際上,你經常需要選擇滿足某個條件的行。
要根據條件從表中篩選行,需在 SELECT
語句中使用 WHERE
子句:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
執行該語句時,PostgreSQL
會先計算 FROM
子句,然后計算 WHERE
子句,最后計算 SELECT
子句:
- 首先,通過執行
FROM
子句檢索table_name
中的每一行。 - 其次,評估
WHERE
子句中的condition
,如果condition
為真,則將該行包含在結果集中。 - 第三,從選中的行中選擇
SELECT
子句中指定的列。
如果 table_name
中沒有行滿足 condition
,則SELECT語句會返回一個空集,其中不包含任何行。
PostgreSQL WHERE
子句示例
假設我們有如下的 inventories
表:
CREATE TABLE inventories (name VARCHAR(255),brand VARCHAR(50),quantity INT,price DECIMAL(19, 2)
);INSERT INTO inventories (name, brand, quantity, price)
VALUES ('iPhone 14 Pro', 'Apple', 10, 999.99),('Galaxy S23 Ultra', 'Samsung', 15, 1199.99),('Pixel 7 Pro', 'Google', 8, 899.99),('Xperia 1 IV', 'Sony', 7, 1299.99);
以下語句使用 WHERE
子句來檢索數量大于9的產品:
SELECT name, quantity
FROM inventories
WHERE quantity > 9;
輸出:
name | quantity
------------------+----------iPhone 14 Pro | 10Galaxy S23 Ultra | 15
它的工作原理。
首先,FROM
子句從 inventories
表中選取所有行:
name | brand | quantity | price
------------------+---------+----------+---------iPhone 14 Pro | Apple | 10 | 999.99Galaxy S23 Ultra | Samsung | 15 | 1199.99Pixel 7 Pro | Google | 8 | 899.99Xperia 1 IV | Sony | 7 | 1299.99
其次,WHERE
子句計算庫存表中的每一行,檢查數量是否大于 10,并將中間結果集中的行包括在內:
name | brand | quantity | price
------------------+---------+----------+---------iPhone 14 Pro | Apple | 10 | 999.99Galaxy S23 Ultra | Samsung | 15 | 1199.99
它返回兩行,數量分別為10和15。
第三, SELECT
子句從 name
和 quantity
列中查詢數據:
name | quantity
------------------+----------iPhone 14 Pro | 10Galaxy S23 Ultra | 15
比較運算符
除了大于運算符 >
之外,你還可以在 WHERE
子句中使用其他比較運算符:
Operator | Meaning |
---|---|
= | Equal to |
!= (<>) | Not Equal To |
> | Greater than |
>= | Greater than or equal to |
< | Less than |
<= | Less than or equal to |
等于運算符 (=)
如果兩個值相等,相等運算符返回true。
例如,以下語句在WHERE子句中使用等于運算符 (=)
來查詢 inventories
中數量等于10的產品:
SELECT name, quantity
FROM inventories
WHERE quantity = 10;
輸出:
name | quantity
---------------+----------iPhone 14 Pro | 10
該查詢返回 iPhone 14 Pro
,因為只有該產品的數量為10。
不等于運算符(!=)
以下語句使用不等運算符 (!=)
從 inventories
表中查詢數量不等于10的產品:
SELECT name, quantity
FROM inventories
WHERE quantity != 10;
輸出:
name | quantity
------------------+----------Galaxy S23 Ultra | 15Pixel 7 Pro | 8Xperia 1 IV | 7
請注意,PostgreSQL
也使用 <>
作為不等于運算符,因此你可以交替使用 !=
和 <>
運算符。
WHERE
子句和列別名
由于 PostgreSQL
先計算 WHERE
子句,再計算 SELECT
子句,因此在計算 WHERE
子句時,列別名不可用。
以下語句嘗試在 WHERE
中使用 amount
列別名,結果導致錯誤:
SELECTname,quantity * price AS amount
FROMinventories
WHEREamount > 10000;
錯誤:
column "amount" does not exist
輸出表明 amount
列不存在。要修復此錯誤,您需要按如下方式在 WHERE
子句中使用該表達式:
SELECTname,quantity * price AS amount
FROMinventories
WHEREquantity * price > 10000;
輸出:
name | amount
------------------+----------Galaxy S23 Ultra | 17999.85
總結
- 使用
WHERE
子句根據條件從表中篩選行。 PostgreSQL
在FROM
子句之后、SELECT
子句之前對WHERE
子句進行求值。