SQL에서 테이블을 생성하고 테이블간의 관계도 맺고, 데이터도 입력을 했으면 그 이후에 할 일은 데이터를 조회하는 것이 필요하겠죠. SQL의 명령문이 테이블에서 가져오는 데이터를 필터링 하려면 SELECT 문에서 WHERE 절을 사용합니다. 이 검색 조건은 필요한 행만 선택하거나 원하지 않은 행을 제외시키는 데 필요한 명령문들이 포함되어 있습니다.
"서울에 사는 직원은 누구입니까?"
"노트북을 생산하는 업체들은 어떤 회사들 입니까? "2017년 5월달에 판매된 컴퓨터는 몇대입니까?
이런 조건으로 데이터를 검색하기 위해서는 모두 WHERE 절을 필요로 합니다. 그러면 기본적은 문법을 알아보도록 하겠습니다.
SELECT (Distinct) Column, Column... FROM Table Name WHERE Search Condition
WHERE 절의 기본적인 구문 사용법은 위와 같습니다.
위와 같은 Customer 테이블을 예로 들어보겠습니다.
위에서 만약 서울에 사는 고객의 리스트를 모두 조회하려면 아래와 같이 입력합니다.
SELECT * FROM Customers WHERE City='서울'
서울에 사는 고객의 성과 이름을 알고 싶으면 아래와 같이 입력합니다.
SELECT FirstName, LastName FROM Customers WHERE City='서울'
WHERE 절에는 데이터를 검색하기 위해서 사용하는 여러가지 술어들이 있습니다.
SQL 표준에는 18개나 되는 술어들이 있지만 실제로는 그렇게 많은 술어들이 사용되지는 않기 때문에 여기에서는 많이 사 용되는 술어를 중심으로 설명드리도록 하겠습니다.
비교 (Comparison)
= equal to (같음)
<> not equal to (같지 않음)
< less than (보다 작음)
> greater than (보다 큼)
<= less than or equal to (같거나 작음)
>= greater than or equal to (같거나 큼)
BETWEEN (범위)
Between 술어는 주어진 값의 표현식이 지정된 값 사이에 있는 지를 테스트 할 수 있게 합니다. AND 키워드를 같이 사용 하여 범위를 지정합니다.
IN (멤버십)
IN 술어는 지정된 값 표현식의 값이 목록의 항목과 일치하는 지 테스트 할 때 사용됩니다.
LIKE (패턴 매치)
LIKE 술어를 사용하면 문자열 값 표현식이 지정된 문자열 패턴과 일치하는 지 테스트 할 수 있습니다.
IS NULL
값 표현식이 NULL을 평가하는 지 여부를 확인하려면 IS NULL 술어를 사용합니다. 그러면 한가지씩 사용 예를 알아보도록 하겠습니다.
1. "고객의 아이디가 1011 보다 큰 고객의 리스트를 출력하시오
2. "고객의 지역코드가 500 이상인 사람의 성과 이름을 출력하시오.
3. "고객의 지역코드가 100 에서 300 사이에 있는 사람의 도시와 지역을 출력하시오.
-- 1번 예
SELECT * FROM Customers WHERE CustomerID > 1011
-- 2번 예
SELECT FirstName + ' ' + LastName AS CustomerName -- AS는 Alias라고 해서 대치해주는 컬럼명입니다. FROM Customers
WHERE AreaCode > 500
-- 3번 예
SELECT City, CState FROM Customers
WHERE AreaCode BETWEEN 100 AND 300
그런데 Between 키워드는 사용할 시 약간 유의해야 할 점이 있습니다.
아래와 같은 Vendor 테이블에 데이터가 들어있다고 가정하고 예를 들어 보겠습니다.
이와 같이 데이터가 있을 때 만약 AccountNumber 가 B와 C로 시작되는 Vendor 리스트를 출력하려고 하면 어떻게 해야 할까요?
1. Between B AND C (?)
2. Between B AND D (?)
아쉽게도 위의 두 경우는 모두 정답이 아닙니다.
1번의 경우는 B로 시작되는 AccountNumber는 출력이 되겠지만 C로 시작되는 AccountNumber는 모두 출력되는 것이 아닙니다. 단지 C 하나로만 이루어진 문자가 있다면 그것만 출력됩니다.
2번의 경우는 좀 더 나은 검색 방법이긴 하지만 역시 D 가 출력되면 안되므로 정확한 방법은 아닙니다. B와 C로 출력되는 모든 문자를 검색하는 가장 좋은 방법은
3. Between B AND CZ 와 같은 검색 방법을 사용하는 것이 좋습니다.
시작점과 끝점을 명확하게 이해하고 검색 조건을 사용해야 원하는 결과물을 얻을 수 있으므로, 올바른 범위를 정의하기 위 해서는 데이터를 이해하는 것이 먼저 선행되어야 합니다.
IN 키워드는 명시적으로 정의된 값의 목록을 찾고자 할 경우 사용하는 것이 좋습니다.
예를 들어 Customer가 서초구, 마포구, 용산구에 사는 고객 리스트를 출력하고자 한다면 아래와 같이 SQL 문을 사용합니 다.
SELECT * FROM Customers
WHERE CState IN ('서초구', '마포구', '용산구')
LIKE 키워드 는 주어진 패턴 문자열과 유사한 값을 찾거나 검색 기준으로 사용할 정보의 일부분만 알고 있을 때 사용합니 다.
LIKE 키워드는 특수한 와일드 카드 문자인 %(백분율기호)와 _(언더바)를 사용하여 검색 조건을 정의합니다.
%는 임의의 일반 문자를 나타내고 _는 한 글자의 임의의 일반 문자를 나타냅니다. 그러면 LIKE의 사용법을 Vendor 테이블을 기준으로 알아보도록 하겠습니다.
1. Name이 Sh로 시작되는 모든 Vendor 리스트를 출력하시오.
2. Name의 마지막 문자가 on으로 끝나는 모든 Vendor 리스트를 출력하시오.
3. Name의 중간에 an 이 들어있는 모든 Vendor 리스트를 출력하시오.
4. AccountNumber의 두번째와 세번째 문자가 ar로 되어 있는 Vendor 리스트를 출력하시오.
5. AccountNumber가 10문자로 되어 있는데 마지막 3문자가 001로 되어 있는 리스트를 출력하시오.
-- 1번 예
SELECT * FROM Vendors WHERE Name LIKE 'Sh%'
-- 2번 예
SELECT * FROM Vendors WHERE Name LIKE '%on'
-- 3번 예
SELECT * FROM Vendors WHERE Name LIKE '%an%'
-- 4번 예
SELECT * FROM Vendors
WHERE AccountNumber LIKE '_ar%'
-- 5번 예
SELECT * FROM Vendors
WHERE Name LIKE ' 001' -- 언더바가 7개임
LIKE 키워드의 사용법을 이해하는 건 어렵지 않은데 이 키워드를 사용할 경우 약간 문제가 있을 수도 있겠다라는 생각을 혹시 해보진 않으셨나요? 그런 생각이 드셨다면 아주 예리하신 겁니다.
만약 실제 데이터에 % 나 _ 가 있어서 이 조건을 가지고 검색을 해야 할 경우에는 어떻게 할까요? 그렇습니다. LIKE 키워드로 검색을 할 경우 %나 _는 검색을 할 수 없습니다.
단순히 사용하면 말이죠.
그럴 경우엔 아래와 같은 방법을 이용해서 해결할 수 있습니다.
1. 상품의 할인율이 15%인 상품들을 출력하시오.
2. 상품이 이름이 G_로 시작하는 상품들을 출력하시오.
-- 1번 예
SELECT * FROM Products
WHERE Discount LIKE '15!%' ESCAPE '!'
-- 2번 예
SELECT * FROM Products
WHERE Discount LIKE 'G!_%' ESCAPE '!'
%나 _ 를 검색조건에 직접 포함시켜 검색해야 한다면 위와 같이 ESCAPE 키워드를 같이 사용하면 됩니다.
NULL 검색은 값이 어떤 데이터가 들어 있는 지 알 수 없을 때 사용하는 검색 조건입니다.
NULL 은 단순히 아무런 데이터가 없는 조건을 검색하는 것이 아닙니다. 길이가 0인 문자열도 아닙니다.
예를 들어 선거운동을 하는 후보자가 있는데 자신을 지지하는 유권자를 찾고자 할때 아무도 지지하는 사람이 없다고 한 유 권자는 아무런 데이터가 없는 유권자, 또는 길이가 0인 문자열로 나타낼 수 있습니다. 하지만 지지하는 후보자를 정하지 못한 유권자가 있다면 이런 유권자는 NULL로 취급하게 됩니다. 누구를 지지할 지 조차 아직 못 정해진 상태, 어떤 데이터 가 들어갈 지 정해지지 않은 상태가 NULL 이라고 볼 수 있습니다. 실제 데이터를 입력할 시에도 이런 경우는 빈번히 발생 하기 때문에 NULL을 취급해야만 하는 경우가 생기게 됩니다.
NULL을 검색하기 위해선 <조건> = Null 과 같이 검색을 할 수 없습니다. Null은 특수한 데이터로 취급되기 때문에 Null 검색을 위해서는 IS NULL 키워드를 사용해야 합니다.
예를 들어 회원 가입시 입력해야 하는 필수 정보와 선택 정보가 있는데, 선택 정보는 데이터베이스에서 Null 값이 상당히 많이 존재할 수 있습니다.
"회원 가입 고객들 중에서 자신의 나이를 입력하지 않은 회원 리스트를 출력하시오" 위와 같은 검색 조건이 있을 시에 아래와 같이 SQL 문을 작성할 수 있습니다.
SELECT * FROM Customers WHERE Age IS NULL
'MSSQL' 카테고리의 다른 글
테이블 연결(INNER JOIN) (1) | 2024.11.13 |
---|---|
데이터 검색(여러 조건) (0) | 2024.11.12 |
데이터베이스 분석과 설계 (2) | 2024.11.10 |
데이터 선택(SELECT...FROM) (1) | 2024.11.09 |
제약조건 (0) | 2024.11.09 |