일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 오라클
- Database
- 프론트엔드
- 코딩
- 함수
- java
- 파이썬
- 자바
- PL/SQL
- It
- jsp
- 프로그래밍
- 웹
- 문자열
- frontend
- 자바스크립트
- Python
- 메소드
- Programming
- Method
- oracle
- SQL
- 데이터베이스
- String
- 서블릿
- Servlet
- JavaScript
- HTML
- function
- web
- Today
- Total
Untitled_Blue
[SQL] WHERE 절, 연산자의 시작. 본문
안녕하세요. 이번 글은 WHERE 절에 대한 설명입니다.
- WHERE 절이란?
- WHERE : 데이터를 조회할 때 특정 조건을 부여하는 방식으로 원하는 범위의 데이터만 조회가능하게 해주는 조건절
WHERE 절을 사용하면 조회하고자 하는 칼럼명을 언급하는 것보다 더 세밀하고 구체적으로 데이터를 조회가능하다.
예를 들어 EMP 테이블에서 JOB(직책 또는 직업)이 MANAGER인 사람만 추출해서 조회하고 싶으면 where 절을 어떻게 작성하면 될까? 이는 프로그래밍 언어의 제어자인 if문과 유사하다고 생각하면 된다.
select * from EMP where JOB = 'MANAGER';
다음과 같이 칼럼명 뒤에 = 을 붙이고 바로 뒤에 원하는 직책명을 입력하는 방식으로 원하는 부분만 골라서 조회할 수 있다. 이 외에도 DEPTNO처럼 다른 칼럼으로도 얼마든지 where 절에 적용할 수 있다.
- 2개 이상의 조건을 작성할 수 있는 AND, OR
where절에서 조건을 작성하는데 방금 전까지는 하나의 조건만 보여줬다. 그러나 조건문은 2개이상 작성할 수도 있다.
이때 조건들을 명시할 때는 이들을 분리해줄 필요가 있으며 이를 위해 AND와 OR을 사용한다.
- AND : 여러 조건을 모두 성립하는 데이터 출력하나 없으면 아무것도 나오지 않는다.
- OR : 여러 조건들 중 하나만 성립해도 조건에 성립하는 데이터를 출력한다.
이때 조건에 부합하는 데이터가 없으면 콘솔 (Console) 내지 CLI (Command Line Interface) 기반으로 실행하는 SQL*Plus에서는 no rows selected라고 출력해준다. (필자는 Oracle 사의 SQL Developer을 기준으로 실습 및 작성하고 있다.)
select * from EMP where SAL >= 1500 and JOB = 'MANAGER';
해당 소스코드를 보면 where 뒤에 and를 기점으로 두 개의 조건이 명시되어 있다. 이를 해석하면 SAL(급여)가 1500 이상이면서 JOB(직책)이 MANAGER인 행 단위 데이터를 출력하라는 뜻이다. 이는 곧 두 가지의 조건을 모두 성립하는 행만을 찾아서 출력하라는 뜻으로도 해석할 수 있다. 해당 코드를 실행해서 결과를 확인하면 사진처럼 SAL이 1500보다 크거나 같은 값을 보여주고 있는 동시에 JOB이 MANAGER인 데이터만 보여주고 있다는 점을 확인할 수 있다.
select * from EMP where DEPTNO = 20 or JOB = 'CLERK';
해당 소소코드 역시 where 뒤에 or을 기점으로 두 개의 조건이 명시되어 있는데 이는 EMP 테이블에서 DEPTNO (부서번호)가 20이거나 JOB (직책)이 CLERK 인 행 단위 데이터를 출력하라는 뜻이다. 이때 '이거나'라는 글자가 존재한다는 것은 곧 두 개의 조건 중 하나만 충족하는 데이터도 조회 가능하다는 뜻으로도 해석할 수 있다. 실행 후 결과를 확인해보면 부서번호가 20인 데이터가 출력된 것과 직책이 CLERK인 데이터가 조회되는 점을 알 수 있다. 이때 당장에 각 칼럼에 대한 조건과 다른 결과가 나왔다고 해서 잘못 나온 것이 아니다. 조건 하나만 충족해도 다른 조건이 부합되지 않은 칼럼도 나올 수 있기 때문이다. 프로그래밍 언어에서도 그랬듯이 OR 연산자는 또는 이라는 특성때문에 둘 중 하나라도 참이면 최종결과는 참이라는 점을 기억하자.
select * from EMP where hiredate >= '81/07/01' and (DEPTNO = 10 or DEPTNO = 20);
다음은 두 개의 연산자를 혼합해서 사용한 코드이다. 이런 비슷한 방식으로도 3개 이상의 조건을 설정할 수 있다.
해당 코드의 조건을 해석하면 HIREDATE (입사날짜)가 81년 7월 1일 이후이면서 DEPTNO (부서번호)가 10 또는 20인 데이터를 찾아서 출력하라는 뜻이다. 이렇게 보면 입사날짜에 대한 조건을 반드시 충족해야 되면서 부서번호 10, 20 중 반드시 하나가 성립되는 데이터만 조회될 수 있다는 점을 알 수 있다. 실행 결과를 보면 바로 알 수 있을 것이다. 부서번호가 10 또는 20, 그 외의 값은 나오지 않으면서 입사날짜가 81년 7월 1일 이후인 값이 출력됐다는 점을 확인할 수 있다.
- IN, NOT IN, BETWEEN 연산자
- 칼럼명 IN (데이터1, 데이터2, ...) : OR 연산자를 간결하게 표현 가능한 연산자
- 칼럼명 NOT IN (데이터1, 데이터2, ...) : IN 연산자의 반대이며 칼럼명을 기준으로 소괄호 안 데이터가 없는 행만 출력해주는 연산자
select * from EMP where DEPTNO IN (10, 30);
해당 코드는 DEPTNO의 값이 10이거나 30인 모든 칼럼에 대한 행을 출력하라는 뜻이다. OR로 해석하면 DEPTNO = 10 or DEPTNO = 30이다. 실제 결과에서도 10 또는 30인 조건을 충족하는 결과만 조회되는 점을 확인할 수 있다.
select * from EMP where DEPTNO NOT IN (10, 30);
해당 코드는 DEPTNO의 값이 10과 30 어느 것도 성립되지 않은 모든 칼럼에 대한 행을 출력하라는 뜻이다. 다르게 DEPTNO = 20이다. 코드 실행 후 실제 출력 결과를 보면 DEPTNO의 값이 10과 30 모두 해당되지 않는 20인 관련된 결과만 조회되는 점을 확인할 수 있다.
select * from EMP where HIREDATE BETWEEN '81/09/01' AND '81/12/31';
- 칼럼명 BETWEEN 최소값 AND 최대값 : 최소값부터 최대값에 해당되는 데이터만 조회하는 연산자
다음은 BETWEEN 연산자이다. 이는 숫자 및 날짜의 범위를 지정할 때 사용한다. 해당 코드는 HIREDATE (입사날짜)가 81년 9월 1일부터 81년 12월 31일까지인 모든 칼럼에 대한 데이터를 출력하라는 뜻을 지니고 있다. 실제 실행 결과에서도 범위에 부합되는 선의 데이터를 조회할 수 있다는 점을 알 수 있다. BETWEEN 연산자를 범위 연산자와 AND를 활용하면 다음과 같다. 물론 결과는 동일하다.
select * from EMP where HIREDATE >= '81/09/01' and HIREDATE <= '81/12/31';
select * from EMP where SAL NOT BETWEEN 1000 AND 2000;
select * from EMP where SAL < 1000 OR SAL > 2000;
이는 NOT BETWEEN 연산자를 활용한 코드이다. 이는 SAL (급여)가 1000부터 2000까지에 해당되지 않는 데이터를 출력하는 뜻이다. 이를 범위 연산자와 OR를 사용하면 상단의 둘째 줄 코드와 같다. 출력 결과는 다음과 같다.
+ 범위 연산자
- > : 초과 ( > 3000 이라고 하면 3000을 포함하지 않은 3001 부터의 값이 해당, 3000보다 큰 값)
- < : 미만 ( < 2000 이라고 하면 2000을 포함하지 않은 1999, 1998, 1997 ... 의 값이 해당, 2000보다 작은 값)
- >= : 이상 ( >= 5000 이라고 하면 5000보다 크거나 같은 값이 이에 해당, 5000도 해당 연산자에 포함됨)
- <= : 이하 ( <= 6000 이라고 하면 6000보다 작거나 같은 값이 이에 해당, 6000도 해당 연산자에 포함됨)
다음 글은 SQL에서 제공하는 함수에 대한 설명입니다.
'Database > SQL' 카테고리의 다른 글
[SQL] 와일드 카드 (Wildcard) (0) | 2023.05.23 |
---|---|
[SQL] IS NULL and IS NOT NULL 그리고 NVL and NVL2 (0) | 2023.05.23 |
[SQL] SELECT (1) | 2023.05.16 |
[SQL] 데이터 모델 (0) | 2023.05.05 |
[SQL] SQL과 데이터베이스에 대한 기본 이해 (0) | 2023.05.03 |