簡述where下or的使用特點
數據庫使用爲SQL Server
在sql中 or 的作用是對它前面現有的約束條件做出轉折,相當於一個新的where的開始,有一點就是和and的連用,這裏的and只起到連接約束條件的作用。
我們舉例說明,首先實現查詢:
SELECT
id,
login_name,
organization_id
FROM
iam_user
查詢結果:
加上條件查詢
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
organization_id = 0
這時查出來的就是 organization_id = 0
的數據,再加上or判斷
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
organization_id = 0
OR id = 10
這時候我們查的結果就是 organization_id=0
的數據加上 id = 10
數據的並集去重
我們再去看一個查詢
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
organization_id = 0
AND login_name = 'admin'
OR id = 10
結果是
這個很好理解,換個順序
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
id = 10
OR organization_id = 0
AND login_name = 'admin'
結果如下
發現結果和上面一樣
再看看SQL我們顛倒了OR的兩邊的條件,結果就還是一樣的
我們只把AND拿下來,
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
organization_id = 0
OR id = 10
AND login_name = 'admin'
結果如下:
我們看到and對OR後面的 id = 10
起效了。
於是我的理解在不使用OR時,上面的SQL就相當於下面的:
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
organization_id = 0
UNION
SELECT
id,
login_name,
organization_id
FROM
iam_user
WHERE
id = 10
AND login_name = 'admin'
結論: OR的開始,就是一個where約束的重新開始 ,結果爲每個where約束的並集去重。