티스토리 뷰
[Oracle] Query문을 작성해 보자! (4) - Where 조건문의 다양한 연산자 ( AND/ OR / IN / LIKE / BETWEEN / NOT )
Chokeys 2023. 7. 8. 11:02
조건문에 쓰이는 연산자들이 꽤 많아 따로 정리해야 할 것 같아 글을 작성한다. 대표적으로 AND, OR, IN, LIKE, BETWEEN, NOT 연산자들이 존재하고, 각각 어떻게 사용하는지 쿼리문과 그림을 보면서 정리해보자.
[기본 테이블]
[비교 연산자]
연산자 | 의미 |
= | 같다 |
! =, ^ = , <> | 같지 않다 |
> | 크다 |
< | 작다 |
>= | 크거나 같다 |
<= | 작거나 같다 |
[논리 연산자]
연산자 | 의미 |
AND | 모든 조건이 참일때, 참인값을 반환 |
OR | 모든 조건 중 하나라도 참일 때, 참인 값을 반환 |
NOT | 조건과 반대되는 결과를 반환 |
[기타 연산자]
연산자 | 의미 |
LIKE | 문자 패턴과 일치하는 값을 반환 |
IN | 한 컬럼 내에서 주어진 값 중 하나라도 참이면 값을 반환 |
BETWEEN | 해당하는 조건의 범위 값을 반환 |
위에 적은 3가지가 연산자들의 종류다. 밑에는 예시와 함께 정리 했는데 순서가 뒤죽박죽인점은 참고 바란다.
(사실 글 쓰다가 연산자에도 종류가 있다는걸 알았다...)
1. AND
AND 연산자는 '그리고' 라는 뜻으로 사용되어 조건1 과 조건 2 모두 만족하는 데이터만 조회해준다.
SELECT * FROM MEMBER3 WHERE AGE >= 30 AND REGION = '부산광역시';
" SELECT * FROM [테이블 명] WHERE [조건 1] AND [조건 2] "
나이가 30 이상이면서 지역이 부산광역시인 데이터만 조회가 되었다.
2. OR
OR 연산자는 '또한'이라는 뜻으로 사용되어 조건1과 조건2 둘 중 하나만 참이더라도 해당하는 데이터를 조회해주는 연산자이다.
SELECT * FROM MEMBER3 WHERE AGE >= 30 OR REGION = '부산광역시';
" SELECT * FROM [테이블 명] WHERE [조건 1] OR [조건 2] "
위에 AND조건문에서 AND를 OR로 바꿨을 뿐인데, 훨씬 많은 데이터가 조회되는것을 확인할 수 있다.
3. IN
IN연산자는 or조건 여러개가 한 그룹으로 묶여있는 형태이다. 그 중 하나라도 참이면 조건에 맞는 데이터를 조회한다.
SELECT * FROM MEMBER3 WHERE REGION IN ('부산광역시', '경상남도');
" SELECT * FROM [테이블 명] WHERE [컬럼명] IN [조건 1, 조건 2] "
컬럼안에 조건의 값이 하나라도 있으면 해당하는 데이터를 조회해준다.
SELECT * FROM MEMBER3 WHERE REGION IN ('부산광역시' , '경상남도' ) AND AGE >= 30 ;
" SELECT * FROM [테이블 명] WHERE [컬럼명] IN [조건 1, 조건 2] AND [컬럼명] >= [조건3]; "
이렇게 IN 조건에 AND 연사자를 붙여서 조건을 추가로 입력할 수도 있다.
4. LIKE
LIKE 연산자는 문자패턴과 일치하는 데이터를 조회해준다.
■ % : 0개 이상의 문자를 나타낸다. (글자 수 제한 X)
ex) 고양이% => 고양이로 시작하는 모든 글자를 조회한다. (고양이 사료, 고양이 장난감, 고양이 카페 고양이다냥..)
%고양이 => 고양이로 끝나는 모든 글자를 조회한다. ( 검은 고양이, 살아있는 고양이, 장화신은 고양이.. )
■ _ : 한 개의 문자를 나타낸다. (글자 수 제한 O)
ex) 경_ => 경으로 시작하는 2글자 조회(경찰, 경주, 경매..)
정__ => 정으로 시작하는 3글자 조회(정관장, 정수리, 정강이...) 글자수를 정해서 조회한다.
SELECT * FROM MEMBER3 WHERE ID LIKE 'a% ' ;
" SELECT * FROM [테이블 명] WHERE [컬럼명] LIKE '값%' or '%값' or '값_' or '_값' "
ID 컬럼에 a가 포함된 데이터 값들을 조회하고
SELECT * FROM MEMBER3 WHERE NAME LIKE '%귀신';
NAME 컬럼에서 귀신으로 끝나는 글자들의 데이터를 조회하고
SELECT * FROM MEMBER3 WHERE REGION LIKE '%광역시%';
REGION 컬럼에서 광역시가 포함된 모든 데이터 조회할 수도 있다.
SELECT * FROM MEMBER3 WHERE NAME LIKE '____';
저렇게 ---- 4개를 입력하면 NAME컬럼에 4글자로된 값들만 찾아서 조회해준다. 이렇게 글자수를 정해서도 원하는 데이터를 조회할 수 있다.
( '--귀신' 이렇게 적으면 마지막에 귀신이라는 글자를 포함한 4글자의 데이를 조회해준다.)
[ 추가 ]
SELECT * FROM MEMBER3 WHERE ID LIKE '%a__%';
%a__% 이렇게 적으면 ID 컬럼에 a가 포함되면서 글자수가 3개인 값들의 데이터만 보여준다. (근데 이렇게 적으니깐 세자리 글자랑 네자리 글자 다 조회해주던데.... 몇번 다시 해봐야겠다)
4-1. ESCAPE 식별자
ESCAPE 식별자와 LIKE 연산자를 같이 쓰면 문자에 ' % ', ' _ ' 등 특수문자가 포함된 문자열을 조회가 가능하다.
이렇게 REGION 컬럼 몇군데 _를 추가해 보았다. ESCAPE 식별자와 LIKE 연산자를 써서 저 부분의 데이터만 조회해보자.
SELECT * FROM MEMBER3 WHERE REGION LIKE ' % \ _ % ' ESCAPE ' \ ' ;
그림을 보면 알겠지만 이렇게 ESCAPE 식별자를 쓰면 ' \ ' 뒤에 있는 특수기호를 문자로 인식하여 데이터를 조회해준다. 꼭 \일 필요는 없고 저자리에 * , $ , r 등 아무 문자나 넣어도(거의 모든 문자..) 문자로 인식할 수 없는 친구들을 문자로 인식하여 조회해준다.
5. BETWEEN
BETWEEN 연산자는 값1 이상 값2 이하인 데이터들을 조회해준다.(즉, 해당하는 범위의 값)
숫자와 날짜값의 범위를 지정하여 그 사이에 있는 값들만 조회하고 싶을 때 유용하게 쓰인다. 꼭 숫자값이 아니라 숫자값이 문자로 저장 되어있더라도 일정하게 저장되어 있다면 조회가 가능하다('10', '20', '30' 이렇게 문자로 되어있어도.. )
5-1. 숫자 범위
SELECT * FROM MEMBER3 WHERE AGE BETWEEN 20 AND 30 ;
"SELECT * FROM [테이블 명] WHERE [컬럼명] BETWEEN 숫자 or 날짜값 1 AND 숫자 or 날짜값 2 "
SELECT * FROM MEMBER3 WHERE AGE BETWEEN 20 AND 40;
각 숫자들의 범위 안에있는 값들만 조회해준다.
5-2. 날짜 범위
SELECT * FROM MEMBER3 WHERE REGDATE BETWEEN TO_DATE ('2023-06-01', 'YYYY-MM-DD' ) AND TO_DATE('2023-06-20','YYYY-MM-DD');
날짜는 TO_DATE(' 2023 - 06 - 01 ' , ' YYYY - MM - DD ') 이렇게 형변환을 해서 문자값으로 바꿔준 뒤 범위값을 구해줘야한다.
SELECT * FROM MEMBER3 WHERE REGDATE BETWEEN TO_DATE (' 2023-06-01','YYYY-MM-DD' ) AND TO_DATE('2023-06-26','YYYY-MM-DD');
날짜를 6월 20일에서 26일로 바꿔주었다. 이러면 6월 1일 ~ 6월 26일 사이의 데이터가 조회되어 26일에 해당하는 행이 있어야 하는데 보이지 않는다. why? 여기서 6월26일 까지는 시간대가 00:00:00을 말하기 때문에 0.1초라도 넘어가면, 해당 날짜는 26일 이후로 인식되어 조회를 하지 않는다. 그래서 뒤에 +0.99999를 적어주어 시간까지 같이 계산하여 조회해야한다.
SELECT * FROM MEMBER3 WHERE REGDATE BETWEEN TO_DATE('2023-06-01','YYYY-MM-DD') AND TO_DATE('2023-06-26','YYYY-MM-DD')+0.99999;
쿼리문 뒤에 +0.99999를 적어주면 시간도 같이 인식하여 해당하는 날짜의 값도 포함시킨 데이터가 조회된다.
5-3. 문자 범위
문자 범위를 구하는게 약간 애매하긴한데 예를들면 이름이 'ㄱ' 으로 시작하는 사람부터 'ㄷ' 으로 시작하는 사람들 까지만 조회하고 싶을 수가있다.(ㄱ~ㄷ) 이때는 한글이나 영어 둘다 마찬가지로 어순을 생각해 가장 끝에 오는 글자형태로 적어주면된다.
SELECT * FROM MEMBER3 WHERE NICKNAME BETWEEN '가' AND '딯';
" SELECT * FROM [테이블 명] WHERE [컬럼명] BETWEEN '가' AND '딯' "
가갸거겨... 가장 맨 앞이 "가" 이고, 다댜더뎌...드디 "디"가 제일 마지막이다. 디 밑에 "ㅎ" 받침 까지 붙여주면 ㄷ에서 가장 마지막 글자인 "딯"이 만들어진다. 그러면 ㄱ ~ ㄷ 사의의 글자들만 조회가 가능해진다.
6. IS NULL / IS NOT NULL
쿼리문을 통해 컬럼의 값이 null인 행을 찾아 조회하거나, 그 반대인 null이 아닌 데이터를 조회할 수 있다.
먼저 나이 필드에 임의로 NULL값을 몇군데 주었다.
SELECT * FROM MEMBER3 WHERE AGE IS NULL;
"SELECT * FROM [테이블 명] WHERE [컬럼명] IS NULL "
요렇게 AGE 컬럼 중 NULL값만 찾아서 데이터를 불러온다.
※ 주의! NULL은 문자나 숫자들처럼 연산기호(>, =) 써서 결과를 불러오는 것이 아니다. AGE = NULL 이렇게 적는 거 아니다. IS를 써서 "NULL"값을 구해야한다.
SELECT * FROM MEMBER3 WHERE AGE IS NOT NULL;
반대로 IS NOT NULL을 조건으로 적으면 AGE 컬럼에서 " NULL" 값이 아닌 데이터들만 조회하여 우리에게 보여준다.
6-1. 부정 연산자의 사용
부정 연산자 "같지 않다" 를 나타내는 NOT을 다른 비교 연산자, 기타 연산자들과 같이 쓰면 좀 더 유연하게 데이터를 조회할 수 있다.
SELECT * FROM MEMBER3 WHERE NOT AGE > 30 ;
" SELECT * FROM [테이블 명] WHERE NOT [컬럼명] > '조건' "
AGE < 30 이렇게 조건을 적는거랑 사실 별 차이는 없지만, 알고 있으면 분명 도움될것이다. 이것 말고도 아마 활용할 수 있는 방안이 꽤 있을것이다.
SELECT * FROM MEMBER3 WHERE NOT AGE BETWEEN 20 AND 30 ;
NOT를 BETWEEN과 함께 적게되면 해당하는 범위가 아닌 범위 밖에 있는 값들을 구할 수 있다. 아주 유용하게 쓰일거 같다.
이렇게 조건절과 연산자에 대한 글을 마쳤다. 인터넷을 검색해보면 이것보다 수많은 쿼리문과 예시들이 존재한다. 하지만 내 머리로는 100% 다 알지 못하니 기본이라도 제대로 공부하자.
반복숙달 하다보면 나도 잘 할 수 있지 않을까? 라는 생각을 하며 다음글을 준비해야겠다.
어제는 모각코 모임에 나가서 블로그를 썼다. 내 포트폴리오를 보여드리고 피드백도 받았다. 도움이 많이 된거같다. 다른 멤버님들은 대부분 취업을 하셨는데... 나도 얼른 열심히 해서, 취업 후 모임에 나가고 싶다. 좀 더 열심히 공부해보자. 으쌰!!
[도움주신 사이트]
Truman Show
딥러닝을 공부하는 블로그입니다.
truman.tistory.com
'분류 전체보기' 카테고리의 글 목록
끊임없이 제 자신을 계발하는 개발자입니다👨🏻💻
yermi.tistory.com
SQL 특징, SQL의 종류, Select 문, Select 산술연산, as 별칭 부여, || 연결 연산자, where 조건절, in, between,
---------------------------SQL---------------------------------- --SQL 이란 --Staructured QUERY LANGUAGE(구조화된 질의언어) --데이터베이스를 대상으로 질의를 수행할 수 있다. --데이터의 조회, 데이터의 추가, 데이터
cmelcmel.tistory.com
'SQL' 카테고리의 다른 글
- Total
- Today
- Yesterday
- h2 db
- 오라클 데이터 삭제
- Where
- 오라클 데이터 추가
- for 구구단
- 오라클 시스템 권한
- 파이썬
- 윈도우11 사용자 계정이름 변경
- Database Express Edition(XE)
- 오라클 데이터 수정
- oracle
- SQL Developer
- CURRVAL
- 오라클 인스톨 rollback
- 파이썬 리턴 값 주석
- 오라클 XE 설치에러
- Python
- 중첩 서브 쿼리
- 오라클 SYSTEM 계정
- 테이블 명 변경
- NEXTVAL
- 오라클
- 오라클 CONNECT
- 반목분
- for while 차이
- 합성 연산자
- SQL
- 오라클 ROLE
- 다중 컬럼 서브 쿼리
- 오라클 RESOURCE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |