MySQL:在 SELECT 查询中过滤数据

SELECT … WHERE …

需要有条件的从数据表中查询数据,可以使用 WHERE 关键字来指定查询条件

SELECT select_list  FROM tablename
WHERE
    search_condition;

查询条件:

  • 带 比较运算符 和 逻辑(布尔)运算符 的查询条件

    • AND:记录满足所有查询条件时,才会被查询出来。
    • OR:记录满足任意一个查询条件时,才会被查询出来。
    • XOR:记录满足其中一个条件,且不满足另一个条件时,才会被查询出来
  • BETWEEN AND 关键字的查询条件

  • IS NULL 关键字的查询条件

  • INNOT IN 关键字的查询条件

  • LIKE 关键字的查询条件

当执行带有 WHERE 子句的 SELECT 语句时,MySQL 计算 WHERE 子句在 FROM 子句之后,在 SELECTORDER BY 子句之前

在这里插入图片描述

SELECT … DISTINCT …

在 MySQL 中使用 SELECT 语句执行简单的数据查询时,返回的是所有匹配的记录。如果表中的某些字段没有唯一性约束,那么这些字段就可能存在重复值。为了实现查询不重复的数据,可以使用 DISTINCT 关键字去重

DISTINCT 关键字的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据给用户。

SELECT DISTINCT columnlists
FROM tablename;
  • DISTINCT 关键字只能在 SELECT 语句中使用

  • 在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。

  • 如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重

  • 若字段中包含多个 NULL 值,会将多个 NULL 值视为相同的值,对多个NULL进行去重

当执行带有 DISTINCT 子句的 SELECT 语句时,MySQL会在 FROM, WHERE SELECT 子句之后,ORDER BY 子句之前计算 DISTINCT 子句:

在这里插入图片描述

SELECT … LIMIT …

当数据表中有上万条数据时,一次性查询出表中的全部数据会降低数据返回的速度,同时给数据库服务器造成很大的压力。

这时可以用 LIMIT 关键字来限制查询结果返回的条数:

SELECT select_list FROM table_name 
LIMIT [offset,] row_count;
  • offset 用于指定查询的起始位置,开始位置为0,而不是1
  • row_count 用于指定最大返回行数,若大于查询总行数,则显示所有记录
  • offsetrow_count 均为正整数

![[LIMIT(ROW_COUNT).png]]

不指定初始位置

当仅使用 LIMIT 而不指定 OFFSET 时,查询将从结果集的第一条记录开始返回,直到达到指定的 row_count

SELECT select_name FROM table_name
LIMIT row_count;

#等价于
LIMIT 0, row_count;

这里,LIMIT 0, row_count 中的 0 表示从第一条记录开始,row_count 是想要获取的记录数量。但通常,直接写 LIMIT row_count 就足够了,因为默认就是从第一条记录开始

与 OFFSET 关键字结合

OFFSET 关键字用于指定在开始返回记录之前要跳过的记录数。常用于实现分页功能。

SELECT select_name FROM table_name
LIMIT row_count OFFSET offset_;
  • offset_ 是想要跳过的记录数
  • row_count 是希望从跳过的记录之后获取的记录数。
  • 例如,如果想要获取第11到20条记录(假设每页显示10条),可以设置 OFFSET 10LIMIT 10
与 ORDER BY 结合

按照特定的排序顺序返回指定数量的结果, ORDER BY 子句会根据指定的排序表达式对结果集进行排序,然后 LIMIT 子句会从这个已排序的结果集中选取记录。

SELECT select_name FROM table_name
ORDER BY sort_expr
LIMIT [offset,] row_count;
  • sort_expr 是你想要根据其排序的表达式(可以是列名、列名的函数等)
  • [offset,] row_count 中的 offset 是可选的,用于指定跳过的记录数, row_count是希望获取的记录数。

SELECT … BETWEEN … AND …

IS NULL

IS NULL 关键字,用来判断字段的值是否为空值(NULL)空值不同于 0,也不同于空字符串

如果字段的值是空值,则满足查询条件,该记录将被查询出来。如果字段的值不是空值,则不满足查询条件。

IS [NOT] NULL;

Mysql 并未内置 boolean 型数据,而是使用 TINYINT(1) 的数据来代表布尔型数据:1 代表 true0 代表 false

SELECT 1 IS NULL,         -- 0
       0 IS NULL,         -- 0
       NULL IS NULL;      -- 1

SELECT 1 IS NOT NULL,     -- 1
	   0 IS NOT NULL,     -- 1
	   NULL IS NOT NULL;  -- 0
语句特性

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

处理日期 ‘0000-00-00’

如果一个 DATE 或 DATETIME 型列有 NOT NULL [[非空约束]] ,并且含有类似于 ‘0000-00-00’ 的值,可以使用 IS NULL 语句来获取它们:

SELECT * 
FROM projects
WHERE complete_date IS NULL;

![[QUERY Sample1.png]]

@@sql_auto_is_null 变量

@@sql_auto_is_null 是 MySQL 数据库的系统变量,用于控制插入或更新操作中自增列是否允许为 NULL 值

它的值为 1 表示允许自增列的 NULL 值,值为 0 则表示不允许。默认情况下变量值为0。

@@sql_auto_is_null只读变量,无法直接修改,可以使用 SET 命令对该变量的值进行修改

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值