본문 바로가기
Back-End/DB

[Oracla] SQL- WHER절과 연산자

by LeeGangEun 2022. 2. 23.

WHERE절의 필요성

 - 사용 관점에서 단순히 SELECT와 FROM 절만 이용하면, 실제로 원하는 자료가 제대로 있는지 확인하기 어렵다.

 - 성능 관점에서 SELECT와 FROM 절만 이용하면 필요하지 않은 자료들까지 DB로부터 요청하는 SQL문은 대량의
데이터들을 검색하기 위해 DB가 설치되어 있는 서버의 CPU와 MEMORY 같은 시스템 자원들을 과다하게 사용함으로써
많은 사용자들의 QUERY에 대해 바로 처리를 해주지 못하게 되고 또한 검색된 많은 자료들이 네트워크를 통해서 전달됨으로써 문제점들이 발생하게 된다.

 

WHERE절 사용법 
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [조건식]; 

select * 
from emp
where deptno=30        -- deptno가 30인 모든 컬럼 출력

 

AND 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [조건식];  
AND [조건식];

select * 
from emp
where deptno=30   -- deptno가 30인 것과
and job='SALESMAN'; -- job이 salesman인 행만 출력  ( 둘다 true일 때 출력)

 

OR 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [조건식]; 
OR [조건식]

select * from emp
where deptno=10    --  deptno가 10이거나 
or sal>=3000;       -- sal(월급) 이 3000이상인 행만 출력! (둘중에 하나만 true여도 출력!)

 

등가 비교 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [조건식]; 

select * from emp
where not sal = 3000;

select * from emp
where sal != 3000;

select * from emp
where sal <> 3000;

select * from emp	 --sal이 3000이 아닌 행 출력!
where sal ^= 3000;       --모두 같은 결과값을 출력한다.

 

IN 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [열 이름] IN (데이터1,데이터2...데이터N);

select *
from emp
where job in ('MANAGER', 'SALESMAN' , 'CLERK');  

select *
from emp
where job = 'MANAGER' or job='SALESMAN' or job='CLERK';
-- 둘다 결과값이 같다.
-- 조건식이 길어질 거 같으면 in 연산자를 쓰는게 편하다!

 

BETWWEN A AND B 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [열 이름] BETWEEN 최솟값 AND 최댓값;

select *
from emp
where sal >= 2000
  and sal <= 3000;            

select *
from emp
where sal between 2000 and 3000;   -- betwwen 앞에 not을 붙여서 사용가능
-- 두개의 결과값이 같다.

 

LIKE 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [열 이름] LIKE [조건]

select *
from emp
where ename like 'S%';      -- 첫글자가 s인 행 출력

select *
from emp
where ename like '%S';   -- 마지막글자가 s인 행 출력

select * 
from emp
where ename like '%Sql%';   -- Sql이 포함된 행 다 출력

select * 
from emp
where ename not like '%Sql%';   -- Sql이 포함된 행 제외하고 다 출력

select *
from emp
where ename like '_L%';    -- 두번째 글자가 L로 시작하는 칼럼 다 출력

--    _ : 어떠한 문자가 와도 되지만 단 한글자를 의미함.
--    % : 문자가 없거나, 한개이상의 어떠한 문자도 대치함. 즉 0~무한대의 글자가 될 수 있음.

 

IS NULL 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [열 이름] IS NULL;

select *
from emp
where comm is  null;   
-- comm 이 null값인 데이터 출력
-- 즉 comm(보너스)를 한푼도 못받은 사람들을 출력하는 것

 

IS NOT NULL 연산자
Select [조회할 열1], [조회할 열2],  . . . . , [열N 이름]
From [테이블명, 뷰명]
Where [열 이름] IS NOT NULL;

select *
from emp
where comm is not null;   
-- comm이 null이 아닌 값 출력
-- 즉 comm(보너스)를 한푼이라도 받은사람들을 출력하는 것!

여기서 0이 왜 출력 됐지?? 이렇게 생각 할 수도 있는데 0과 null은 다른 값이다.               0은 정수0을 뜻하지만 null은 아예 비어있는 값을 뜻하기 때문이다.