WMI中的SQL,WQL简明教程系列2:运算符

mitchellchu:wmi wql教程  系列1中我们已经介绍了的查询语言WQL中的关键字,相信在看完关键字之后,对于WQL的语句肯定不会那么陌生了,然而,有了关键字,自然还是不够的,至少在使用WHEE子句的时候,我们需要用到一些条件不是,而这些条件自然而然的就需要使用到本文说到的东西——运算符。虽然可以看作是SQL的一个子集,但是关键字会有些不同(前面已经有说过),运算符也会有些诧异。那么让我们看看在WQL中有哪些运算符。

  既然是SQL的一个自己,可以预见的是WQL中的运算符和SQL中的运算符应该差别也不是很大,在前面将关键字的时候,我们给出的WQL语句中就有部分运算符在使用了,而在关键字列表中,我们也给出了部分的。先给个例子:

SELECT * FROM Win32_NetworkAdapterConfiguration
WHERE IPEnabled=TRUE

  在上面例子中我们在WHERE子句中就使用了=运算符,TRUE运算符。进入主题,WQL的基本运算符有以下这些:

WQL运算符 WQL运算符描述 使用类型
= 等于 string, numeric, reference, datetime
< 小于 string, numeric, datetime
> 大于 string, numeric, datetime
<= 小于或等于 string, numeric, datetime
>= 大于或等于 string, numeric, datetime
!= 或者 <> 不等于 string, numeric, reference, datetime

基本运算符,这类运算符和SQL中的运算符一样,为二元比较运算符,但只是SQL中的一个子集,因为没有!<, !>这些。除了这些基本的运算符之外,WQL还支持下面这些特殊点的运算符

WQL运算符 WQL运算符描述 适用类型
IS 后面仅能跟NULL string, numeric, reference, datetime, object
IS NOT 后面仅能跟NULL string, numeric, reference, datetime, object
ISA is a关系,具体可以参见关键字中的ISA说明 UNKOWN
LIKE 类似于 string

 

/*正确的WQL IS NULL和IS NOT NULL的用法*/
SELECT * FROM Win32_LogicalDisk
WHERE FileSystem IS NULL

SELECT * FROM Win32_LogicalDisk
WHERE FileSystem IS NOT NULL

/*WQL中IS 和 IS NOT的错误用法*/
SELECT * FROM Win32_LogicalDisk
WHERE DriveType IS 5

SELECT * FROM Win32_LogicalDisk
WHERE FileSystem IS NOT "NTFS"

在SQL中,IS [NOT] NULL被作为谓词单独列出讨论,而在WQL中,IS [NOT] NULL被当作运算符来讨论,这点MitchellChu不太能够理解其中奥秘,只能按照官方说法,将其归类为运算符一类,可能是WQL确实比较简单,无需进行复杂分类吧。而上面表中的LIKE运算符比较特殊,因为在LIKE中,我们会使用通配符,因此LIKE对通配符也有一个对照表:

Character 描述
[ ] 任何一个在指定范围内([a=f]) 或者集合([abcdef])的字符
^ 任何一个不在指定范围内 ([^a=f]) 或集合内([^abcdef])的字符
% 任何0(zero)个或多个字符的字符串 。
_ (underscore) 任何一个字符。任何在查询字符串中的下划线必须放到[](Asquare brackets)内进行转义。

LIKE示例:

/*在class名称中包含Win的所有实例*/
SELECT * FROM meta_class
WHERE __Class LIKE "%Win%"

/*转义_下划线*/
SELECT * FROM meta_class
WHERE __CLASS LIKE "%[_][_]%"

 此外,为了在WHERE子句能够进行多个条件表达式存在,WQL支持使用简单的AND和OR运算符来连接上面运算符的结果。在SQL中,这类运算符称作为:逻辑运算符。WQL中同样没有明确归类。

WQL运算符 WQL运算符描述
AND 连接两个布尔表达式,仅都为TRUE是返回TRUE
OR 连接两个布尔表达式,单有一个为TRUE是返回TRUE,当OR和AND同时存在,AND优先级高于OR
NOT 布尔表达式取反,TRUE时返回FALSE

 示例:

/*
派生于的类名需要是Win32开头的,并且不是Win32_Account或其子类
*/
SELECT * FROM meta_class
WHERE NOT __class < "Win32" AND NOT __this ISA "Win32_Account"

   至此,WQL的运算符涵盖的比较全面了,前面关键字和本文的运算符,再配合SQL中的基本语法,你应该可以初步的写些WQL语句了。

 

附注:

本文内容来源于微软MSDN:WQL OperatorsLIKE Operator

Saturday, June 15, 2013 | .NET技术 其他技术 编程语言

文章评论

No comments posted yet.

发表评论

Please add 5 and 8 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。