상세 컨텐츠

본문 제목

[SQL QUERY] - SQL WHERE 조건절 : AND, OR, IN, IS NULL / IS NOT NULL, LIKE

프로그래밍/DB(데이타베이스)

by 발랄하고 우울한 청춘 2014. 11. 25. 15:29

본문

728x90
반응형
SMALL

 

[SQL]

SQL WHERE 조건절

 

 

 


 

이번 글에서는 SQL WHERE 조건절에 대해 알아보겠습니다.

SQL WHERE 는 SELECT와 FROM으로 축약된 테이블과 컬럼에서 특정 값만 읽어들일 수 있는 쿼리였죠? 하지만 역시 대용량 데이터에서는 모든 데이터를 한 눈에 파악하기 힘듭니다. SQL WHERE 조건절을 이용하여 데이터를 보다 정확하게 파악해 봅시다.

(찾고자 하는 조건절은 CTRL + F 를 이용해서 찾아주세요)

반응형

 

1. AND    : 모든 조건을 만족하는 값 불러오기

  WHERE로 검색결과를 좁힌 테이블에서 두 조건을 모두 만족하는 값을 불러올떄는 AND 연산자를 사용합니다. 예제를 볼까요?

 

 
1
2
3
4
SELECT department, employee_id, salary
FROM employee
WHERE salay >= 250
AND salay <= 300;

 위의 예제는 employee 테이블에서 department, employee_id, salary 컬럼 중 salary 값이 250 이상 300 이하인 값들을 불러옵니다. 그려면 월급이 250 ~ 300 사이의 부서 - 이름 - 월급 값이 나오겠죠? 

 단, 이처럼 범위를 지정할 때에는 AND를 쓰기 보단 BETWEEN AND를 쓰는 것이 더 간결한 표현이 됩니다. 하지만 <= (이하), >= (이상) 값이 아닌 < (미만), > (초과) 값을 경우에는 꼭 AND를 써주셔야 합니다 

 

2. BETWEEN [A] AND [B] : A와 B의 사이값 불러오기

 위에도 설명했듯이 BETWEEN AND는 특정한 두 값의 사이값을 읽어들입니다. 위의 예제를 BETWEEN AND로 표현해 보겠습니다.

 
1
2
3
SELECT department, employee_id, salary
FROM employee
WHERE salay BETWEEN 250 AND 300;

  4줄이였던 질의문을 3줄로 줄여서 좀 더 간결한 표현이 됩니다

 

3. OR : 하나의 값이라도 만족하는 값 불러오기

 AND가 나왔다면 OR가 나오는 것이 인지상정! AND가 둘 다 충족하는 값을 불러온다면, OR는 둘 중 하나라도 만족하는 값을 불러옵니다.

 
1
2
3
4
SELECT department, employee_id
FROM employee
WHERE department = 'IT'
OR department = 'SERVICE' ;

 이 질의문은 employee 테이블의 department, employee_id 컬럼에서 department 가 IT 나 SERVICE 인 값을 불러옵니다.

 그런데 조건이 2개 이상이라면? IT, SERVICE 부서 이외에 ACCOUNT와 MANAGEMENT 부서까지 불러오겠습니다.

 
1
2
3
4
5
6
SELECT department, employee_id
FROM employee
WHERE department = 'IT'
OR department = 'SERVICE' 
OR department = 'ACCOUNT'
OR department = 'MANAGEMENT';

OR를 통해 표현하면 아무래도 질의문이 길어지겠죠. 이를 간결히 표현할 수 있는 방법이 바로 IN 질의문입니다.

 

4. IN : 2개 이상의 조건 중 하나라도 만족하는 값 불러오기

 위의 질의문을 IN을 이용하여 표현해 보겠습니다.

 
1
2
3
SELECT department, employee_id
FROM   employee
WHERE department IN('IT''SERVICE''ACCOUNT''MANAGEMENT');

 

 OR를 이용해서 표현할때에는 6줄이나 되던 질의문이 3줄로 대폭 줄고, 가독성도 더 올라갔죠?

5. IS NULL / IS NOT NULL : 컬럼값이 NULL인값 불러오기 / NULL이 아닌 값 불러오기 모든 컬럼의 데이터가 다 채워지리란 보장은 없죠. 때로는 조건에 따라 공란이 있을 수 있습니다. 예를 들어 휴가 수는 사람마다 갈 수도 있고 안갈수도 있죠? (직급이 낮을수록 휴가(를 비롯한 연차, 월차)를 마음껏 내지 못하니까요 ㅠ) 휴가를 가지 못한 인원을 검색해보겠습니다.

 
1
2
3
SELECT    department, employee_id
FROM       employee
WHERE     vacation_cnt IS NULL;

 이 질의문은 employee 테이블의 department, employee_id 컬럼에서 vacation_cnt 가 NULL, 즉 공란인 값을 불러옵니다. 이와 반대로 휴가를 간 인원들을 보려면?

 

 
1
2
3
SELECT    department, employee_id
FROM      employee
WHERE     vacation_cnt IS NOT NULL;

 

  NOT 을 넣어

vacation_cnt 가 NULL 이 아닌 값을 불러옵니다 NOT은 IS NULL 뿐만 아니라, NOT BETWWEN ANDNOT IN 과 같이 사용할 수 있습니다.

 

6. LIKE  : 특정 문자열이 들어간 값 불러오기 자 일단 2014년 올해 입사한 직원들의 부서와 이름값을 불러와보겠습니다.  

 
1
2
3
SELECT    department, employee_id
FROM      employee
WHERE     hire_date BETWEEN '20140101' AND '20141231'

 

  BETWEEN AND 를 이용해서 검색할 수 있겠죠? 그런데 이 질의문을 간편하게 검색할 수 있는 방법이 있습니다.

 
1
2
3
SELECT    department, employee_id
FROM      employee
WHERE     hire_date LIKE '2014%';

 '2014%'의 의미는 2014로 시작하는 모든 값을 불러온다는 뜻입니다. 사람의 이름을 검색할 때에는 'K%'라고 검색하면 K로 시작하는 모든 이름이 검색될 것입니다.

 이번엔 10월에 입사한 사원을 찾아볼까요?

 
1
2
3
SELECT    department, employee_id
FROM      employee
WHERE     hire_date LIKE '%10%';

요렇게 검색하면 년도에 관계 없이 10월에 입사한 사원을 찾을 수 있습니다

좀 더 상세히 찾아볼까요? 2000년 이후 10월에 입사한 사원을 찾아보겠습니다

 
1
2
3
SELECT    department, employee_id
FROM      employee
WHERE     hire_date LIKE '20__10%';

 '_'  기호는 한 글자만을 대체하는 기능입니다

LIKE를 사용하니 한결 간편하고 보기도 좋죠?

 

 

 


 

[SQL]

SQL WHERE 조건절

 

 

 


 

 

반응형
LIST

관련글 더보기

댓글 영역