重学MYSQL之高级数据过滤

数据库 2020-09-07 823

1.组合WHRER子句

SQL允许给出多个WHRER子句,这些子句有两种使用方式,即以AND子句或者OR子句方式使用。

1.1 AND 操作符

SELECT name, shop_price, category_id FROM goods_goods WHERE category_id = 7 and shop_price > 20;

筛选出商品类型为7,且价格大于20的所有数据。

结合排序语句

SELECT name, shop_price, category_id FROM goods_goods WHERE
 category_id = 7 and shop_price > 20 ORDER BY add_time DESC; 

将上一条语句结果按照加入时间降序排列。

1.2 OR 操作符

OR操作符与AND操作符正好相反,它指示数据库检索匹配任一条件下的行。事实上,很多db在OR WHERE 子句的第一个条件满足时,就不再计算第二个条件了。

SELECT title FROM blog_blogmodel WHERE title = 'Js计算器' OR category_id = 2;

这里返回了三条数据,一条是title满足第一个条件,而另外2条则是满足category_id=2的数据。

1.3 求值顺序

WHERE子句可以包含任意数目的AND或者OR操作符。允许两者结合以进行更复杂和高级的过滤。

假如需要列出价格为10即以上,且由DLL01或者BRS01制作的所有产品。SELECT语句 如下

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

上面语句查出的结果中,有4行价格小于4,显然不符合预期。原因是SQL会优先处理AND操作符。当SQL看到WHERE子句时,理解为:由供应商BRS01制造的价格为10即以上的所有产品,以及由供应商DLL01生产的商品。

知道原因,可以使用圆括号对操作符进行分组。

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

这时,语句就变成了选择由供应商BRS01或DLL01的产品,且价格大于等于10。

2.IN操作符

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

SELECT name, shop_price, category_id FROM goods_goods WHERE category_id IN (7, 15);

从goods表中查找出category_id=7或15的商品

IN(7, 15)与category_id = 7 OR category_id = 15的作用相同

IN操作符的优势:

  • 再有很多选项时,更直观
  • 在与AND或者OR组合使用时,求值顺序更容易管理
  • IN操作符一般比一组OR操作符执行的更快
  • IN的最大优点是可以包含其他SELECT语句,能更动态的建立WHERE子句。 

3. NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,就是否定其后所跟的任何条件。

SELECT name, category_id FROM goods_goods WHERE NOT category_id = 7;

查询出category_id不等于7的所有数据 

标签:数据库

文章评论

评论列表

已有0条评论