《SQL必知必会》(4,5,6):过滤数据、高级数据过滤、通配符过滤

上一节,第三课 排序检索数据

第四课:过滤数据

4.1 使用where子句

数据库表中通常会包含大量的数据,很少需要查所有的行,也要避免全表扫描。我们就需要用限制条件来找我们需要的数据,也就是过滤。
搜索条件(search criteria) 过滤条件(filter condition) 都是一码事儿。
select语句中使用where子句来过滤。

SELECT prod_id,prod_price,prod_name from products
where prod_price=3.49
;

在这里插入图片描述这里只是简单的用了相等检验。SQL还能做更多事情,且看后边分解。

数据也可以在应用层过滤,但是我们一般不那么做,如果在客户端过滤,服务器就不得不发送多余的数据,客户端处理数据库的工作也会变大,影响应用的性能,浪费网络的带宽。我们一般选择优化数据库来高效的过滤数据

4.2 where子句操作符

在这里插入图片描述

SELECT prod_name,prod_price FROM Products
WHERE prod_price BETWEEN 5 AND 10;

在这里插入图片描述

4.3 小结

这—课介绍了如何用SELECT语句的WHERE子句过滤返回的数据。我们学习了如何检验相等、不相等、大于、小于、值的范围以及NULL值等。

第五课:高级数据过滤

5.1 组合where子句

操作符(operator) : 用来联结或改变where子句中的子句的关键字,也成为逻辑操作符(logical operator)。通常and,or;

5.1.1 and操作符

表示且,两个条件都满足才行,而且and是就近原则,下面细说。

SELECT prod_id,prod_name,prod_price FROM Products
WHERE vend_id = 'DLL01' and prod_price <= 4;

在这里插入图片描述

5.1.2 or操作符

任意一个条件满足都行。

SELECT prod_id,prod_name,prod_price FROM Products
WHERE vend_id = 'DLL01' or prod_price <= 4;

在这里插入图片描述

5.1.13 求值顺序

之所以说and是就近原则,其实是先执行and在执行or。

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

在这里插入图片描述
当然了,要是加了括号 那就不一样了。括号的优先级高。

5.2 in操作符

标识条件范围。

SELECT prod_name,prod_price FROM Products
wHERE vend_id IN ( 'DLLO1','BRS01') 
ORDER BY prod_name;

在这里插入图片描述
注意和between and的区别,between and是两个数值范围。

in和or的效果基本一样。为啥要用in呢?

  • 在有很多合法选项时,IN操作符的语法更清楚,更直观。
  • 在与其他AND 和OR操作符组合使用IN时,求值顺序更容易管理。IN操作符一般比一组OR操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。
  • IN 的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。第11课会对此进行详细介绍。

5.3 NOT操作符

否定的意思,取反;

SELECT prod_name FROM Products
WHERE NOT vend_id = 'DLLO1'ORDER BY prod_name;

在这里插入图片描述
也可以用<> 或!=代替

第六课:通配符过滤

6.1 like操作符

前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一个值还是多个值,检验大于还是小于已知值,或者检查某个范围的值,其共同点是过滤中使用的值都是已知的。但满足不了现实的需求,必须找学生里边,所有姓吴的同学,操作符就无法满足。

通配符(wildcard):用来匹配值的一部分特殊字符。
搜索模式(search pattern): 有字面值、通配符或两者组合构成的搜索条件。
要使用通配符,就必须使用like!!!
谓词(predicate): 操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有所了解,以免在SQL文献或手册中遇到此术语时不知所云。
通配符搜索只能用于文本字段(字符串)

6.1.1 百分号%通配符

% 可以表示任意字符及个数。

SELECT prod_id,prod_name FROM Products
WHERE prod_name LIKE 'Fish%';

查找Fish开头的,
在这里插入图片描述

注意: 请注意 NULL
通配符%看起来像是可以匹配任何东西,但有个例外,这就是 NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为 NULL 的行。

6.1.2 下划线

与%作用差不多,_表示匹配单个字符,而不是多个。
而且也不能是0个。只能是1个不能多也不能少。

6.1.3 方括号[ ]

方括号[ ] 通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。

SELECT cust_contact
FROM customers
WHERE cust_contact 
LIKE '[JM]%'
ORDER BY cust_contact;

这里很正常的遇到坑了,被坑了好久,5555~
上边的语句,别的DBMS也许可以,而我是使用的MySQL,正好不适用!!!下边看看MySQL是咋用的吧!!

select cust_contact 
from customers
where cust_contact 
rlike '^[JM]';
-- where cust_contact regexp '^[JM]';

跟上边的区别就是多了个r^ ,这是为啥呢?
哎嘿,[ ] 在sql中其实是借鉴正则表达式的用法,在MySQL中不支持[ ],只能用正则表达式~~~ 所以。

使用通配符的技巧

通配符虽好,不要贪杯哦!

通配符相比来说更加的耗费性能。这里给出几点使用技巧:

  1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  2. 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
  3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

总之,通配符是一种极其重要和有用的搜索工具,以后我们经常会用到它。

小结

这次讲了啥是通配符,以及怎么用还说了:
天下之事皆然,过则非惟无益,反害之。
樯橹灰飞烟灭,谈笑间 hhh

猜你喜欢

转载自blog.csdn.net/qq_43600467/article/details/112974532