본문 바로가기
프로그래밍/Database & SQL

[Oracle | 오라클] SELECT문 - WHERE을 이용한 행의 제한

by 불타는홍당무 2015. 8. 12.

※ 이 글은 오지영 강사님의 <업무에 바로 쓰는 SQL 활용실습>의 강의내용을 바탕으로 작성하였습니다.




02  WHERE절을 이용한 행(Row)의 제한


    • 검색결과에 대한 제한을 둘 때 where절에 조건을 지정한다.
    • where절은 from절 다음에 사용한다.
    • 문자열과 날짜 값은 작은 따옴표로 묶어서 표시한다.
    • where절은 생략 가능하고, 생략할 경우 모든 행이 검색된다.
    • Where절 조건식이 truerow만 선택이 된다.

    


형식

SELECT 컬럼명1, 컬럼명2

FROM 테이블명

WHERE 조건식;


SELECT ename, sal

FROM emp

WHERE 1000>=3000;


player_t 선수 중에서 포지션이 FW인 선수들의 이름, 키, 팀id 조회하기


SELECT player_name 이름, height 키, team_id 팀아이디

FROM PLAYER_T

WHERE position = 'FW';


player_t 선수 중 몸무게가 80보다 많은 선수들의 이름, 몸무게 조회하기


SELECT player_name 이름, weight 몸무게

FROM PLAYER_T

WHERE weight > 80;

 

 

1. IN, ANY, SOME, OR


키가 165, 195, 196인 선수들의 이름, , id 조회하기

 

SELECT player_name 이름, height , team_id 팀아이디

FROM PLAYER_T

WHERE height IN (165, 195, 196);

 

SELECT player_name 이름, height , team_id 팀아이디

FROM PLAYER_T

WHERE height = ANY (165, 195, 196);

 

SELECT player_name 이름, height , team_id 팀아이디

FROM PLAYER_T

WHERE height = SOME (165, 195, 196);

 

SELECT player_name 이름, height , team_id 팀아이디

FROM PLAYER_T

WHERE height = 165 OR height= 195 OR height= 196;


※ 다양한 함수로 처리해도 결국 내부적으로는 모두 마지막 방식으로 변환해서 처리한다. 속도에는 차이가 없다.

 


2. BETWEEN A AND B

 

키가 192보다 크거나 같고 195보다 작거나 같은 범위 내에 해당되는 선수들만 이름, 키 조회하기

 

SELECT player_name 이름, height

FROM PLAYER_T

WHERE height >= 192 AND height <= 195;

 

SELECT player_name 이름, height

FROM PLAYER_T

WHERE height BETWEEN 192 AND 195;

 

SELECT player_name 이름, height

FROM PLAYER_T

WHERE height BETWEEN 195 AND 192;

 

*문자는 가나다/abc 순으로 검색한다는 점에 유의한다.

SELECT player_name, height

FROM PLAYER_T

WHERE player_name BETWEEN '나길동' AND '박길동';

 


3. LIKE 연산자

 

SELECT player_name, e_player_name

FROM PLAYER_T

WHERE player_name like '_';

--where player_name = '%';

-- %사용 시에만 %사용

--WHERE player_name like '%';

-- Like 사용시에만 %: 0, 1개이상 문자열 

         

이름 2번째 글자가 ''인 선수들의 이름, 영문이름 조회하기                  


SELECT player_name, e_player_name

FROM PLAYER_T

WHERE player_name LIKE '_%';

 

이름이 2글자인 선수들만 이름, 영문이름 조회하기


SELECT player_name, e_player_name

FROM PLAYER_T

WHERE player_name LIKE '__';

 

영문이름에 'T'문자 포함된 이름, 영문이름 조회하기

 

SELECT player_name, e_player_name

FROM PLAYER_T

WHERE e_player_name LIKE '%T%';

 

영문이름에 '%'문자 포함된 이름, 영문이름 조회하기

 

SELECT player_name, e_player_name

FROM PLAYER_T

WHERE e_player_name LIKE '%!%%' ESCAPE '!';

*!는 물음표나 샵으로 표현할 수 있다.

 

 

4. NULL 연산자

 

NULL | 현재까지 정해지지 않은 미정의 값(0도 아니고 공백도 아니다)

 

SELECT ename, sal, comm

FROM emp

WHERE comm IS NULL;


SELECT ename, sal, comm

FROM emp

WHERE comm IS NOT NULL;

 


5. NOT 연산자

 

SELECT ename, sal

FROM emp

WHERE NOT sal > 2000;

--sal<=2000

 

SELECT ename, sal

FROM emp

WHERE sal NOT > 2000;

-- 에러발생. =,>,< 바로 앞에 not 사용불가

 

SELECT ename, sal

FROM emp

WHERE NOT ename LIKE 'A%';

 

SELECT ename, sal

FROM emp

WHERE ename NOT LIKE 'A%';

-- like, between, in 연산자는 바로 앞에도 not 사용 가능

 


player_t 선수 중에서 키가 170보다 작거나 195보다 큰 선수들만 이름, , id 조회하기

 

SELECT player_name, height, team_id

FROM PLAYER_T

WHERE height<170 OR height>195;

 

SELECT player_name, height, team_id

FROM PLAYER_T

WHERE height NOT BETWEEN 170 AND 195;

 

포지션이 GK,MK,FW,DF,TC 모두 아닌 선수들만 이름, 포지션 조회하기

 

SELECT player_name, position

FROM PLAYER_T

WHERE position NOT IN('GK','MK','FW','DF','TC');

 

영문이름에 T 문자가 하나도 포함되지 않은 선수들만 이름, 영문이름 조회하기

 

SELECT player_name, e_player_name

FROM PLAYER_T

WHERE e_player_name NOT LIKE '%T%';

 


6. 문자열 개수를 찾는 연산


emp사원 중 ename A문자가 2번 이상 들어있는 사원이름 조회하기

 

SELECT ename

FROM emp

WHERE ename like '%A%A%';

 

SELECT ename

FROM emp

WHERE (length(ename)-length(replace(ename,'A','')))>=2;

 

emp사원 중 ename A문자가 딱 1번만 나오는 사원이름 조회하기

 

SELECT ename

FROM emp

WHERE ename like '%A%' AND ename NOT LIKE '%A%A%';

 

SELECT ename

FROM emp

WHERE (length(ename)-length(replace(ename,'A','')))=1;