MySQL- 5 过滤数据

练习参考网址:http://www.manongjc.com/mysql_basic/mysql-where-basic.html

WHERE 子句允许您基于特定的表达式或条件指定要查询的精确行。

您还将学习如何使用LIMIT子句来约束SELECT语句返回的行数。

筛选栏位部分数据

SELECT 
    * 
FROM
    employees
WHERE
    jobtitle = "Sales Rep" and officeCode = 4

where 还有其他筛选条件的话,可使用 and / or运算符

常用运算符:=, !=, <> ,<, > , >= ,<=

还有一些有用的运算符,您可以在WHERE子句中使用它们以形成更复杂的条件查询,例如:

  • BETWEEN 选择指定范围内的值。
  • LIKE 基于模式匹配匹配值。
  • IN 指定值是否与列表中的任何值匹配。
  • IS NULL检查值是否为NULL。

AND

以下是and运算符的运算结果

  TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL

注意在MySQL中,0被认为是NULL,而非零是真的。

上面SQL语句中,MySQL只是计算1 = 0这一部分:,因为这个表达式返回false,所以MySQL认为整个表达式的结果是false。MySQL不会去判断表达式的剩余部分,即1/0; 如果判断1/0的话,它会发出一个错误消息,因为除数为零。

OR

  TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL

 

执行顺序如下:(改变顺序请使用())

  1. 首先,MySQL计算AND运算符,这是,false AND false返回false。
  2. 第二,MySQL计算OR运算符,这是,true OR false返回true。
SELECT customername,country
FROM customers
WHERE 
country = "USA"
 OR Country = 'france'

输出为:(mysql中对英文的大小写不敏感,对字符的引用可以单引号' 也可以用双引号" )

 多个条件查询

SELECT customername,country,creditlimit
FROM customers
WHERE 
(country = 'USA' OR Country = 'france')
 AND creditlimit >= 100000

IN 

IN运算符允许你确定一个指定字段的值是否在给定列表或子查询中。下面是IN 运算符的语法:

SELECT 
    column1,column2,...
FROM
    table_name
WHERE 
 (expr|column_1) IN ('value1','value2',...);

 

与or 的输出结果一致,比 or的语法要简短。

带有子查询的mysql in(子查询:一个表达式中可以调用另一个函数表达式)

 因为where 不能与合计字符一起使用,当我们group 一类时,会使用到having 函数。

查询订单额大于60000的数据,

SELECT 
    orderNumber, sum(quantityOrdered * priceEach)
FROM
    orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000;

查询到order number后,再从主表中查询相关信息

SELECT 
    orderNumber, customerNumber, status, shippedDate
FROM
    orders
WHERE
    orderNumber IN (10165,10287,10310);

between

between and常用于判断某个字符是否在给定的范围内,我们经常在SELECT,INSERT,UPDATE和DELETE语句的WHERE子句中使用BETWEEN运算符。

expr [NOT] BETWEEN begin_expr AND end_expr;

expr 与begin_expr  end_expr必须具有相同的数据类型,为闭区间(也可使用<>来指定区间)。若表达式为null, 则between运算符返回null值。

如需在products 中查询价格在90-100的产品。

SELECT * FROM
    products
WHERE
    buyPrice BETWEEN 90 AND 100

like & escape

MySQL提供了两个通配符与LIKE操作符一起使用:百分比 %和下划线_

  • percent(%)通配符允许您匹配任何零个或多个字符的字符串。
  • 下划线(_)通配符允许您匹配任何单个字符。

查询员工表单中以a开头的相关信息:

SELECT 
    employeeNumber, lastName, firstName
FROM
    employees
WHERE
    firstName LIKE 'a%'

查询员工表单中以on结尾的相关的信息:

SELECT 
    employeeNumber, lastName, firstName
FROM
    employees
WHERE
    lastName LIKE '%on'

如需查找员工信息的名字含on的相关信息:

SELECT 
    employeeNumber, lastName, firstName
FROM
    employees
WHERE
    lastname LIKE '%on%'

“_” 下划线则表示只占一个字符:

SELECT 
    employeeNumber, lastName, firstName
FROM
    employees
WHERE
    firstname LIKE 'T_M'

若需查询不以B开头的员工,则用not like来查询:(like中字母不分大小写)

SELECT 
    employeeNumber, lastName, firstName
FROM
    employees
WHERE
    lastName NOT LIKE 'B%';

通配符:\

SELECT 
    productCode, productName
FROM
    products
WHERE
    productCode LIKE '%\_20%';

limit & is null

limit用于约束查询结果中的行数,一个或两个参数都必须为零或者正整数。

SELECT 
    column1,column2,...
FROM
    table
LIMIT offset , count;

语法解释如下:

  • offset指定第一行要返回的偏移量。第一行的偏移量(offset)为 0,而不是1;(首个位置)
  • count指定要返回最大的行数;(往后行数)
  • MySQL LIMITå­å¥ç®ä»

limit N;单个参数时为显示前N行资料

limit 常与order by一起使用,执行顺序为先使用order by 再使用limit

查询信用额度最高的5位:(DESC降序排列,ASC升序排列)

SELECT
 customernumber,
 customername,
 creditlimit
FROM
 customers
ORDER BY
 creditlimit DESC
LIMIT 5;

使用limit获取第N个最大值

1.首先需对数值进行降序排序

2.使用limit的两个参数获取第N 个最大值

如需获取价格第二高的产品信息

SELECT
 productName,
 buyprice
FROM
 products
ORDER BY
 buyprice DESC
LIMIT 1, 1;

判断数值是否为NULL:value is null,非空值为 is not null

查询选取没有销售代表的客户:

SELECT 
    customerName, 
    country, 
    salesrepemployeenumber
FROM
    customers
WHERE
    salesrepemployeenumber IS NULL
ORDER BY customerName; 

is null 的特殊功能

为了与ODBC程序兼容,MySQL支持IS NULL操作符的一些特殊功能。

date 或 datetime类型的字串具有not null约束且含特殊日期如0000-00-00(一般为excel产生,一般可将0000-00-00替换为null),也可使用is null查询这些行

发布了19 篇原创文章 · 获赞 1 · 访问量 2187

猜你喜欢

转载自blog.csdn.net/wella_liu/article/details/88758436
今日推荐