본문 바로가기
공부/Oracle

오라클 SQL 문법 공부2 - WHERE 절

by 리빈아빠 2017. 9. 16.
반응형

서론

저번글에서는 가장 기본적인 SQL문법 SELECT ~ FROM에 대해서 써보았다. 이번에는 WHERE절이다. WHERE 절은 특정조건을 걸어 내가 알고 싶은 데이터들만 필터를 해서 보여주는 구문이다. WHERE절에서 사용되는 연산자들은 중요하니까 외워두는 것이 좋다. 아니 오라클을 설치하고 이것저것 테스트를 많이 하면 금방 익숙해진다.

본론

연산자를 이용한 조건넣기

일단 문장의 형태는 SELECT 컬럼 FROM 테이블 WHERE 조건; 이다. 1장에서 봤던 문법 뒤에 WHERE가 붙은 형태이며 나는 어떤 테이블의 어떤 컬럼 값들을 가져올꺼야, 그런데 어떤 조건에 있는 값들만 보고 싶어 라고 생각하면 된다. 조건에 들어 갈 수 있는 연산자들은 아래 표에 정리되어있다.


연산자 종류 

내용 

 =

 완전히 같은 것만 

 !=, <>

 완전히 다른 것만

 <, >

 해당 컬럼보다 > 이거나 < 인 것만

 <=, >=

 해당 컬럼보다 <= 이거나 >= 인 것만 

 BETWEEN a AND b

 a와 b 사이에 있는 범위의 값들만 

 IN (a, b, c)

 a 나 b 나 c 중에 하나라도 있는 것들만 

 LIKE

 특정 패턴을 가지고 있는 것들만 

 IS NULL / IS NOT NULL

 Null 인 값들만 / NULL이 아닌 값들만 

 A AND B 

 A의 조건과(위의 내용들) B의 조건 둘다 만족 하는 것들만 

 A OR B

 A의 조건과 B의 조건 중 하나라도 맞는 것들만

 NOT A

 A의 조건과 다른 모든 것 


예를들어 학생 테이블에서 이름이 '강아지' 인 사람의 모든 정보를 보고 싶다 라면

SELECT * FROM 학생 WHERE 이름 = '강아지'; 처럼 작성하면 된다.


그리고 학생 테이블에서 이름이 강아지이고 나이가 23살 이하인 사람의 모든 정보를 보고 싶다 라면

SELECT * FROM 학생 WHERE 이름 = '강아지' AND 나이 <= 23;

이라고 하면 된다.


또 한번 학생 테이블에서 이름이 고양이나 강아지 이고 나이가 22~25살이 아닌 사람을 보고 싶다라면

SELECT * FROM 학생 WHERE 이름 IN ('강아지', '고양이') AND NOT BETWEEN 22 AND 25;

라고 하면 된다.


위의 표의 NOT은 해당 조건 가장 앞에 붙여 부정을 의미하게 사용 된다. 그리고 WHERE 절이 길어 진다면 괄호로 묶어 표시 하여 우선 순위를 정해주어도 상관없다.

LIKE 패턴?

연산자 LIKE는 특정 패턴의 값들을 가져 오게 할 수가 있다. 예를 들어 강씨인 사람의 데이터를 보고 싶다라면

SELECT * FROM 학생 WHERE 이름 LIKE '강%'; 이렇게 표기를 하면 된다. 여기서 사용된 %는 어떤 글자가 와도 상관이 없다라는 뜻이다. 강으로 시작하는 모든 이름이 나온다는 말이다.


또 하나 나는 강씨인 사람인데 이름이 두글자인 사람의 데이터를 보고 싶다 라면

SELECT * FROM WHERE 이름 LIKE '강_'; 과 같이 표기를 하면 된다. _ 이 언더스코어는 어떤글자가 와도 상관은 없지만 자리수는 딱 표시된 만큼의 자리수인 것들만 가져 온다는 뜻이다. 강시, 강수 이런 것들은 가져오지만 강아지, 강강수월래와 같은 글자는 이미 _ 로 자리수를 정하였기 때문에 가져오지 않는다.


조건에 '%김%' 이라고 넣으면 문자열 중에 김이라는 글자가 들어있는 것들을 찾는다는 것이고 '_김_' 이라면 3글자의 문자열 중에 가운데 김이 들어간 문자열을 찾게 될 것이다. LIKE 패턴은 이렇게 %와 _ 두가지 뿐이 없다.

NULL?

프로그래밍 공부를 하셨던 분들이라면 알겠지만 아무런 데이터가 없는 상태를 말한다.

예를들어 이름 정보가 없는 행들을 보고 싶다 라면

SELECT * FROM 학생 WHERE 이름 = NULL; 라고 생각 할 수도 있지만 실제로 해보면 아무런 값도 나오지 않을 것이다. NULL은 특수하기 때문에 SQL에서도 따로 찾는 조건이 있는 것 같다. IS NULL 이라는 연산자를 사용해야지만 정확한 결과를 얻을 수가 있다. SELECT *  FROM 학생 WHERE 이름 IS NULL;

결론

이제 GROUP BY와 HAVING, ORDER BY만 알면 기본적인 문법은 모두 끝난다. 하지만 GROUP BY는 꽤 특수해서 나중에 복수 행 함수 쪽 다룰때 같이 얘기를 하는게 좋겠고 3번째 내용에선 ORDER BY와 이 문법이 행해지는 순서에 대해서 얘기해볼까 한다.