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이 아닌 값이죠.
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 #6, 오라클함수(집계함수) (0) | 2019.02.16 |
---|---|
[Oracle] 오라클 #5 SELECT문 - distinct, case문 (0) | 2019.02.09 |
[Oracle] 오라클 #3 SELECT 문(1) - select 문이란? (0) | 2019.02.09 |
[Oracle] 오라클 #2 SQL 자료형 (0) | 2019.02.06 |
[Oracle] ORACLE DB의 기본 정보 (0) | 2019.02.03 |