⁂ Oracle DB/: 기본 익히기

[Oracle] #2-3 Where 조건절(연산자, between, in, like)과 Null값

김갱환 2022. 8. 19. 17:59

1. Where 조건절

 

 where 조건절은 sql에서 가장 기초적으로 쓰이는 문법이다.

 만약 한 반의 성적의 평균 중에서 남자 친구들의 평균과 여자 친구들의 평균을 따로 분리해서 구하고 싶다고 생각해보자.

 이처럼 조건을 만족하는 행들에 대해서 데이터값을 조작하고 싶을 때 사용하는 조건절이다.

 where 조건절은 조건에 만족하는 레코드만 대상으로 조회(select), 수정(update), 삭제(delete)를 할 수 있다.

 (insert에는 쓰이지 않는다)

 

 

2-1. Where 조건절에서 사용하는 연산자

 

 아래는 데이터 베이스에서 사용하는 여러 연산자에 대한 설명들이다.

 

1) 비교연산자

  ● >  >=  <  <= 
  ● != <> 같지않다
  ● = 같다

 

 2) 논리연산자 : 그리고 and,  또는 or, 부정연산자 not
  ● 국어점수 50~59 : kor>=50 and  kor<=59
  ● where not(kor=100 and eng=100 and mat=100);

 

 3) between A and B : A에서 부터 B사이
  ● kor between 50 and 59

 

 4) in 연산자 : 목록에서 찾기
  ● uname='홍길동' or uname='무궁화'
  ● uname in ('홍길동','무궁화')

    : 이름이 '홍길동', '무궁화'를 조회하시오.

 

2-2. 문제로 where 조건절 익숙해지기

 

문1) 국어점수가 50점이상 행을 조회하시오

select uname, kor
from sungjuk
where kor>=50;


문2) 영어 점수가 50점미만 행을 조회하시오

select uname, eng
from sungjuk
where eng<50;


문3) 이름이 '대한민국' 행을 조회(출력)하시오

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


문4) 이름이 '대한민국' 아닌 행을 조회하시오

select uname
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;
--where kor between 80 and 89;


문8) 이름이 '무궁화', '봉선화'를 조회하시오

select uname
from sungjuk
where uname='무궁화' or uname='봉선화';
--where uname in ('무궁화','봉선화');

 

문9) 국, 영, 수 모두 100점이 아닌 행을 조회하시오

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

 

 

3-1. Like 연산자

 

 지금까지 연산자는 특정한 값, 일치하는 값을 찾는 것에 집중했다면!

 like 연산자는 where 절 안에서 비슷한 유형을 찾아내는 연산자이다.

 % 와 _ 를 사용한다.

 % 는 글자 갯수와 상관이 없고, _는 글자갯수까지 일치해야한다.

 

  ● '홍'씨성을 검색 : uname like '홍%'
  ● '홍'으로 끝나는 검색 : uname like '%홍'

  ● '홍'글자 있는것 검색 : uname like '%홍%'
  ● 반드시 두글자 중에서 홍으로 시작 : 홍_

 

 이 연산자도 문제를 풀면서 알아가보자.

 

 

3-2. Like 연산자 문제

문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 '_나_';

 

문6) 검색창에서 제목 + 내용을 선택하고 검색어가 '파스타' 일 때

select title, tbody 
from searchN
where title like '%파스타%' or tbody 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;

select * from sungjuk;

 

 

4. NULL값

 

 null 값은 말 그대로 값이 없는 상태이다.

 그래서 null을 하나의 변수처럼 생각하고 코드를 작성하면 sql문에서는 인식을 하지 못한다.

 예를 들어 평균 칼럼에 들어있는 여러 데이터 중 null 값을 찾으려고 한다고 aver=null 라고 치면 아무것도 나오지 않는 것이다.

 

 null값을 구하려면 아래와 같은 코드를 사용한다.

  ● aver is null (null값을 확인해야 할 때)
  ● aver is not null (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 and aver is null;

select * from sungjuk;