所以我应该找到丢失图书馆卡的顾客的第一个名字和电子邮件。
该方案的正确解决方案是:
SELECT first_name, email
FROM patrons
WHERE library_id = "MCL1001"
OR library_id = "MCL1100"
OR library_id = "MCL1011";
我想知道为什么我们不能在这里使用AND,我是一个尝试学习SQL的初学者,我很难想象为什么AND在这种情况下是一个错误的选项
我的回答是:
SELECT first_name, email
FROM patrons
WHERE library_id = "MCL1001"
AND library_id = "MCL1100"
AND library_id = "MCL1011";
请提前帮助和谢谢。
答案 0 :(得分:0)
一次考虑一行的条件。使用AND
条件说:
id = "MCL1001"
查找与library_id = "MCL1100"
和(同时)#:kivy 1.0.9
BoxLayout:
orientation: "vertical"
ActionBar:
ActionView:
use_separator: True
ActionPrevious:
title: 'Action Bar'
with_previous: False
ActionOverflow:
ActionButton:
text: 'Btn0'
icon: 'atlas://data/images/defaulttheme/audio-volume-high'
ActionButton:
text: 'Btn1'
ActionGroup:
text: 'Group1'
ActionButton:
text: 'Btn2'
TicTacToeGrid:
<GridEntry>:
font_size: self.height
background_color: 0, 0, 0, 0
<TicTacToeGrid>:
cols: 3
canvas.after:
Color:
rgba: 0.149, 0.102, 0.051, 1.0
Line:
points: self.width/3, self.center_y - (self.height * 0.45), self.width/3, self.center_y + (self.height * 0.45)
width: 2
Line:
points: self.width*2/3, self.center_y - (self.height * 0.45), self.width*2/3, self.center_y + (self.height * 0.45)
width: 2
Line:
points: self.center_x - (self.width * 0.45), self.height/3, self.center_x + (self.width * 0.45), self.height/3
width: 2
Line:
points: self.center_x - (self.width * 0.45), self.height*2/3, self.center_x + (self.width * 0.45), self.height*2/3
width: 2
的行。这永远不会成立,因为对于单行,library_id永远不会有两个不同的值。
答案 1 :(得分:0)
如果使用AND,如果library_id
与您的三个值相等,则结果将为TRUE,这是不可能的,因为library_id
只能存储一个值。搜索Boolean algebra。
只有当所有句子都为TRUE时,AND操作才会返回TRUE。相反,当至少一个句子为TRUE时,OR运算将为TRUE。
答案 2 :(得分:0)
AND,当你需要匹配所有条件时,或者当匹配任何条件就足够了。因此,如果您有3行3个ID,并且如果所有3个匹配(或在您的情况下丢失)将返回。即使一个人丢失了也不会显示该行而OR会。
答案 3 :(得分:0)
这些运营商来自Boolean algebra
那里有三个basic operations:
您可以在上面的链接中找到有关这些操作的详细说明 我无法相信你还没有在学校里学到这一点。
library_id = "MCL1001" AND library_id = "MCL1100"
条件意味着每行必须满足查询选择的条件
一列值不能同时为MCL1001
和MCL1100
,并且此条件始终为false,因此查询neger会给出任何行。
在这种情况下:library_id = "MCL1001" OR library_id = "MCL1001"
列值可以是MCL1001
或MCL1001
,因此查询会选择包含第一个值的行,而另一行包含第二个值。< / p>
答案 4 :(得分: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";
的任何行并将其返回。所以你可以得到所有三行。
因为AND条件检查每行是否满足所有条件,而OR条件只检查一个正确的条件并继续,
你的查询写错了。