参考数据表名:person
id | name | age |
1 | atom | 111 |
2 | atom2 | 22 |
3 | atom3 | 33 |
4 | atom | 22 |
1、IN操作符
如果我们想搜索姓名为atom和atom2的搜索数据应该怎们办呢?
可以用or来搜索:SELECT age,name FROM person WHERE name = "atom" or name = "atom2"
还有一种方法可以使用in来进行筛选:
SELECT age,name FROM person WHERE name IN ("atom","atom2")
搜索年龄和姓名从person中,姓名包含 atom和atom2的数据
IN的几个优点:
1、在与and和or组合使用IN时,求值顺序更容易理解
2、在性能上IN比or执行的更快
2、NOT操作符
如果我们要搜索姓名不为atom的其他数据,应该怎么办呢?
可以用之前学到的!=或者<>来搜索:SELECT age,name FROM person WHERE name != "atom"
或 SELECT age,name FROM person WHERE name <> "atom"
也可以使用NOT操作符来搜索:SELECT age,name FROM person WHERE not name = "atom"
搜索年龄和姓名从person表中,姓名不为atom的数据
3、LIKE操作符
LIKE通常和“%”、“_”(下面4、5会说"%"和"_"的具体用法)等通配符一起使用,主要是要搜索的数据的值只知道部分。比如要搜索atom2,只记着时at开头的,后面的记不清楚了,就要使用的通配符like了
如果要搜索名字结尾时2的用户,应该怎么搜索呢?
这时候就要用到like搭配%去使用了
SELECT age,name FROM person WHERE name LIKE "%2"
搜索年龄和姓名从person表中,名字结尾为2的数据
4、%通配符
上面简单看了下like的基本使用规则,现在说下%的含义,可以理解为 %代表任意位数的任意字符,比如 "%2" 就表示 前面可以是任意的内容,但是最后一个字必须是2的数据;"a%"表示以a开头,后面是任意内容的数据;还可以"a%2"表示以a开头结尾是2的所有数据;还有就是“%a%2%”就是可以理解为搜索前面为任意内容也可以为空,然后中间有a,再之后有任意内容或者为空,再之后有个2,再之后可以有任何内容或者为空,总结下就是中间有a和2就行的数据
SELECT age,name FROM person WHERE name LIKE "%a%2%"
搜索年龄和姓名从person表中,姓名中为XaX2X的数据(X表示任意位数的任意数据或者空)
5、_通配符
如果我们只忘记了行名的第二个字符,前后都记着,又不想要搜索太多没用的内容应该怎么办?
这时候就可以使用通配符 "_",通配符"_"表示只匹配单个任意字符。比如真实名字为atom和attom,但是搜索的时候忘了是atom还是akom了,只确定是aXom(X表示一个字符),这时候用%就不合适了,"a%om"会搜出 atom和attom但是我只想要 atom的相关数据,这时候就要用到"_"了,具体写法 "a_om"这样就只会搜出了atom了
那我要是想搜索 attom呢? 可以那就再加一个 "_"就行了,有几个不确定的就输入几个 "_",具体可输入"a__om"这样就只会搜索出 attom了
看实际表中数据,我要搜索 atom2 ,但是只记着 aXoX2(X表示单个字符),应该怎么办呢?
SELECT age,name FROM person WHERE name LIKE "a_o_2"
搜索年龄和姓名从person表中,姓名为 aXoX2(X表示单个字符)的数据
那还有个问题"%"可以表示0个字符(空),那"_"呢?可以看下实际搜索结果
SELECT age,name FROM person WHERE name LIKE "atom_"
搜索结果只搜索出来atom2和atom3并没有搜索到 atom,所有"_"并不能表示为0个字符(空)