MYSQL必知必会(三)过滤数据

MYSQL必知必会(三)过滤数据

  • 过滤数据
    • 使用WHERE字句
    • WHERE字句操作符
      • 检查单个值
      • 不匹配检查
      • 范围值检查
      • 空值检查
  • 数据过滤
    • 组合WHERE字句
      • AND操作符
      • OR操作符
      • 计算次序
      • IN操作符
      • NOT操作符
  • 用通配符进行过滤
    • LIKE操作符
      • 百分号(%)通配符
      • 下划线(_)通配符
    • 使用通配符技巧

过滤数据

使用WHERE字句

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

SELECT prod_name,prod_price
FROM products
where prod_price = 2.5;

ORDER BY和WHERE同时使用时
ORDER BY位于WHERE之后

WHERE字句操作符

MYSQL必知必会(三)过滤数据_第1张图片

检查单个值

SELECT prod_name,prod_price
FROM products
where prod_name = 'fuses';
SELECT prod_name,prod_price
FROM products
where prod_price<10;

不匹配检查

SELECT vend_id,prod_name
FROM products
where vend_id <> 1003;
SELECT vend_id,prod_name
FROM products
where vend_id != '1003';

范围值检查

BETWEEN匹配范围中所有的值,包括指定的开始值和结束值

SELECT prod_name,prod_price
FROM products
where prod_price BETWEEN 5 AND 10;

空值检查

NULL无值(no value),它与字段包含0、空字符串或仅仅包含空格不同

SELECT prod_name
FROM products
where prod_price IS NULL;##返回价格为空的名字

在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行

SELECT cust_id
FROM customers
where cust_email IS NULL;

数据过滤

组合WHERE字句

AND操作符

SELECT prod_id,prod_price,prod_name
FROM products
where vend_id = 1003 AND prod_price <=10;

OR操作符

SELECT prod_price,prod_name
FROM products
where vend_id = 1003 OR vend_id=1002;

计算次序

假如需要列出价格为10美元(含)以上且由1002或1003制造的所有产品

SELECT prod_name,prod_price
FROM products
where vend_id = 1002 OR vend_id=1003 AND prod_price >=10 ;

MYSQL必知必会(三)过滤数据_第2张图片
返回的行中有两行价格小于10美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?
原因在于计算的次序。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符
AND 优先级大于 OR

SELECT prod_name,prod_price
FROM products
where (vend_id = 1002 OR vend_id=1003) AND prod_price >=10 ;

MYSQL必知必会(三)过滤数据_第3张图片
此为我们所想要的
:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符

IN操作符

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

SELECT prod_name,prod_price
FROM products
where vend_id IN (1002,1003)
ORDER BY prod_name;

IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。

IN操作符完成与OR相同的功能

SELECT prod_name,prod_price
FROM products
where vend_id =1002 OR vend_id=1003
ORDER BY prod_name;

IN操作符优点

  1. 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观
  2. 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)
  3. IN操作符一般比OR操作符清单执行更快
  4. N的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句

NOT操作符

功能: 否定它之后所跟的任何条件

SELECT prod_name,prod_price
FROM products
where vend_id NOT IN(1002,1003)
ORDER BY prod_name;

用通配符进行过滤

LIKE操作符

通配符(wildcard):用来匹配值的一部分的特殊字符
搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件
为在搜索子句中使用通配符,必须使用LIKE操作符

百分号(%)通配符

%:表示任何字符出现任意次数

#找出所有以词jet起头的产品
SELECT prod_id,prod_name
FROM products
where prod_name LIKE 'jet%'
SELECT prod_id,prod_name
FROM products
where prod_name LIKE '%anvil%'

注:%可匹配 0,1,多个字符,不能匹配NULL

下划线(_)通配符

:下划线(_)只能匹配一个字符,要注意空格,空格也是字符

SELECT prod_id,prod_name
FROM products
where prod_name LIKE '_ ton anvil'

MYSQL必知必会(三)过滤数据_第4张图片
和%比较

SELECT prod_id,prod_name
FROM products
where prod_name LIKE '% ton anvil'

MYSQL必知必会(三)过滤数据_第5张图片

使用通配符技巧

通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长

技巧:

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

你可能感兴趣的:(MYSQL必知必会(三)过滤数据)