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;
'⁂ Oracle DB > : 기본 익히기' 카테고리의 다른 글
[Oracle] #3-2 시퀀스 (0) | 2022.08.22 |
---|---|
[Oracle] #3-1 sort정렬과 Alter문 (0) | 2022.08.22 |
[Oracle] #2-2 기초 SQL문 - select, as, commit, rollback (0) | 2022.08.19 |
[Oracle] #2-1 기초 SQL문 : 테이블 생성하기 (0) | 2022.08.19 |
[Oracle] #1-4 작업환경 구축하기 2 (Oracle SQL Developer 설치) (0) | 2022.08.18 |