“多情自古空余恨,此恨绵绵无绝期。“
又是一个阳光明媚的早晨,秋高气爽,天高云淡,可是李有为的心里却被蒙上了一层厚厚的阴霾。
古诗有云:“莫言下岭便无难,赚得行人错喜欢。正入万山圈子里,一山放过一山栏。“李有为所处的似乎就是这么一个状态,刚刚解决了一个问题,可是里面有陷入了另一个问题当中。
“So many people all around the world,Tell me where do I find someone like you girl**"
茫茫人海,芸芸众生,谁能告诉他,他钟意的女仔在哪里呢?
正当李有为心烦意乱的时候,背后传来了一阵熟悉的烟草味道,紧接着一道熟悉的声音钻进了他的耳朵里。
“谁也不能,唯独你大爷能!”
李有为回过头凝视着大爷,目中充满了感激之色,他也说这句话通常意味着大爷准备传授他新东西了。
"还记得我们初次相见,我让你运行的那段SQL代码吗?“
select * from human_base_info where name='李有为'
这行代码里的where其实也是SQL里面的一个关键词,数据表里一般都包含大量的数据,通常情况下,我们并不会把所有的数据都选择出来,只需要筛选出满足特定条件的数据即可,where就是起这种作用的关键词。
select * from human_base_info where name='李有为'
现在我们再来看这句SQL,其中的含义就很清晰明了了,查询human_base_info表里面,满足name是‘李有为’的所有人的所有信息。
where有很多操作符,name='李有为’是做相等检验,这只是其中一个操作。
比如说你想要看妹子,就用sex='F’
比如说你想要看年龄等于22岁的,就用age=22
如果想看身高170极其以上的,就用height>=170
如果想看身高170及其以下的,就用height<=170
注意:使用引号问题
看来上面的条件你会发现,sex做相等检验的时候,对值加了单引号''
对age做相等检验的时候,则没有加单引号,这是因为数据类型的原因
sex(性别),是字符串类型
age(年龄),是数值类型
对字符串做过滤操作的时候,需要用''单引号做限制
对数值类型做过滤操作,则不需要。
数据类型的问题以后会详讲,此不多言……
具体的操作符如下
操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
!< 不小于
> 大于
>= 大于等于
!> 不大于
BETWEEN 在两个值之间
IS NULL 值为空
李有为感觉自己已经完全听懂大爷的话了,可是另一个问题却又萦绕在他心里,令他不吐不快。
按照大爷的说法,他现在可以使用where配合操作符,过滤一些满足他期望条件的数据了,他可以知道身高170-180之间的人,可以知道年龄在22-25岁之间的人,可以知道颜值在200以上的人,可是他却无法把这些过滤条件整合,比方说,他想要知道身高178-180,年龄22-25,颜值200以上的所有妹子,这个时候应该怎么办呢?
大爷立马看穿了他的心思,朝着李有为嘿嘿笑道:“你龟儿子现在是不是想要晓得,满足身高(height)170-180,年龄(age)22-25,颜值(looks)200以上的所有妹子(sex=‘F’)的信息。”
二人相视一笑,男人之间的快乐就是这么简单、直接!
;"咳咳咳……"大爷卡了一口痰,吐了一炮老叶子烟口水,喝了一口三十七度五的温茶水,微笑道:“看来有必要给你讲一讲组合筛选、过滤了!”
AND
大爷突然提高了音量:“身高170-180,年龄22-25,颜值200以上,性别为女,这些条件是什么关系?“”
“并列关系!”李有为正襟危坐道。
“英语单词里面,哪一个单词可以表示并列?“
“AND”
“没错,就是AND!AND也是SQL的一个关键词。”你刚才的那些过滤条件就可以用AND把他们并列起来。
最后的SQL其实就是这么简单
SELECT
*
FROM
human_base_info
WHERE
height >= 170
AND height <= 180
AND age >= 22
AND age <= 25
AND looks >= 200
AND sex = 'F'
大爷不愧是大爷,李有为看完代码之后,心中油然而生一股敬佩之情,犹如滔滔江水连绵不绝,又有如黄河泛滥一发不可收拾。
看着看着,李有为突然想到了另外一种实现方式,他连忙在电脑上敲下了相关的SQL代码,然后立即给大爷检查。
SELECT
*
FROM
human_base_info
WHERE
height BETWEEN 170 AND 180
AND age BETWEEN 22 AND 25
AND sex = 'F'
大爷看完之后,脸上露出了欣慰的笑容,“不愧是我铁齿金不换,诚实可靠老郎君的亲传弟子。”
看见大爷欣慰、赞赏的笑容后,李有为就像是吃了十个香飘四溢的烤脑花一样,智商直线飙升,举一反三道:“如果说同时满足用“AND”,那么只满足其中一项就用“OR“”了哦。因为某些条件不可能同时满足,比如说出生地,不可能拥有两个出生地,所以只能用OR.”。
比如说,我想要看出生地(birthplace)是S省A市或者是S省B市的人的信息,我的SQL应该这样写
SELECT
*
FROM
human_base_info
WHERE
birthplace='S省A市' or birthplace='S省B市'
大爷没有说话,只是默默地从抽屉里拿出了一包黄鹤楼,然后递了给李有为,此时无声胜有声,对李有为来说这就是最好的赞许。
“问渠那得清如许?为有源头活水来。”灵感这东西,一旦来了,挡都但不住,接过大爷的黄鹤楼香烟,李有为立马又想到了AND和OR共用的情况。
比方说,他想要知道身高170-180,年龄22-25,颜值200以上,性别为女,而且出生地是S省A市或者是S省B市的妹子的信息时,SQL就应该这么写
SELECT
*
FROM
human_base_info
WHERE
height >= 170
AND height <= 180
AND age >= 22
AND age <= 25
AND looks >= 200
AND sex = 'F'
AND birthplace = 'S省A市'
OR birthplace = 'S省B市'
大爷看了李有为的SQL代码后,轻轻摇了摇头,感叹道:“小伙子,你还是太年轻了点啊,SQL这东西和加减乘除运算一样,也是有优先级的。”
"来,看一看你的SQL代码的执行结果,是不是毫无逻辑,杂乱无章,一片狼藉。"现在,让我们来看一看你这句看起来很优美,但是逻辑像屎一样的SQL代码。
MySQL中,AND的执行优先级高于OR。也就是总是先执行AND语句,再执行OR语句。
你的本意是想要让5x2+3=25,可是如果你没有控制好运算优先级,整个计算按照先乘除后加减的方式,依次执行,所以最后的执行结果会是5x2+3=13
什么情况下5x2+3=25?
加“()“,提高运算优先级,5x(2+3)=25!
没错,就是加括号"()",提高OR的执行优先级!
注意!
这里的括号也必须是英文的"()"
在数据库甚至是计算机的世界里,
凡是代码中要用到标点符号的地方,
都是用的是英文的标点符号,
无论是逗号、单引号、双引号,冒号、还是括号
SELECT
*
FROM
human_base_info
WHERE
height >= 170
AND height <= 180
AND age >= 22
AND age <= 25
AND looks >= 200
AND sex = 'F'
AND (
birthplace = 'S省A市'
OR birthplace = 'S省B市'
)
李有为重新写好代码,大爷瞅了一眼,终于露出了满意的神色。然而看见数据的查询结果后,李有为的心却凉透了!
满足这些条件的妹子,竟然一个也找不到,李有为不禁有些失望,自己的要求也没多高啊,为什么就连一个妹子也不符合条件呢?难道哥们儿真的是命犯天煞孤星,无伴终老,孤独一生!
大爷在一旁哈哈笑出了声,这个不怪你要求高,而是要怪你本来你自己条件就不行,偏偏要求还高的一匹!