zoukankan      html  css  js  c++  java
  • MySQL基础之过滤数据

    使用WHERE子句

    通常会根据操作或报告的需要提取表中的数据的子集。只检索所需数据需要指定的搜索条件, 搜索条件也称为过滤条件

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

    MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_price=2.50;
    +---------------+------------+
    | prod_name     | prod_price |
    +---------------+------------+
    | Carrots       |       2.50 |
    | TNT (1 stick) |       2.50 |
    +---------------+------------+
    2 rows in set (0.002 sec)
    
    MariaDB [crashcourse]> 

    这个例子采用了简单的相等测试: 它检查一个列是否具有指定的值, 据此进行过滤。

    WHERE子句的位置

    在同时使用ORDER BY和WHERE子句时, 应该让ORDER BY位于WHERE之后, 否则将会产生错误。

    WHERE子句操作符

    MySQL支持表中所有条件的操作符

    操作符 说明
    = 不等于
    <> 不等于
    != 不等于
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    BETWEEN 在指定的两个值之间

    检查单个值

    测试相等的例子

    MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_name='fuses';
    +-----------+------------+
    | prod_name | prod_price |
    +-----------+------------+
    | Fuses     |       3.42 |
    +-----------+------------+
    1 row in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    MySQL不区分大小写, 所以fuses与Fuses相匹配

    测试小于的例子

    MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
    +---------------+------------+
    | prod_name     | prod_price |
    +---------------+------------+
    | .5 ton anvil  |       5.99 |
    | 1 ton anvil   |       9.99 |
    | Carrots       |       2.50 |
    | Fuses         |       3.42 |
    | Oil can       |       8.99 |
    | Sling         |       4.49 |
    | TNT (1 stick) |       2.50 |
    +---------------+------------+
    7 rows in set (0.002 sec)
    
    MariaDB [crashcourse]> 

    不匹配检索

    MariaDB [crashcourse]> SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
    +---------+--------------+
    | vend_id | prod_name    |
    +---------+--------------+
    |    1001 | .5 ton anvil |
    |    1001 | 1 ton anvil  |
    |    1001 | 2 ton anvil  |
    |    1002 | Fuses        |
    |    1005 | JetPack 1000 |
    |    1005 | JetPack 2000 |
    |    1002 | Oil can      |
    +---------+--------------+
    7 rows in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    何时使用引号

    单引号用来限定字符串。如果将值与串类型的列进行比较则需要使用单引号, 用来与数值列进行比较的值不用引号

    范围值检查

    为了检查某个范围的值, 可使用BETWEEN操作符。BETWEEN需要两个值, 即范围的开始值和结束值。

    MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
    +----------------+------------+
    | prod_name      | prod_price |
    +----------------+------------+
    | .5 ton anvil   |       5.99 |
    | 1 ton anvil    |       9.99 |
    | Bird seed      |      10.00 |
    | Oil can        |       8.99 |
    | TNT (5 sticks) |      10.00 |
    +----------------+------------+
    5 rows in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    在使用BETWEEN时, 必须指定两个值-所需范围的低端值和高端值。这两个值必须用AND关键字分割。BETWEEN匹配范围中的所有值, 包括指定的开始值和结束值

    空值检查

    在一个列不包含值时, 称其为包含空值NULL

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

    SELECT语句中有一个特殊的WHERE子句, 可用来检查具有NULL的值, 这个WHERE子句就是IS NULL子句。

    MariaDB [crashcourse]> SELECT cust_id FROM customers WHERE cust_email IS NULL;
    +---------+
    | cust_id |
    +---------+
    |   10002 |
    |   10005 |
    +---------+
    2 rows in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    这条语句返回没有邮箱(空cust_email字段, 不是邮箱为0)的所有顾客id。

    NULL与不匹配

    在通过过滤选择出不具有特定值的行时, 可能希望返回具有NULL的值的行, 但是不行, 因为未知具有特殊的含义, 数据库不知道它们是否匹配, 所以在匹配过滤或不匹配过滤时不返回它们。

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

  • 相关阅读:
    java 下载图片并传输(java自带 BASE64工具进行图片和字符串转换)
    MySQL的日期格式
    eclipse下查看maven下载的源码中文乱码问题
    Linux----部署
    python----logging
    python----pymysql
    vmware15 激活秘钥
    vmware15 激活秘钥
    Ubuntu18.04安装
    msyql45讲 20--幻读是什么,幻读有什么问题?
  • 原文地址:https://www.cnblogs.com/featherwit/p/13368305.html
Copyright © 2011-2022 走看看