数据库基础Ⅱ

LIKE模糊查询

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

结构:

SELECT * FROM table_name WHERE condition LIKE condition;

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

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

SELECT
  *
FROM
  people
WHERE
  name LIKE '%孙%';

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

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

如:

SELECT
  *
FROM
  timi_adc
WHERE
  hero_name LIKE '_尚香';

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

AND和OR

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

结构如下

SELECT * FROM table_name WHERE conditionA AND/OR condtionB;

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

SELECT
  *
FROM
  timi_adc
WHERE
  win_rate > 0.5
  AND win_rate < 0.51
  OR win_rate < 0.47;

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

SELECT
  *
FROM
  timi_adc
WHERE
  win_rate > 0.5
  OR (
    win_rate < 0.47
    AND win_rate < 0.51
  );

IN/NOT IN

我们使用:

SELECT * FROM table_name WHERE column IN (condtionA,condtionB);

SELECT
  *
FROM
  timi_adc
WHERE
  fever IN ('T0', 'T3');

等价于

SELECT
  *
FROM
  timi_adc
WHERE
  fever = 'T0'
  OR fever = 'T3';

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

SELECT
  *
FROM
  timi_adc
WHERE
  fever NOT IN ('T0');

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

LIKE也可以加上NOT 。

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

我们可以使用

SELECT field_name1,field_name2
FROM table_name
WHERE field_name2 IS NOT NULL/IS NULL;