[05] 오라클 함수
-----------------------------------------------------group by
- 동일한 내용의 칼럼끼리 묶어주는 기능
- 그룹을 지었을 경우 대표성을 가질만한 값(집계함수)이나
칼럼에 한해서 select할수 있다.
- group과 * 안 친하다
- 2차, 3차 그룹을 지을 수 있다.
select uname
from tb_sungjuk
group by uname
-----------------------------------------------------오라클 함수
- max() 칼럼가운데 가장 큰값
- min() 칼럼가운데 가장 큰값
- sum() 해당칼럼의 전체 합계
- avg() 해당칼럼의 전체 평균
- count() 레코드 갯수. 단 null값이 있는 칼럼은 제외
count(*) 전체레코드갯수 확인할 때 주로 사용한다.
select max(kor) from tb_sungjuk
select min(kor) from tb_sungjuk
select sum(kor) from tb_sungjuk
select avg(kor) from tb_sungjuk
select count(kor) from tb_sungjuk
select count(*) from tb_sungjuk
- upper() 대문자로 바꾸기
select upper(hakno) from tb_sungjuk
- lower() 소문자로 바꾸기
select upper(hakno) from tb_sungjuk
- substr() 문자열 자를때
index는 1부터 시작, 한글 1자
- length() 문자갯수
한글, 영숫자모두 1자 처리
- as 칼럼명, 테이블명에 대해서 별칭을 부여할 수 있다.
논리적테이블(재가공된 테이블)에서 부여된 칼럼명, 테이블명은
사용자가 접근해서 사용가능하다
select substr(hakno,3), hakno, length(hakno)
from tb_sungjuk
order by substr(hakno,3)
select substr(hakno,3) as str, hakno, length(hakno) as len
from tb_sungjuk
order by str
- ROUND() 반올림
select round(aver,1)
from tb_sungjuk -- 소수 첫째 자리까지 반올림
select round(tot,-1)
from tb_sungjuk -- 1의 자리, 10의 자리에서 반올림(절삭)
- to_char() 문자열로 형변환
SELECT regdt, TO_CHAR(regdt, 'yyyy-mm-dd')
FROM tb_sungjuk;
SELECT regdt, TO_CHAR(regdt, 'yyyy-mm-dd hh:mi:ss')
FROM tb_sungjuk;
SELECT regdt,
substr(TO_CHAR(regdt, 'yyyy-mm-dd hh:mi:ss'),12)
FROM tb_sungjuk;
- CASE 문
SELECT uname,aver,kor,hakno,
CASE hakno WHEN 'g1001' THEN kor+10
WHEN 'g1002' THEN kor+20
WHEN 'g1003' THEN kor+30
ELSE kor+50 END bonus
FROM tb_sungjuk
order by bonus
-----------------------------------------------------[예제]
문) 이름이 동일한 사람들끼리 국어점수,수학점수,영어점수 평균
select uname,avg(kor),avg(mat),avg(eng)
from tb_sungjuk
group by uname
select uname,
round(avg(kor),2) as k_avg,
round(avg(mat),2) as m_avg,
round(avg(eng),2) as e_avg
from tb_sungjuk
group by uname
--------------------------------------------------------
[서브쿼리]
- 자신의 테이블에서 데이터를 가공을 해서 자신의 테이블에서 검색하는 것
- 집계함수에서 나온 결과값을 () 묶어서 해석
[Join 조인]
- 두개의 테이블을 하나의 테이블로 합쳐서 꼭 한개의 테이블처럼 사용하는 것
-------------------------------------------------------[예제]
문) 우리반 학생들의 국어점수평균보다 낮은 학생들 검색
select *
from tb_sungjuk
where kor<(select avg(kor) from tb_sungjuk)
select count(*)
from tb_sungjuk
where kor<(select avg(kor) from tb_sungjuk)
select *
from tb_sungjuk
where kor<(select avg(kor) from tb_sungjuk)
and uname='개나리'
문) 학번 'g1002'의 합계점수보다 잘한 학생들 검색
select *
from tb_sungjuk
where tot >( select tot
from tb_sungjuk
where hakno='g1002' )
---------------------------------------------------having 조건절
- group by에 의해서 나온 레코드에 조건을 추가할때
문) 이름이 동일 것끼리 국어점수를 평균을 구한 후,
그 평균이 60점이상인 레코드 검색
select avg(kor)
from tb_sungjuk
group by uname
having avg(kor)>=60