[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 AND 나 NOT 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 조건절
ORA-00917: 누락된 콤마 (0) | 2016.08.17 |
---|---|
ora-01045 user lacks create session privilege logon denied (0) | 2016.08.12 |
[SQL QUARY] XML CDATA, <![CDATA[]]>, sql cdata xml (0) | 2016.08.09 |
[mysql 쿼리] - mysql 번호 매기기, mysql rownum, mysql 순서 정렬 (0) | 2016.07.15 |
[SQL QUERY] - SQL SELECT / SQL FROM / SQL WHERE (0) | 2014.11.21 |
댓글 영역