欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > MYSQL教程 > 高级过滤数据

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:502

高级过滤数据

发布时间:2021-05-04  

-- 高级数据过滤 关键词WHERE子句 | NOT 和IN 操作符

-- 组合WHERE子句 (给出多个WHERE子句。有两种使用方式:以AND子句或OR子句的方式使用)

-- AND操作符(相当于给WHERE子句添加了附加条件)
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <=4;

高级过滤数据

-- 因为只有一个AND子句,最多有两个过滤条件,可以增加多个过滤条件,每个条件间都要使用AND关键字

-- OR操作符(检索匹配任一条件的行,在DBMS中,在第一个条件满足时,不管第二个条件是否满足,相应的行都被检索出来)
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';

高级过滤数据

-- 求值顺序(AND和OR两者结合可以进行复杂高级的过滤)(WHERE子句中可以包含任意数目的AND和OR操作符)
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
AND prod_price >= 10;

高级过滤数据

我们会发现输出的结果并非达到我们的预期,原因就是SQL在处理OR操作符的时候,优先处理AND操作符,导致操作符被错误的组合成价格在10美元以上的BRS01以及任意价格的DLL01,导致输出错误的结果。

解决方法是使用圆括号对操作符进行明确分组。

SELECT prod_name,prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;

-- IN操作符(用来指定条件范围,范围中的每个条件都可以进行匹配)(由一组逗号分隔、括在圆括号中的合法值)
SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRES01')
ORDER BY prod_name;

高级过滤数据

-----------------------
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
ORDER BY prod_name;

高级过滤数据

在这里发现使用IN操作符和OR操作符输出的结果大致相当(书中两个表结果完全相同,可能是DBMS的不同导致的差异,也可能是表的外部连接的影响)。但是可以发现IN操作符的优点大概如下:

1.IN操作符的语法更清楚,更直观。

2.IN在与(AND/OR)操作符混合使用的时候,求值顺序更容易管理。

3.IN操作符一般比一组OR操作符执行得更快。

4.IN操作符最大的优点是可以包含其他SELECT语句,能够更动态地简历WHERE字句。

-- NOT操作符(特点:从不单独使用;用在过滤的条件前后都可以)(功能:WHERE子句中用来否定其后条件的关键字)
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

高级过滤数据

等同于

SELECT prod_name
FROM Products
WHERE vend_id <> 'DLL01'
ORDER BY prod_name;

高级过滤数据

在简单的WHERE子句中NOT优势并不明显,但是在更加复杂的子句中,NOT非常有用。比如和IN操作符联合使用,可以非常简单地找出与条件列表不匹配的行。