OHSAYU 2023. 11. 10. 15:04

1. WHERE 조건절 개요

    기본적인 SQL 문장은 Oracle의 경우 필수적으로 SELECT 절과 FROM 절로 이루어져 있다. WHERE 절은 조회하려는 데이터에 특정 조건을 부여할 목적으로 사용하기 때문에 FROM 절 뒤에 오게 된다. WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.

 - 칼럼(Column)명 (보통 조건식의 좌측에 위치)

 - 비교 연산자

 - 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)

 - 비교 칼럼명 (JOIN 사용시)

SELECT 
    [DISTINCT/ALL] 칼럼명 [ALIAS명] 
FROM 테이블명 
WHERE 조건식;

 

 

2. 연산자의 종류

WHERE 절에 사용되는 연산자는 3가지 종류가 있다.

- 비교 연산자 (부정 비교 연산자 포함)

- SQL 연산자 (부정 SQL 연산자 포함)

- 논리 연산자

 

* WHERE 절은 AVG(), SUM()같은 집계함수는 사용할 수 없다.

 

* CHAR 변수나 VARCHAR2와 같은 문자형 타입을 가진 칼럼을 특정 값과 비교하기 위해서는 인용 부호(작은따옴표, 큰따옴표)로 묶어서 비교 처리를 해야 한다. 하지만 NUMERIC과 같은 숫자형 형태의 값은 인용부호를 사용하지 않는다.

 

* 문자 유형 칼럼의 경우 WHERE TEAM_ID = K02 사례에서 ' ' 표시가 없는 경우 에러가 발생하였지만, 숫자 유형 칼럼의 경우 숫자로 변환이 가능한 문자열(Alpha Numeric)과 비교되면 상대 타입을 숫자 타입으로 바꾸어 비교한다. 예를 들면 [예제]의 WHERE HEIGHT >= 170 조건을 WHERE HEIGHT >= '170' 이라고 표현하더라도, HEIGHT라는 칼럼이 숫자 유형의 변수이므로 내부적으로 ‘170’이라는 문자열을 숫자 유형 170으로 바꾸어 처리한다.

 

 

■ IN (list) 연산자

[예제] 사원 테이블에서 JOB이 MANAGER이면서 20번 부서에 속하거나, JOB이 CLERK이면서 30번 부서에 속하는 사원의 정보를 IN 연산자의 다중 리스트를 이용해 출력하라.
SELECT 
    ENAME, 
    JOB, 
    DEPTNO
FROM EMP
WHERE (JOB, DEPTNO) IN(('MANAGER', 20),('CLERK', 30));

 

 

■ LIKE 연산자

 

 

[예제] '장'씨 성을 가진 선수들의 정보를 조회하는 WHERE 절을 작성한다.
SELECT PLAYER_NAME
FROM PLAYER
WHERE PLAYER_NAME LIKE '장%';

 

 

[예제] 세 글자 이름을 가진 선수 중 '장'씨 성을 갖고 끝 글자가 '호'인 선수들의 정보를 조회하는 WHERE 절을 작성한다.
SELECT PLAYER_NAME
FROM PLAYER
WHERE PLAYER_NAME LIKE '장_호';

 

 

■ BETWEEN a AND b연산자

[예제] 세 번째로 키가 170 센티미터 이상 180센티미터 이하인 선수들의 정보를 BETWEEN a AND b 연산자를 사용하여 WHERE 절을 완성한다.
SELECT PLAYER_NAME
FROM PLAYER
WHERE HEIGHT BETWEEN 170 AND 180;

 

 

■ 부정 연산자

[예제] K02 소속인 선수들 중에서 포지션이 미드필더(MF:Midfielder)가 아니고, 키가 175 센티미터 이상 185 센티미터 이하가 아닌 선수들의 자료를 찾아본다.
SELECT 
    PLAYER_NAME AS 선수명,
    POSITION    AS 포지션,
    HEIGHT      AS 키
FROM PLAYER
WHERE  
    TEAM_ID = 'K02'
    AND NOT POSITION = 'MF'
    AND NOT HEIGHT BETWEEN 175 AND 185;

 

 

[예제] 국적(NATION) 칼럼의 경우 내국인들은 별도 데이터를 입력하지 않았다. 국적 칼럼이 NULL이 아닌 선수와 국적을 표시하라.
SELECT 
    PLAYER_NAME AS 선수이름, 
    NATION      AS 국적 
FROM PLAYER 
WHERE NATION IS NOT NULL;

 

 

출처 : SQL 전문가 가이드