..열심히 공부하세../오라클

[05] 오라클 함수

댄스댄스 2012. 5. 10. 14:35

 

-----------------------------------------------------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