数据过滤--高级搜索条件查询数据

Posted ludundun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据过滤--高级搜索条件查询数据相关的知识,希望对你有一定的参考价值。

```msyql

---【AND 操作符】
为了通过不止一个列进行过滤,可以使用and操作符对where子句附加条件,


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使找出与条件列表不匹配的行非常简单。

```

以上是关于数据过滤--高级搜索条件查询数据的主要内容,如果未能解决你的问题,请参考以下文章

PHP:在 yii 中创建更高级别的查询语言以创建条件过滤器的最佳方法是啥

elasticSearch - 高级检索

Dexie JS - 结合条件过滤器和文本搜索

MySQL 查询语句SELECT和数据条件过滤

在MongoDB中返回数据之前有条件地添加过滤器困境

Laravel:高级搜索表单查询