高级数据过滤

1.组合WHERE子句

为了进行更强的过滤控制,SQL允许给出多个WHERE子句。

这些子句有两种使用方式,即以AND子句或OR子句的方式使用。

PowerShell
操作符(operator)
用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)
1.1 AND操作符

要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件。

SQL
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
"SELECT    ID,`主流派`,
`年份`FROM blockbusters WHERE ID != 2  AND `年份` != 2018;"
1.2 OR操作符

OR操作符与AND操作符正好相反,它指示DBMS检索匹配任一条件的行。

事实上,许多DBMS在OR WHERE子句的第一个条件得到满足的情况下,就不再计算第二个条件了

SQL
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
"SELECT    ID,`主流派`,
`年份`FROM blockbusters WHERE ID != 2  OR `年份` != 2018;"
1.3求值顺序

WHERE子句可以包含任意数目的AND和OR操作符

允许两者结合以进行复杂、高级的过滤。

SQL
SELECT prod_name,prod_price
FROM products
WHERE(vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;
"SELECT
 ID,
`票房`,
`年份`
FROM blockbusters
 WHERE (`年份` = 2017 OR `年份` = 2018)
 AND ID >= 10"
PowerShell
提示:在WHERE子句中使用圆括号
任何时候使用具有AND和OR操作符和WHERE子句,都应该使用圆括号明确地分组操作符。
不要过分依赖默认求值顺序,即使它确实如你希望的那样。
使用圆括号没有什么坏处,它能消除歧义。
2. IN操作符

IN操作符 用来指定条件范围,范围中的每个条件都可以进行匹配。

IN取一组由逗号分隔、括在圆括号中的合法值。

SQL
SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01')
ORDER BY prod_name;
"SELECT
 ID,
`票房`,
`年份`
 FROM blockbusters
 WHERE `年份` IN (2019,2018)
 AND ID >= 10"

IN操作符完成了与OR相同的功能 为什么要使用IN操作符呢? 其优点如下:

  • 在有很多合法选项时,IN操作符的语法更清楚,更直观。
  • 在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。
  • IN操作符一般比一组OR操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。
  • IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。
3.NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件。

因为NOT从不单独使用(它总是与其他操作符一起使用),所以它的语法与其他操作符有所不同。

NOT关键字可以用在要过滤的列前,而不仅是在其后。

PowerShell
NOT
WHERE子句中用来否定其后条件的关键字。
SQL
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;
"SELECT ID,`票房`,`年份` FROM blockbusters WHERE NOT `年份` = 2018 ORDER BY `年份`"

NOT否定跟着其后的条件,也可以使用<>操作符来完成。

为什么使用NOT?

对于这里的这种简单的WHERE子句,使用NOT确实没什么优势。

但在更复杂的子句中,NOT是非常有用的。

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部