---【AND 操作符】
为了通过不止一个列进行过滤,可以使用and操作符对where子句附加条件,
```mysql
select prod_id,prod_price,prod_name
from products
where vend_id=1003 and prod_price <=10;
【分析】此sql语句检索商品的供应商编号,并且价格小于等于10的所有产品的名称和价格,这条select语句中的where子句包含来那个条件,并且用and 关键字链接他们,
and 指示DBMS 只返回满足所有给定条件的行。如果某个商品,供应商,1003制造,价格高于10就不会检索它。
检测的结果是:
prod_id | prod_price | prod_name
fb | 2 | sangsing
hb | 2 | sa
opb | 5 | sa
kkb | 2.3 | sang
and 用在where子句中的关键字,用来指示检索满足所有给定条件的列
使用and 还可以添加 多个过滤条件,就是在后面添加一个一个的and
---【OR 操作符】
or操作符和and操作符不同,它指示MySQL检索匹配任一条件的行
如下select语句
select prod_name,prod_price
from products
where vend_id =1002 or vend_id=1006;
or 检索的时候,只是检索其中的一条,只要有一个成立就会查询出来结果,如果都没有的话则查询没有数据
and 是必须所有的条件都要成立才可以,所以使用and或者or要根据实际情况来使用。
--【计算次序】
where可以包含任意数目的and和or操作符,允许两者结合已进行复杂的高级过滤
使用MySQL语句查询下面的数据:
假如需要列出价格为大于等于10 并且由1002或者1003 制造的所有产品,下面的select语句使用and 和or操作符的组合建立了一个where子句进行数据查询
select prod_name,prod_price
from products
where vend_id =1002 or vend_id =1003 and prod_pricce >=10;
查询结果是:
prod_name | prod_price
bird | 13
bold | 14
ayrd | 8
awrd | 5
oldd | 33
通过上面的查询结果,我们可以看到查询的结果中有两条数据是小于10的,这是因为什么呢?
!!!原因就是在于计算机的次序。
【在处理or操作符前,会优先处理and操作符,当sql看到上述的where子句时,它理解的就是由供应商1003制造的任何价格为10以上的产品,或者由供应商1002制造的任何产品,而不管价格如何,
换句话说,就是由于AND 在计算机中的优先级最高,操作符被错误组合了。】
这种问题的解决方法就是使用小括号把对应的分组给括起来。
select prod_name,prod_price
from products
where (vend_id =1002 or vend_id =1003) and prod_pricce >=10;
查询结果是:
prod_name | prod_price
bird | 13
bold | 14
oldd | 33
在where子句中使用圆括号,任何时候使用具有and或者or 操作的where子句,都应该使用圆括号明确的进行分组操作符,不要过分的依赖默认计算机次序,即使它是你想要的东西也是如此,使用圆括号,没有任何坏处,它可以消除歧义。
---【in操作符】
圆括号在where子句中还有另外一种用法,in操作符用来指定条件范围,范围中的每个条件都可以进行匹配,in 取合法值的由逗号分隔的清单,全都括在圆括号中。
select prod_name,prod_price
from products
where vend_id in(1002,1003)
order by prod_name;
查询结果是:
prod_name | prod_price
bird | 13
bold | 14
ayrd | 8
awrd | 5
oldd | 33
in 代表在一个合法的区间里面,只要在这个区间里面都是合法的值,所以如果要取区间的值就用in这个合法的语法来进行取值。
in 操作符和不加集合的or操作符完成相同的功能。
---【使用in操作符的优点】
-在使用长的合法选项清单时,in操作符的语法更清楚并且更加直观
-在使用in时,计算的次序更容易管理,因为使用的操作符更少
-in操作符一般比or操作符清单执行更快速高效
-in的最大优点是可以包含其他select语句,使得能够更动态地建立where子句!!!
--【not操作符】
where子句中的not操作符,有且只有一个功能,那就是否定它之后所跟的条件。
--not where 子句 用来否定后跟条件的关键字。
为了证明一下商品ID不在1002 和1003中,编写如下代码:
select prod_name,prod_price
from products
where vend_id not in (1002,1003)
order by prod_name;
prod_name | prod_price
d | 13
ld | 14
rd | 8
wrd | 5
ldd | 33
not的优势,在复杂的高级查询中会很有用处,例如在和in操作符联合使用时,not使找出与条件列表不匹配的行非常简单。