MYSQL:高级数据过滤

组合WHERE子句

AND操作符

例子:

SELECT prod_id, prod_name, prod_price 
FROM products
WHERE vend_id = 'DLL01' AND prod_price <= 4 ;

在这里插入图片描述

OR操作符:

SELECT prod_name, prod_price 
FROM products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' ;

在这里插入图片描述

求值顺序:

WHERE 子句可以包含任意数目的AND和OR操作符。允许两者结合以进行复杂、高级的过滤。
但是,AND和OR两个哪个的优先级高呢?

SELECT prod_name, prod_price 
FROM products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
AND prod_price >= 10;

结果:
在这里插入图片描述
返回的行中有4行价格小于10。但我们需要的大于10的且生产厂商为’DLL01’或’BRS01’的产品。显然,返回数据没有按照预期进行过滤。原因在于,SQL在处理OR操作符前,优先处理AND操作符。当SQL处理上述语句时,操作是这样的:由供应商BRS01制造的价格为10美元以上的所有产品,以及由供应商DLL01制造的所有产品,而不管其价格如何。也就是说,AND在求值过程中优先级更高。
为了正确地解决问题,我们需要使用圆括号:

SELECT prod_name, prod_price 
FROM products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;

这次结果是正确的:
在这里插入图片描述
这是因为圆括号具有比AND或OR操作符更高的优先级。

IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。例子:

SELECT prod_name, prod_price, vend_id 
FROM products
WHERE vend_id IN ('DLL01', 'BRS01')
ORDER BY prod_name;

在这里插入图片描述

NOT操作符

WHERE子句中的NOT操作符可以否定其后所跟的任何条件。
例子

SELECT prod_name
FROM products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

在这里插入图片描述

发布了19 篇原创文章 · 获赞 0 · 访问量 330

猜你喜欢

转载自blog.csdn.net/the_name_of_science/article/details/105316658