当前位置:   article > 正文

MySQL必知必会(二)_where or sql 匹配

where or sql 匹配

这里主要继续练习如何使用sql语句

一、过滤数据

这里主要连续如何将数据进行过滤

1.使用where查询

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
WHERE子句在表名(FROM子句)之后给出

SELECT prod_id,prod_price,prod_name FROM products
WHERE prod_price=2.50
  • 1
  • 2

在这里插入图片描述

2.Where的子语句

这里包含了where语句的过滤条件
在这里插入图片描述

2.1匹配相等的

SELECT prod_id,prod_price,prod_name FROM products
WHERE prod_name='fuses'
  • 1
  • 2

在这里插入图片描述

2.2 不匹配检查

例如,列出不是由供应商1003制造的所有产品:

SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE  vend_id<>1003
  • 1
  • 2

在这里插入图片描述

2.3 在某个范围内检查

为了检查某个范围的值,可使用BETWEEN操作符。其语法与其他WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。
例如,BETWEEN操作符可用来检索价格在5美元和10美元之间或日期在指
定的开始日期和结束日期之间的所有产品。

SELECT prod_id,prod_price,prod_name FROM products
WHERE prod_price BETWEEN 5 AND 10
  • 1
  • 2

在这里插入图片描述

2.4 空值检查

在创建表时,表设计人员可以指定其中的列是否可以不包含值。在
一个列不包含值时,称其为包含空值NULL

SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。
这个WHERE子句就是IS NULL子句。其语法如下:

SELECT CUST_ID FROM customers WHERE cust_email IS NULL
  • 1

在这里插入图片描述
这里介绍了,如何去使用where对数据进行过滤,包括说等于某个值(=)、没有某个值(<>)、在某个值之间(Between AND)和某一项为NULL(IS NULL)

二、数据过滤

1.组合WHERE子句

1.1 AND操作符

为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加
条件。

SELECT prod_id,prod_price,prod_name FROM products
WHERE vend_id =1003 AND prod_price<=10
  • 1
  • 2

在这里插入图片描述

1.2 OR操作符

OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。

SELECT prod_name,prod_price,prod_name FROM products
WHERE vend_id =1003 OR vend_id=1003
  • 1
  • 2

在这里插入图片描述

1.3 计算次序

WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂
和高级的过滤。
![在这里插入图片描述]在这里插入图片描述

SELECT prod_name,prod_price FROM products
WHERE vend_id=1002 OR vend_id=1003 and prod_name>=10
  • 1
  • 2

在这里,返回的结果当中有两行价格小于10美元,返回的结果未按照预期的返回

原因如下
SQL在处理OR操作符前,优先处理AND操作符
当SQL看到上述WHERE子句时,它理解为由供应商1003制造的任何
价格为10美元(含)以上的产品或者由供应商1002制造的任何产品

解决上述的问题,通过()来明确地分组相应的操作符
在这里插入图片描述
在WHERE子句中使用圆括号
任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确 地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义。

2 IN操作符

圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN取合法值的由逗号分隔的清
单,全都括在圆括号中。

在这里,选择的值在(1002,1003),并且按照ven_id进行升序排序

SELECT prod_name,prod_price,vend_id FROM products
WHERE vend_id IN(1002,1003)
ORDER BY vend_id
  • 1
  • 2
  • 3

在这里插入图片描述
在这里为IN操作符完成与OR相同的功能

SELECT prod_name,prod_price,vend_id FROM products
WHERE vend_id=1002 OR vend_id=1003
ORDER BY vend_id
  • 1
  • 2
  • 3

但是在这里还是推荐 IN因为以下原因
在IN操作符的语法更清楚且更直观。
 使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
 IN操作符一般比OR操作符执行更快。
 IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建
立WHERE子句。第14章将对此进行详细介绍。

3 NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所
跟的任何条件
NOT WHERE子句中用来否定后跟条件的关键字。

SELECT prod_name,prod_price,vend_id FROM products
WHERE vend_id NOT IN (1002,1003)
ORDER BY vend_id
  • 1
  • 2
  • 3

在这里插入图片描述
这里介绍了如何何用AND和OR操作符组合成WHERE子句,如果需要确定先后顺序使用圆括号,通过IN来限定范围,通过NOT操作符来否定后面跟着的关键词

三、用通配符过滤

LIKE操作符

怎样搜索产品名中包含文本anvil的所有产品?用简单的比较操作符肯定不行,必须使用通配符。利用通配符可创建比较特定数据的搜索模式。在这个例子中,如果你想找出名称包含anvil的所有产品,可构造一个通配符搜索模式,找出产品名中任何位置出现anvil的产品。
通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几
种通配符。
为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示MySQL,
后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较

4.1 百分号(%)通配符

SELECT prod_name,prod_price,vend_id FROM products
WHERE prod_name LIKE 'jet%'
  • 1
  • 2

在这里插入图片描述
此例子使用了搜索模式’jet%'。在执行这条子句时,将检索任
意以jet起头的词。%告诉MySQL接受jet之后的任意字符,不
管它有多少字符
在这里插入图片描述
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。
下面的例子使用两个通配符,它们位于模式的两端:
在这里通过两个通配符,来匹配所选中的东西,只要他们再文中出现就匹配

SELECT prod_name,prod_price,vend_id FROM products
WHERE prod_name LIKE '%anvil%'
  • 1
  • 2

在这里插入图片描述
式’%anvil%'表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符
重要的是要注意到,除了一个或多个字符外,%还能匹配0个字符。%
代表搜索模式中给定位置的0个、1个或多个字符。

4.2 下划线(_)通配符

下划线_与通配符类似,但是它匹配的是单个字符,而不是多个字符

在这里插入图片描述
此WHERE子句中的搜索模式给出了后面跟有文本的两个通配符。结果只显示匹配搜索模式的行:第一行中下划线匹配1,第二行中匹配2。.5 ton anvil产品没有匹配,因为搜索模式要求匹配两个通配符而不是一个。 对照一下,下面的SELECT语句使用%通配符,返回三行产品:
与%能匹配0个字符不一样,_总是匹配一个字符,不能多也不能少。

注意

虽然通配符很有用,但通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,

  1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  2. 除非绝对有必要,否则不要把它们用在搜索模式的开始处把通配符置于搜索模式的开始处,搜索起来是最慢的。
  3. 仔细注意通配符的位置,如果放错了,可能不会返回想要的数

在这里介绍了通配符LIKE,包括%和_两个通配符

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/298815
推荐阅读
相关标签
  

闽ICP备14008679号