数据库基础Ⅱ
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;