美文网首页
MySQL | 数据查询语言DQL数据过滤语法及实例

MySQL | 数据查询语言DQL数据过滤语法及实例

作者: 82a7fe2508f4 | 来源:发表于2022-04-22 10:07 被阅读0次

数据过滤

是由where子句来实现的.

语法:

select list

from tabs

where search_conditions;

▲ 原理

where 条件

谓词 --> true 表示满足条件 返回数据行

    -->false 表示不满足条件 丢弃数据行

    -->unknown 表示不满足条件 丢弃数据行

where 多个条件

复合谓词: 基本谓词通过逻辑运算符连接起来的式子

逻辑运算符: and or not

复合谓词经过逻辑运算 --> true false unknown

1、基本谓词

比较谓词

比较两个值表达式返回的值的大小关系是否成立.

where ve1 VS ve2

ve1 or ve2: 值表达式(value expression),凡是能返回某个值的式子

# 1 --> 1 常量

# 1 + 2 --> 3 常量表达式

# ecs_goods.market_price --> 每一行返回一个值 列引用

# market_price * 1.2 --> 每一行返回一个计算后的值 计算列

VS: 关系运算符

> < >= <= = !=(or<>)

#比较谓词的否定是通过关系运算符取反来实现的

<= >= < > != =

▲ 数据库查找数据的方式

a.全表扫描

从表中的第一行按照顺序一直查找到最后一行.

b.索引扫描

按照表建立起来的索引查找数据.

#找出市场价格大于1000的商品信息

SELECT goods_id, goods_name, market_price

FROM ecs_goods

WHERE market_price > 1000;

○ 范围谓词

判断值表达式返回的值是否在一个区间范围内.

where ve between ve1 and ve2

where ve not between ve1 and ve2

between ve1 and ve2: 定义一个闭区间范围[ve1,ve2]

# ve >= ve1 and ve <= ve2

#找出市场价格在1400到2400之间的商品信息

SELECT goods_id, goods_name, market_price

FROM ecs_goods

WHERE market_price BETWEEN 1400 AND 2400;

○ 集合成员谓词

判断值表达式返回的值是否是一个指定集合中的一个元素.

where ve in (ve1,ve2,...,ven)

where ve not in (ve1,ve2,...ven)

(ve1,ve2,...,ven): 定义了一个n个元素的集合(元素无序,唯一)

#ve = ve1 or ve = ve2 or ... or ve = ven

#找出市场价格是50,100,150,200的商品信息

SELECT goods_id, goods_name, market_price

FROM ecs_goods

WHERE market_price IN (50,100,150,200);

○ 模式匹配谓词

判断值表达式返回的值是否与一个指定的字符串相匹配

where ve like 'str'

where ve not like 'str'

str: 指定要匹配的字符串

str = 必须匹配的字符 + 可以忽略的字符

普通字符 通配符

#通配符: 具有特殊含义的字符,可以描述或匹配多个字符,in MySQL

% 匹配任意字符串(包含空串) name like '李%'

_(下划线) 匹配任意单个字符 name like '李_' 姓李单名

#找出商品名称包含诺基亚的商品信息

SELECT goods_id, goods_name, market_price

FROM ecs_goods

WHERE goods_name LIKE '%诺基亚%';

#找出商品名称只有4个字符的产品信息

SELECT goods_id, goods_name, market_price

FROM ecs_goods

WHERE goods_name LIKE '____';

○ 空值谓词

判断值表达式返回的值是否是一个空值.

where ve is null

where ve is not null

▲ 空值

表示没有或未知.在数据库中用null表示.

不等同于0

#找出没有设置密码提示问题用户信息

SELECT *

FROM ecs_users

WHERE passwd_question IS NULL;

▲ not关键字

当谓词的条件难以描述时,可以写出其相反的条件,再使用not关键字进行否定.

#找出设置了密码提示问题用户信息

SELECT *

FROM ecs_users

WHERE passwd_question IS NOT NULL;

2、逻辑运算符

● and

逻辑"与", 双目运算符

P1 and P2 --> true

true true

当前仅当所有的谓词返回true时,复合谓词结果才为true.

这意味着所有的条件要同时成立.

#商品类型为9中市场价格大于500的产品信息

SELECT goods_id, goods_name, goods_type, market_price

FROM ecs_goods

WHERE goods_type = 9 AND market_price > 500;

● or

逻辑"或", 双目运算符

P1 or P2 --> true

\true/

只要谓词之一返回true时,复合谓词结果则为true.

这意味着只要多个条件中的某一个成立即可.

#商品类型为9,或者市场价格大于500的产品信息

SELECT goods_id, goods_name, goods_type, market_price

FROM ecs_goods

WHERE goods_type = 9 OR market_price > 500;

● not

逻辑"非", 单目运算符

not P

true --> false

false --> true

unknown --> unknown

#市场价格不大于500的商品信息

SELECT goods_id, goods_name, goods_type, market_price

FROM ecs_goods

WHERE NOT market_price > 500;

● 混合运算

#运算符优先级:

() > not > and > or

not P1 or P2 and P3

s1. not P1 --> r1

s2. P2 and P3 --> r2

s3. r1 or r2 --> r

(not P1 or P2) and P3

s1. not P1 --> r1

s2. r1 or P2 --> r2

s3. r2 and P3 --> r

3、运算规则

▲ unknown的由来

where ve1 VS ve2

ve1 or ve2 返回的值为null,则比较谓词的结果为unknown

#找出没有设置密码提示问题用户信息

SELECT *

FROM ecs_users

WHERE passwd_question = NULL; # error, use is null

▲ 真值表

true --> T

false --> F

unknown --> U

相关文章

网友评论

      本文标题:MySQL | 数据查询语言DQL数据过滤语法及实例

      本文链接:https://www.haomeiwen.com/subject/szdiertx.html