Oracle Or子句


在本教學中,我們來學習如何使用Oracle OR運算子來組合兩個或更多的布林表示式。

Oracle OR運算子介紹

OR運算子是一個邏輯運算子,它組合了布林表示式,如果其中一個表示式為真(true),則返回true

以下說明OR運算子的語法:

expression_1 AND expression_2

下表顯示了OR運算子在truefalseNULL值之間的結果。

TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL

我們經常在SELECTDELETEUPDATE語句的WHERE子句中使用OR運算子來形成過濾資料的條件。

如果在語句中使用多個邏輯運算子,則Oracle會在評估NOTAND運算子之後評估OR運算子。 但是,可以使用括號更改評估的順序。

Oracle OR運算子的例子

我們將使用範例資料庫中的orders表進行演示。表結構如下圖所示 -

訂單表結構

1. Oracle OR運算子組合兩個布林表示式的例子

以下範例查詢狀態為掛起(Pending)或取消(Canceled)的訂單,參考以下查詢語句 -

SELECT
    order_id,
    customer_id,
    status,
    TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date
FROM
    orders
WHERE
    status = 'Pending'
    OR status = 'Canceled'
ORDER BY
    order_date DESC;

在這個例子中,語句返回了滿足下列表示式之一的所有訂單:

status = 'Pending' 
-- 或
status = 'Canceled'

執行上面查詢語句,得到以下結果 -

2. Oracle OR運算子結合兩個以上的布林表示式的例子

我們經常使用OR運算子來組合兩個以上的布林表示式。 例如,以下語句檢索負責以下銷售員ID是60,6162的訂單:

SELECT
    order_id, 
    customer_id, 
    status, 
    salesman_id,
    TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date
FROM
    orders
WHERE
    salesman_id = 60 
    OR salesman_id = 61 
    OR salesman_id = 62
ORDER BY
    order_date DESC;

執行上面查詢語句,得到以下結果 -

可以使用IN運算子來代替使用多個OR運算子,如下例所示:

SELECT
    order_id,
    customer_id,
    status,
    salesman_id,
    TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date
FROM
    orders
WHERE
    salesman_id IN(60, 61, 62)
ORDER BY
    order_date DESC;

該查詢返回的結果與使用上面的OR運算子返回的結果相同。

3. Oracle OR運算子與AND運算子結合使用的範例

可以將OR運算子與其他邏輯運算子(如ANDNOT)結合起來,形成一個條件。 例如,以下查詢將返回屬於客戶ID為44並且已取消(Canceled)或掛起(Pending)狀態的訂單。參考以下查詢語句 -

SELECT
    order_id,
    customer_id,
    status,
    salesman_id,
    TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date
FROM
    orders
WHERE
    ( status = 'Canceled' OR status = 'Pending')
    AND customer_id = 44
ORDER BY
    order_date;

執行上面查詢語句,得到以下結果 -

在本教學中,您已學習如何使用Oracle OR運算子來組合兩個或更多的布林表示式。