[Oracle] 오라클 #4 SELECT문(2) - WHERE 절과 그 친구들(between, in, like, null)

where절

select * from테이블 where절;

조건을 제시한 뒤 조건을 만족하는 레코드만을 가져오는 역할

주로 컬럼값을 대상으로 비교연산 or 논리연산을 통해 해당 레코드를 가져올지 판단.


ex ) 결과테이블, Result Table, 결과셋, ResultSet

select first,last 

from tblname         1. 테이블 원본을 취한다.

where gender = 'f';  2. 조건을 만족하는 레코드만 존재하는 테이블을 취한다.

select * from tblinsa where buseo = '인사부';  >> buseo 컬럼이 '인사부'인 레코드(행)를 모두 가져오기.


next.


꿀팁) 웹페이지에서 회원로그인 과정은 where 절을 이용하는 과정이다.!!!

ex) select * from tblCustomer where id = '아이디' and pw = '비밀번호';


>> 입력받은 id와 pw를 통해 회원인증, 로그인 기능을 구현하는데 사용된다.!!


next.


비교연산자에 사용되는 자료형

1. 숫자형

2, 문자형 -> str1.compareTo(str2) : 문자코드값 비교


select * from tblname where height>160;                    1. height 컬럼의 값이 160보다 큰 레코드들

select * from tblname where last>'마';                        2. last 컬럼의 문자코드값이 '마' 보다 큰 레코드들

select * from tblname where first<'재석';                     3. first 컬럼의 문자코드값이 '재석' 보다 큰 레코드들 

select * from tblinsa where ibsadate >='1999-08-01';     4. ibsadate(날짜데이터) 가 1999년 8월 1일 이후의 레코드들.

** 위의 날짜형식은 문자열 형태에서 자동타입변환이 가능하다.(꿀팁)


next


where 절과 관계된 구문들

[between]


- where절에서 사용(조건으로 사용)

- 범위 조건 지정

- 컬럼명 between 최솟값 and 최댓값

- 가독성 향상

최근 개발자 사이에서 연산의 속도문제(쿼리속도) 때문에 between문 사용을 자제하는 것이 좋다는 말이 행간에 돌고있습니다. 오히려 비교연산자(<, >)를 사용하는 것이 속도 면에서 더 빠른 결과를 낸다고 합니다. 하지만 저와 같은 비전공자 개발자나 신입개발자들께서는 이런 문제를 아직은 신경쓰지 않으셔도 좋을 것 같습니다. 어떻게 해서든 더 빨리 쿼리에 익숙해지고 SQL을 쉽게 짜는 것이 목표라면 아!직!은! 신경쓰지 않으셔도 좋을것 같다고 생각합니다.^^

예제 ) 

--몸무게가 60이상 80이하

select * from tblname where weight between 64 and 80;


--문자비교

select * from employees where first_name between 'D' and 'G';


-- 날짜비교

select * from tblinsa where not ibsadate between'1998-01-01' and '1998-12-31';


next.


[in]


- where 절에서 사용.(조건)

- 열거형 조건 비교(제시값중에서 하나라도 만족하면 만족)

- 컬럼명 in(열거형값)


select * from tblDiary where weather ='흐림' or weather ='비'; 

>> 해석해보자면 날씨가 흐리거나 비인 날의 레코드(일기)를 모두 가져와라.


*** 근데 이렇게 해보면 어떨까요?? >> 가 오거나 이 오거나 구름이 꼇거나 등등등.. 이렇게 조건이 추가된다면??

select * from tblDiary where weather ='흐림' or weather ='비' or weather = 구름 or 등등등...;

이렇게 추가하실 건가요...? >> 정말 비효율적입니다. 그래서 in 절을 사용하는 것입니다.


ex)  

select * from tbldiary where weather in ('흐림','비', 등등등);

>> 이렇게 in 절안에 검사할 조건값을 넣어서 괄호안에 있는 값이 하!나!라도 존재한다면 해당 레코드를 반환하게 됩니다.


next.


[like]


- where 절에서 사용(조건으로사용)

- 패턴비교(특정한 패턴을 가지는 문자열 검색)

- 문자형을 대상으로 사용(숫자,날짜 적용X)

- 정규표현식과 유사

- 컬럼명 like '패턴문자열'


패턴문자열 구성요소

1. _ : 임의의 문자 1개

2. % : 임의의 문자 0개~ 무한대


select * from tblinsa where name like '이__';  >> name 컬럼값이 3글자이고 '이' 로 시작하는 모든 레코드를 가져와라. 

select * from tblinsa where name like '_길_';  >> name 컬럼값이 3글자이고 가운데 글자가 '길'인 모든 레코드를 가져와라.

select * from tblinsa where name like '%길%';  >> name 컬럼값이 몇글자인지는 모르지만!. 중간에 '길' 자가 들어가는 모든 레코드를 가져와라. 


>> 즉, 조건값에 패턴이 존재할때 사용하는 것입니다.


like 절 사용 예)

우리가 흔히 이메일 검사를 하는 경우가 있습니다. 

어느 경우가 이메일 형식일까요...?

1. oracle

2. oracle@google.com

당연히 2번이라고 다들 답하셨겠지요? >> 이부분에서 패턴이 존재합니다. '@'라는 값이 있느냐 없느냐로 결정이 나지요.

이렇게 존재하는 패턴을 통해 해당 패턴에 해당하는 레코드를 골라내기 위해서 존재하는 like절 입니다.!


next


[null]

- 자바의 null과 유사한 표현

- 비어있는 컬럼의 상태

- SQL은 null은 연산의 대상이 될 수 없다. (피연산자 자격 X) >> select * from 테이블 where name = null ( X ) 


null조건

- where절에서 사용.

ex )

select * from tblcountry where population is null;  >> 이런식으로 is키워드를 붙여서 null 판명을 한다.


그렇다면 null이 아닌값은 어떻게 하나요..??


>> not 키워드를 붙인다.

ex )

select * from tblcountry where population is not null; >> 간단히 null이 아닌 값이죠.













댓글

Designed by JB FACTORY