본문 바로가기
Backend/Oracle DB

[Oracle DB] WHERE 조건절, 연산자

by howdyoon 2023. 3. 11.


WHERE 조건절

INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문

- 형식
select 컬럼명1, 컬럼명2 ... from 테이블명 where 조건절;

 

- where 절 문제

--문1) 국어점수가 50점이상 행을 조회하시오  
select uname, kor
from sungjuk
where kor>=50;

--문2) 영어 점수가 50점미만 행을 조회하시오  
select uname, eng
from sungjuk
where eng<50;  

--문3) 이름이 '대한민국' 행을 조회(출력)하시오
select uname, kor, eng, mat
from sungjuk
where uname='대한민국';

--문4) 이름이 '대한민국' 아닌 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where uname != '대한민국'; --좌우가 서로 같지 않다

select uname, kor, eng, mat
from sungjuk
where uname <> '대한민국'; --좌우가 서로 같지 않다

--문5) 국어, 영어, 수학 세과목의 점수가 모두 90이상 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where kor>=90 and eng>=90 and mat>=90;

--문6) 국어, 영어, 수학 중에서 한과목이라도 40미만 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where kor<40 or eng<40 or mat<40;

--문7) 국어점수가 80 ~ 89점 사이 행을 조회하시오
select uname, kor
from sungjuk
where kor>=80 and kor<=89;

--문8) 이름이 '무궁화', '봉선화'를 조회하시오 
select uname
from sungjuk
where uname='무궁화' or uname='봉선화';

-- 문9) 국, 영, 수 모두 100점 아닌 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where kor=100 and eng=100 and mat=100; --국영수 모두 100점 행 조회

select uname, kor, eng, mat
from sungjuk
where not (kor=100 and eng=100 and mat=100);

 

연산자

1) 비교 연산자

연산자 의미 예시
= 같음 where col = 10
< 작음 where col < 10
<= 작거나 같음 where col <= 10
> where col > 10
>= 크거나 같음 where col >=10

2) 부정 비교 연산자

연산자 의미 예시
!= 같지 않음 where col != 10
^= 같지 않음 where col ^= 10
< > 같지 않음 where col <> 10
not 컬럼명 = 같지 않음 where not col = 10
not 컬럼명 > 크지 않음 where not col > 10

3) SQL 연산자

연산자 의미 예시
BETWEEN A AND B A와 B의 사이(A, B 포함) where col between 1 and 10
LIKE '비교 문자열' 비교 문자열을 포함 where col like '대한%'
where col like '%민국'
where col like '%한민%
where col like '대_민%'
IN (LIST) LIST 중 하나와 일치 where col in (1, 3, 5)
IS NULL NULL 값 where col is null

4) 부정 SQL 연산자

연산자 의미 예시
NOT BETWEEN A AND B A와 B의 사이가 아님(A, B 미포함) where col not between 1 and 10
NOT IN (LIST) LIST 중 일치하는 것이 없음 where col not in (1, 3, 5)
IS NOT NULL NULL 값이 아님 where col is not null

5) 논리 연산자

연산자 의미 예시
AND 모든 조건이 TRUE여야 함 where col > 1 and col < 10
OR 하나 이상의 조건이 TRUE여야 함 where col = 1 or col = 10
NOT TRUE면 FALSE이고 FALSE이면 TRUE where not col > 10

 

- where 조건절 연산자 문제

alter table sungjuk rename column korea to kor;
select *from sungjuk;

[between A and B] 연산자 - A부터 B까지
-- 국어점수가 80~89점 사이 행을 조회하시오
select uname, kor
from sungjuk
where kor between 80 and 89;

[in] 연산자 - 목록에서 찾기
-- 이름이 '무궁화', '봉선화'를 조회하시오
select uname 
from sungjuk
where uname in ('무궁화', '봉선화');

-- 국어점수 10, 30, 50점을 조회하시오
select uname, kor
from sungjuk
where kor in (10, 20, 30);

[LIKE] 연산자
- 문자열 데이터에서 비슷한 유형을 검색할 때
- % 글자갯수와 상관없음
- _ 글자갯수까지 일치해야 함

select uname  
from sungjuk
where uname='대한민국';

--문1) 이름에서 '홍'으로 시작하는 이름을 조회하시오
select uname
from sungjuk
where uname like '홍%';

--문2) 이름에서 '화'로 끝나는 이름을 조회하시오
select uname
from sungjuk
where uname like '%화';

--문3) 이름에 '나'글자 있는 이름을 조회하시오
select uname
from sungjuk
where uname like '%나%';

--문4) 두글자 이름에서 '화'로 끝나는 이름을 조회하시오
select uname
from sungjuk
where uname like '_화';

--문5) 이름 세글자 중에서 가운데 글자가 '나' 있는 행을 조회하시오
select uname
from sungjuk
where uname like '_나_';

select count(uname)
from sungjuk
where uname like '_나_';

--문6) 제목+내용을 선택하고 검색어가 '파스타' 일때
where subject like '%파스타%' or content like '%파스타%

--문7)국어 점수가 50점 이상인 행에 대하서 총점(tot)과 평균(aver)을 구하시오
select * from sungjuk where kor>=50

update sungjuk
set tot=kor+eng+mat, aver=(kor+eng+mat)/3
where kor>=50;

[NULL] - 비어 있는 값
-- 총점의 갯수를 구하시오
select count(tot) from sungjuk; --null값은 카운트 되지 않음

-- 총점에 NULL이 있는 행의 갯수를 구하시오
select count(*) from sungjuk where tot=null; --null값 확인 못함. 0
select count(*) from sungjuk where tot is null; --null값 확인해야 하는 경우. 5

-- 평균에 비어있지 않은 행의 갯수를 구하시오 (null이 아닌 값)
select count(*) from sungjuk where aver is not null;

--문8) 비어있는 총점과 평균을 모두 구하시오
update sungjuk
set tot=kor+eng+mat, aver=(kor+eng+mat)/3
where tot is null or aver is null;

'Backend > Oracle DB' 카테고리의 다른 글

[Oracle DB] 시퀀스, SYSDATE 함수  (0) 2023.03.11
[Oracle DB] SORT 정렬  (0) 2023.03.11
[Oracle DB] ALTER  (0) 2023.03.11
[Oracle DB] SQL 기초: select, as, count, commit, rollback  (0) 2023.03.10
[Oracle DB] SQL 기초 : 테이블 생성  (0) 2023.03.10