WHERE 절(WMI)
WHERE 절을 사용하여 데이터, 이벤트 또는 스키마 쿼리의 범위를 좁힐 수 있습니다. 자세한 내용은 WQL 사용하여쿼리를 참조하세요. WHERE 절은 속성 또는 키워드, 연산자 및 상수로 구성됩니다. 모든 WHERE 절은 WMI(Windows Management Instrumentation) WQL(쿼리 언어)에 포함된 미리 정의된 연산자 중 하나를 지정해야 합니다. 다음 양식 중 하나를 사용하여 SELECT 문에 WHERE 절을 추가할 수 있습니다.
SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property
여기서 *는 쿼리된 항목이고, 클래스는 쿼리할 클래스이고 상수, 연산자 및 속성은 사용할 상수, 연산자 및 속성 또는 키워드입니다. SELECT 문에 대한 자세한 내용은 데이터 쿼리 SELECT 문, 이벤트 쿼리 SELECT 문 또는 스키마 쿼리 대한 SELECT 문참조하세요.
상수의 값은 속성에 올바른 형식이어야 합니다. 또한 연산자는 유효한 WQL 연산자 목록 중 하나여야. WHERE 절에서 연산자의 양쪽에 속성 이름 또는 상수가 나타나야 합니다.
WHERE 절에서 "NTFS"와 같은 문자열 리터럴을 사용할 수 있습니다. 문자열에 다음 특수 문자를 포함하려면 먼저 문자 앞에 백슬래시(\)를 추가하여 문자를 이스케이프해야 합니다.
- backslash (\\)
- 큰따옴표(\")
- 작은따옴표(\')
임의 산술 식을 사용할 수 없습니다. 예를 들어 다음 쿼리는 NTFS 드라이브를 나타내는 Win32_LogicalDisk 클래스의 인스턴스만 반환합니다.
SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"
속성 이름은 연산자의 양쪽에 표시할 수 없습니다. 다음 쿼리는 잘못된 쿼리의 예입니다.
SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2)
OR (Partitions = SectorsPerTrack / 7)
WHERE 절에서 클래스 설명자를 사용하는 대부분의 경우 WMI는 쿼리에 잘못된 플래그를 지정하고 오류를 반환합니다. 그러나 WMI에서 형식의 속성에는 점(.) 연산자를 사용합니다. 예를 들어 Prop이 MyClass의 유효한 속성이고 개체 형식인 경우 다음 쿼리가 유효합니다.
SELECT * FROM MyClass WHERE Prop.embedprop = 5
비교 테스트는 항상 대/소문자를 구분하지 않습니다. 즉, 다음 세 문은 모두 TRUE 평가됩니다.
SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"
부울 데이터 형식을 포함하는 쿼리를 생성할 수 있지만 유효한 부울 피연산자 형식은 =, != 및 <> 형식뿐입니다. TRUE 값은 숫자 1과 동일하고 FALSE 값은 숫자 0과 같습니다. 다음 예제는 부울 값을 TRUE 또는 FALSE 값과 비교하는 쿼리입니다.
SELECT * FROM MyClass WHERE BoolProp = 1
SELECT * FROM MyClass WHERE BoolProp = TRUE
SELECT * FROM MyClass WHERE BoolProp <> FALSE
SELECT * FROM MyClass WHERE BoolProp = 0
SELECT * FROM MyClass WHERE BoolProp = FALSE
SELECT * FROM MyClass WHERE BoolProp != 1
SELECT * FROM MyClass WHERE BoolProp != FALSE
SELECT * FROM MyClass WHERE BoolProp <> FALSE
다음 예제는 잘못된 피연산자를 사용하려고 시도하는 잘못된 쿼리입니다.
SELECT * FROM MyClass WHERE BoolProp <= TRUE
SELECT * FROM MyClass WHERE BoolProp >= 0
SELECT * FROM MyClass WHERE BoolProp > FALSE
SELECT * FROM win32_computersystem WHERE infraredsupported >= null
논리 연산자와 괄호 하위 식을 사용하여 WHERE 절에서 여러 속성, 연산자 및 상수 그룹을 결합할 수 있습니다. 각 그룹은 다음 쿼리와 같이 AND 또는 OR 또는 NOT 연산자와 조인되어야 합니다. 첫 번째 쿼리는 Name 속성이 C 또는 D로 설정된 Win32_LogicalDisk 클래스의 모든 인스턴스를 검색합니다.
SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"
두 번째 쿼리는 여유 공간이 일정하고 NTFS 파일 시스템이 있는 경우에만 "C:" 또는 "D:"라는 디스크를 검색합니다.
SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:")
AND FreeSpace > 2000000 AND FileSystem = "NTFS"
이 예제에서는 WHERE 절을 사용하는 스키마 쿼리를 보여줍니다.
SELECT * FROM meta_class WHERE __this ISA "myClassName"
클래스 meta_class 이를 스키마 쿼리로 식별하며, __this 호출된 속성은 쿼리의 대상 클래스를 식별하고 ISA 연산자는 대상 클래스의 서브클래스에 대한 정의를 요청. 따라서 앞의 쿼리는 myClassName 클래스에 대한 정의와 모든 하위 클래스에 대한 정의를 반환합니다.
다음 예제는 WHERE와 ASSOCIATORS OF 문을 사용하는 데이터 쿼리입니다.
ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly
다음 예제에서는 ASSOCIATORS OF 및 WHERE를 사용하는 스키마 쿼리를 보여줍니다.
ASSOCIATORS OF {myClass} WHERE SchemaOnly
다음 예제는 REFERENCES OF 문 및 WHERE를 사용하는 데이터 쿼리입니다.
REFERENCES OF {myClass.keyVal="Value1"}
WHERE RequiredQualifier = myQual
이 마지막 예제는 REFERENCES OF 및 WHERE를 사용하는 스키마 쿼리입니다.
REFERENCES OF {myClass} WHERE SchemaOnly
WMI DATETIME 형식 외에도 WQL WHERE 절은 다른 여러 날짜 및 시간 형식을 지원합니다.