2017-07-23 24 views
-2

所以我應該找到失去圖書證的老主顧和郵件。我想知道爲什麼我不應該在這種情況下使用AND運算符?

正確的解決方案是:

SELECT first_name, email 
FROM patrons 
WHERE library_id = "MCL1001" 
    OR library_id = "MCL1100" 
    OR library_id = "MCL1011"; 

我想知道爲什麼我們不能用在這裏,我是一個初學者努力學習SQL和我有很難想象爲什麼在這個案例是一個錯誤的選項

我的回答是:

SELECT first_name, email 
FROM patrons 
WHERE library_id = "MCL1001" 
    AND library_id = "MCL1100" 
    AND library_id = "MCL1011"; 

請提前幫助和感謝。

+0

請問你的數據和預期結果是從哪個數據庫查詢的。你使用的是@Shubham Mishra –

+0

嘿,謝謝你的編輯。讚賞一下。請記住下次:) –

+0

@Rohit Poudel ...我在treehouse.com上使用SQL操作系統 –

回答

0

一次考慮單個行的條件。隨着AND條件說:

  • 查找與id = "MCL1001"一行,並(在同一時間)library_id = "MCL1100"

這絕不會是真的,因爲對於單個行,library_id永遠不會有兩個不同的值。

+0

嘿,感謝您的幫助。現在我對AND和OR有更多的瞭解。 –

0

如果使用AND,如果library_id與您的三個值相同,則結果將爲TRUE,但由於library_id只能存儲一個值,因此不可能發生這種情況。搜索約Boolean algebra

僅當所有句子爲TRUE時,AND運算纔會生成TRUE。相反,當至少有一個句子爲TRUE時,OR操作將返回TRUE。

0

AND是當你需要匹配所有的條件,或者匹配任何條件時就足夠了。所以如果你有3行3個ID,並且如果所有3個匹配(或在你的情況下丟失),將返回。即使有人丟失,也不會在OR時顯示該行。

+0

謝謝,斯里哈里。真的很感謝幫助。 –

0

這些運算符從Boolean algebra
未來有三種basic operations有:

  • AND(conjunction),表示爲x∧y(有時X和Y或KXY),滿足 x∧y= 1,如果x = y = 1,否則x∧y= 0。
  • 或(disjunction),表示爲 x∨y(有時x OR y或Axy),如果x = y = 0則滿足x∨y= 0,否則x∨y = 1。
  • NOT(negation),表示¬x(有時不是X,NX或!X),滿足¬x= 0,如果x = 1和¬x= 1,如果x = 0

你會發現上述鏈接中對這些操作的詳細描述。
我不能相信你沒有在學校學到這一點。


library_id = "MCL1001" AND library_id = "MCL1100"條件意味着,每行必須滿足此條件由查詢來選擇。
一個列值不能同時爲MCL1001MCL1100,並且此條件始終爲false,因此查詢neger會給出任何行。


在這種情況下:library_id = "MCL1001" OR library_id = "MCL1001"列值可以是MCL1001 OR MCL1001,所以查詢挑選包含第一值的行,和包含第二值的另一行。

+0

我知道這一點,但遇到了麻煩。無論如何,謝謝你指出。 –

0

當你執行這個查詢:

SELECT first_name, email 
FROM patrons 
WHERE library_id = "MCL1001" 
    AND library_id = "MCL1100" 
    AND library_id = "MCL1011"; 

將進入表的顧客,尋找一排,其中library_id = "MCL1001"並且如果library_id = "MCL1100"檢查同一行並且如果library_id = "MCL1011";檢查同一行。數據庫中的這樣一行將永遠不會存在。

但是當你執行:

SELECT first_name, email 
FROM patrons 
WHERE library_id = "MCL1001" 
    OR library_id = "MCL1100" 
    OR library_id = "MCL1011"; 

它會去你的表是老主顧和檢查任何行,其中library_id = "MCL1001"回報,繼續檢查任何行,其中library_id = "MCL1100"回吧,繼續 檢查任何行,其中library_id = "MCL1011";和把它返還。所以你可以得到所有的三行。

因爲和條件檢查,如果所有條件都各行中得到滿足,而OR條件只有一個正確的條件檢查並繼續,

您所查詢的是錯誤的寫。

相關問題