※ 이 글은 오지영 강사님의 <업무에 바로 쓰는 SQL 활용실습>의 강의내용을 바탕으로 작성하였습니다.
02 WHERE절을 이용한 행(Row)의 제한
- 검색결과에 대한 제한을 둘 때 where절에 조건을 지정한다.
- where절은 from절 다음에 사용한다.
- 문자열과 날짜 값은 작은 따옴표로 묶어서 표시한다.
- where절은 생략 가능하고, 생략할 경우 모든 행이 검색된다.
- Where절 조건식이 true인 row만 선택이 된다.
형식
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;
'프로그래밍 > Database & SQL' 카테고리의 다른 글
[Oracle | 오라클] 단일행 함수 - 2. 숫자함수 (0) | 2015.08.13 |
---|---|
[Oracle | 오라클] 단일행 함수 - 1. 문자함수 (0) | 2015.08.13 |
[Oracle | 오라클] SELECT문 - 기본 SELECT문 (0) | 2015.08.10 |
[Oracle | 오라클] 오라클 서버의 구조(메모리 영역 - 프로세스 영역 - 파일 영역) (0) | 2015.08.10 |
[Oracle | 오라클] DB 덤프/임포트 하기 (31) | 2015.05.26 |