MySQL必知必会-6过滤数据

2017/03/18 12:36
阅读数 5
使用where子句来指定搜索条件,搜索条件也称为过滤条件。
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. prod_price = 2.5;
WHERE子句的位置,在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后。

WHERE子句的操作符

= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. prod_name = 'fuses';
单引号用来限定字符串,如果将值与串类型进行比较,则需要限定引号,用来与数值列进行比较的值不用引号。
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. prod_price < 10;
为了检查某个范围的值,可使用BETWEEN操作符,所需低端值和高端值,包括指定的开始值和结束值,必须用AND关键字。
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. prod_price BETWEEN 5
  8. AND 10;
检索价格在5和10之间的所有产品

空值检查

一个列不包含值,称为包含空值NULL。
NULL无值,它与字段包含0,空字符串或仅仅包含空格不同
检查空值使用WHERE子句IS NULL子句
   
   
  1. SELECT
  2. prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_price IS NULL;
OR
   
   
  1. SELECT
  2. cust_id
  3. FROM
  4. customers
  5. WHERE
  6. cust_email IS NULL;

数据库在匹配过滤特定的值,如果该匹配的列包含NULL值,该行将不被匹配,如果希望返回NULL值的行还需在加上IS NULL这个条件。
   
   
  1. SELECT
  2. *
  3. FROM
  4. customers
  5. WHERE
  6. cust_email LIKE '%@%' //模糊搜索cust_email带有@值的行
  7. OR cust_email IS NULL //如果没有该句,cust_email为NULL的行将不会返回
  8. ;

组合WHERE子句,MySQL允许给出多个WHERE子句,这些子句可以两种方式使用:AND和OR
   
   
  1. SELECT
  2. prod_id,
  3. prod_price,
  4. prod_name
  5. FROM
  6. products
  7. WHERE
  8. vend_id = 1003
  9. AND prod_price <= 10;
检索供应商1003并且价格小于等于10的所有产品的名称和价格

AND指示满足所给出的所有条件。
OR指示满足给出至少一个条件(任何一个条件)。

   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. vend_id = 1002
  8. OR vend_id = 1003;
检索供应商1002或供应商1003的所有产品的名称和价格。

允许AND和OR操作符结合进行复杂和高级过滤,但是必须记住一个重要的事情,AND的优先级比OR高,如果同时出现AND和OR,会优先处理AND的条件,所以为了避免混淆,建议使用()来确保匹配顺序。
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. vend_id = 1002
  8. OR vend_id = 1003
  9. AND prod_price >= 10;
由于AND的优先级大于OR,所以检索为
供应商1003的产品,价格大于或等于10的 产品名和产品价格
或者
供应商1002的所有产品的产品名和产品价格

   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. (vend_id = 1002 OR vend_id = 1003)
  8. AND prod_price >= 10
供应商1002或者供应商1003,价格大于等于10的产品的 产品名和产品价格

IN操作符

WEERE子句的另外一种用法,IN操作用来指定条件范围,范围中的每个条件都可以进行匹配,合法值由逗号分隔开来。
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. vend_id IN (1002, 1003)
  8. ORDER BY
  9. prod_name;
IN操作符功能与OR相当
IN操作符一般比OR操作符执行的更快,并且IN的最大优点是可以包含其他SELECT 语句,使得能够更动态建立WHERE子句。

NOT操作符

WHERE子句中的NOT操作符就是否定它之后所跟的任何条件。
   
   
  1. SELECT
  2. prod_name,
  3. prod_price
  4. FROM
  5. products
  6. WHERE
  7. vend_id NOT IN (1002, 1003)
  8. ORDER BY
  9. prod_name;
匹配供应商1002和1003之外的产品名和产品价格。

MySQL仅 支持使用 NOT对IN,BETWEEN和EXISTS子句取反
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部