数据库基础Ⅱ

2023-02-22 09:54:11 浏览数 (1)

  • , 16 7月 2021
  • 作者 847954981@qq.com
  • 后端学习, 我的编程之路
数据库基础Ⅱ

LIKE模糊查询

之前我们学习的查询语句都是精准查询,我们都用过搜索引擎,在搜索引擎中我们使用更多的是模糊查 询,SQL语句中的LIKE子句可以达到类似的模糊查询的效果。

结构:

代码语言:javascript复制
SELECT * FROM table_name WHERE condition LIKE condition;

SQL LIKE 子句中,我们的使用百分号 %字符来表示任意字符,如果我们没有使用任何的%,那此时 LIKE就相当于 =

比如我们查找名字带孙的人

代码语言:javascript复制
SELECT
  *
FROM
  people
WHERE
  name LIKE '%孙%';

%的位置会决定搜索结果的不同,’%孙%’示这个字符串含孙,’孙%’表示这个字符串以孙开头,’%孙’表 示这个字符串以孙结尾。

除了%的模糊查找,还可以使用 _ 来模糊查找

如:

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  hero_name LIKE '_尚香';

与 % 不同的是 %可以代表多个字,而 _ 只能代表一个字,即 %尚香 可以查找出 公孙尚香,而 _尚香 不能

AND和OR

之前我们写的 WHERE 语句都是只有一个条件的,在实际生活中,我们往往会使用多个条件,这个时 候就需要使用 AND 和 OR 关键词。

结构如下

代码语言:javascript复制
SELECT * FROM table_name WHERE conditionA AND/OR condtionB;

比如我们要查询 timi_adc 表中胜率为百分之 50%-51%或者胜率低于 47%的英雄,那么我们可以这么 写 SQL:

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  win_rate > 0.5
  AND win_rate < 0.51
  OR win_rate < 0.47;

同时我们可以使用 () 来分割逻辑如:

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  win_rate > 0.5
  OR (
    win_rate < 0.47
    AND win_rate < 0.51
  );

IN/NOT IN

我们使用:

代码语言:javascript复制
SELECT * FROM table_name WHERE column IN (condtionA,condtionB);

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  fever IN ('T0', 'T3');

等价于

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  fever = 'T0'
  OR fever = 'T3';

在IN前加上NOT表示非,即除去所选条件如

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  fever NOT IN ('T0');

即查询时除去fever为T0的数据。

LIKE也可以加上NOT 。

代码语言:javascript复制
SELECT
  *
FROM
  timi_adc
WHERE
  hero_name NOT LIKE '%孙%';

效果与NOT IN 类似,不过IN是精确查询,LIKE是模糊查询。

NULL值处理

我们在之前的学习中有涉及到 NULL 值,NULL 对应的是 NOT NULL ,它们是 MySQL 字段的数据类型的 属性,NULL 本身不属于任何数据类型, NULL 值也不等于空值,空值是不占用存储空间的,NULL 占用存储 空间。

MySQL 为处理 NULL 值提供了三种运算符:

1. IS NULL:当列的值是 NULL 时,这个运算符返回 true

2. IS NOT NULL:当列的值不为 NULL,这个运算符返回 true

3. <=>:比较操作符,当比较的两个值都为 NULL 时或者相等时,返回为 true

注意:我们不能使用=NULL 或者!=NULL 来查找 NULL 值 ,NULL = NULL 会返回 NULL

我们可以使用

代码语言:javascript复制
SELECT field_name1,field_name2
FROM table_name
WHERE field_name2 IS NOT NULL/IS NULL;

0 人点赞