第六章 - 数据过滤(where的用法)
- 基本用法
- where的条件限制符
- 等于号`=`
- 不等号`!=` 或者`<>`
- 小于`<`
- 大于`>`
- 小于等于`<=`
- 大于等于`>=`
- between 的用法
- 空值和非空值
- 组合条件 and
- 组合条件 or
- and 和 or 的计算次序
- in 和 not in
基本用法
- 在查询语句中,可以根据需要使用where语句来对指定搜索条件进行过滤,得到需要的数据,where语句在from语句之后使用。
# 查询售价大于600000的数据
select
SalePrice
from
test.houseprices
where
SalePrice > 600000
where的条件限制符
等于号=
- 只查询
displayName
字段内等于'Michael Carter'
的数据
select
displayName,
weight,
nflId
from
nfl.players
where
# 此处'Michael Carter'可以使用单引号' 或者双引号 " ,表示(str)字符串格式
displayName = 'Michael Carter'
不等号!=
或者<>
- 查询性别不为’male‘的数据
select
*
from
test.titanic
where
# 或者 sex <> 'male' 表示的意义是一样的
sex != 'male'
小于<
- 查询年龄小于10岁的数据,比10小的数,不包含10
select
*
from
test.titanic
where
age < 10
大于>
- 查询年龄大于 岁的数据
select
*
from
test.titanic
where
age > 60
小于等于<=
- 查询小于等于6岁的用户数据,不大于6的数,包含6.
select
*
from
test.titanic
where
age <= 6
大于等于>=
- 查询小于等于60岁的用户数据,不小于60的数,包含60.
select
*
from
test.titanic
where
age >= 60
between 的用法
- 查询年龄在50到54岁之间的数据,between是包含50和54这两个值的。
select
*
from
test.titanic
where
age between 50 and 54
空值和非空值
- 一般数据库内空值的数据都用null来填充(也有用’-999‘),当用null来填充空值的时候,就可以直接使用此语句来筛选。(用其他数据值填充的可以直接用等于
=
和不等于!=
来筛选)
完整数据带有null。
- 筛选age为null的数据
select
*
from
test.test001
where
age is null
- 筛选age不是null 的数据
select
*
from
test.test001
where
age is not null
组合条件 and
- 进行多条件筛选时,可以使用and给where语句添加多个条件。
- and表示筛选条件要同时满足,也就是“和”的意思。
- 下面例子表示,查询同时满足 sex = male 和 age > 60 条件的数据。
select
`name`,
`sex`,
`age`,
`fare`
from
test.titanic
where
sex = 'male' and age > 60
组合条件 or
- 进行多条件筛选时,也可以使用 or 给 where 语句添加多个条件
- or 表示满足其中一个即可,也就是“或”的意思。
- 下面例子和上面用同样的数据,只是把条件and变为or,数据量明显要多很多,因为只要满足sex=male或者age>60其中一个条件就可以,条件限制更宽松一些
select
`name`,
`sex`,
`age`,
`fare`
from
test.titanic
where
sex = 'male' or age > 60
and 和 or 的计算次序
- 下面例子可以看到,我们想要的结果是要满足age=40或者age=60这两个条件,且满足fare>50,需要fare都大于50。但是输出结果后面的四行数据age=40都是fare是小于50的,和想要的结果不一样。
- 这是因为,and在计算次序中的优先级高于or,系统会先计算and然后再计算or。
select
`name`,
`sex`,
`age`,
`fare`
from
test.titanic
where
age = 40 or age = 60 and fare > 50
- 解决这种问题的方法:用括号来明确分组相应的操作符,因为括号的计算优先级要高于and和or
- 具体如下,执行时会优先计算括号内的条件,然后再计算括号外的条件
select
`name`,
`sex`,
`age`,
`fare`
from
test.titanic
where
(age = 40 or age = 60) and fare > 50
in 和 not in
- in用来指定条件范围,范围中的每个条件都可以进行匹配
- in的取值全部都再括号中,由逗号分隔,当取值为字符时,需要用引号(单/双引号 都可以)来表示字符,例如
('Jack','小明')
- in与or条件的功能是相同的,用的代码更少且执行速度更快。
select
`name`,
`sex`,
`age`,
`fare`
from
test.titanic
where
# 表示 满足 age=50 或者 age=55,
age in (50,55)
- not in 表示否定后面的条件,如上面例子把in 改为not in 就表示所有age不是50或者55的数据。
select
`name`,
`sex`,
`age`,
`fare`
from
test.titanic
where
age not in (50,55)