sum()외에  GROUP BY와 함께 사용되는 함수


함수명 

설명 

AVG 

평균을 구한다. 

MIN 

최소값을 구한다. 

MAX 

최대값을 구한다. 

COUNT

행의 개수를 센다. 

COUNT(DISTINCT) 

행의 개수를 센다(중복은 1개만 인정) 

STDEV 

표준편차를 구한다. 

VARIANCE 

분산을 구한다. 


한번빌릴때 평균적으로 책을 얼마나 빌리는지 알아보겠습니다.


1
select id as "회원",avg(num) as "평균대출권수" from buy group by id; 
cs



쿼리문에 적은 as는 별칭은 정해준것입니다. id 의 별칭은 회원 평균을구한num의 별칭은 평균대출권수로 정해준 것입니다.

한번빌릴때 몇권씩 빌리는지 결과값이 나오는 것을 볼 수 있습니다.

여기서 aa의 결과값은 보기 힘듭니다. 저런 소수점을 조절하고 싶으면 CAST()함수를 사용하면 됩니다.



1
select id as "회원",cast(avg(num) as number(5,3)) as "평균대출권수" from buy group by id; 
cs



보이는 것과 같이 소수 3번째 자리까지 나타나는 것을 볼 수있다.





GROUP BY 


테이블 내의 데이터를 그룹별로 구분하여 통계적인 결과를 내기위해 사용합니다.



먼저 GROUP BY형식부터 알아보겠습니다.



SELECT 컬럼명1,SUM(컬럼명2) FROM 테이블명 GROUP BY 컬럼명1;




여기서 컬럼명1 에는 기준이되는 컬럼명을 넣어주셔야합니다. 그리고 컬럼명2에는 계산 가능한 값을 넣어주셔야 합니다.

도서관을 예를 들면 도서관 회원 번호가 있을것 입니다. 도서관 회원이 한번에 책을 2개 빌릴 수도 있고, 3개 빌릴수도 있고 1개 빌릴수도 있습니다.

그럴 때 회원 번호가 컬럼명1이고 빌린 갯수가 컬럼명 2라고 생각하시면됩니다. 


먼저 테이블을 만들고 데이터까지 넣어보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
create table buy(
id varchar(20),
num varchar(20));
 
insert into buy VALUES('aa',1);
insert into buy VALUES('aa',1);
insert into buy VALUES('bb',6);
insert into buy VALUES('cc',5);
insert into buy VALUES('dd',3);
insert into buy VALUES('aa',8);
insert into buy VALUES('cc',22);
insert into buy VALUES('dd',9);
cs




그리고 select를 해보시면 밑의 결과를 볼 수 있습니다.




보이시는 것과 같이 겹치는 것들이 여러개 있습니다.

aa가 빌린 책의 총합은 num인데 num을 다더하면 10권입니다. 마찬가지로 bb는 6권, cc는 12권, dd는 27권 입니다.

이런것을 좀 더 간편하게 보기 위해 GROUP BY를 사용합니다.


1
select id,sum(num) from buy group by id; 
cs


보이시는 것과 같이 num 안에 있는 데이터들이 ID를 기준으로 다 더해져서 결과 값이 나온 것을 볼 수 있습니다.

aa회원이 몇권을 빌렷는지 bb회원이 몇권을 빌렷는지 알기쉽게 정리해줍니다.

'DataBase' 카테고리의 다른 글

[Oracle] INNER JOIN  (0) 2018.11.12
[Oracle]집계함수  (0) 2018.11.12
[Oracle]테이블 내용을 조회하는 SELECT  (0) 2018.11.11
[oracle]데이터 사전  (2) 2018.11.07
[oracle]테이블의 모든 데이터를 제거하는 TRUNCATE TABLE  (0) 2018.11.07


SELECT

테이블 내의 원하는 정보를 추출하는 명령어



형식



select 컬럼명 from 테이블 이름 where 조건







테이블 검색하기 

1
SELECT * FROM emp;
cs


EMP라는 테이블의 데이터가 나오는 것을 볼 수있습니다. 

쿼리문에서 * 의 뜻은 모든 컬럼을 의미하는 것 입니다.


그러면 테이블 안에서 empno와 ename 의 데이터만 검색해보겠습니다.

1
select empno,ename from emp;
cs



empno와 ename의 내용만 나오는 것을 확인할 수 있습니다.



다음은  where 문까지 사용하여 empno가 7777인 행만 검색 해보겠습니다.

1
select * from emp where empno=7777;
cs


empno가 7777인 행만 나오는 것을 확인할 수 있습니다. 

만약 where 문을 두개 쓰고싶으면 관계연산자(and, or, not )를 쓰고 조건문을 또 써주시면 됩니다.!






BETWEEN


형식



SELECT * FROM 테이블명 WHERE 컬럼명BETWEEN 값 AND 값;





1
select * from emp where empno>=7787 and empno <=7888;

cs


1
select * from emp where empno between 7787 and 7888;
cs


두개의 쿼리문을 다 사용해 봅시다. 결과가 같은것을 볼 수 있습니다.



보이는 것과 같이 BETWEEN 은 ~이상 ~이하의 값을 조회한다.

여기서 empno는 연속적인 값을 가지는 숫자이다. between은 연속적인 값 밖에 조회하지 못한다.

그럼 연속적인 값이 아닌 이산적인 값을 위해서는 무었을 써야할까?






IN


형식



SELECT * FROM 테이블명 WHERE 컬럼명 IN('데이터','데이터'....);





1
select * from emp where job in ('CLARK','MANAGER'); 
cs

1
select * from emp where job='CLARK'or job='MANAGER'
cs


이 두개의 쿼리문 역시 사용하면 똑같이 나오는 것을 볼 수 있습니다.


숫자가 아닌 문자일 경우 연속된 값이 아니기 때문에 between 을 사용하지 못하지만

in 을 사용하게되면 좀더 간단하게 찾을 수 있다.


LIKE


형식



SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '문자%';





이번에는 문자열 내용을 검색해 볼꺼다. 


1
select * from emp where ename like 'A%'
cs


위의 조건은 이름의 맨 앞 글자가 'A'이고, %는 뒤에는 어떤 문자가 있어도 상관이 없다는 말이다. 



ORDER BY


형식



SELECT * FROM 테이블 명 ORDER BY 컬럼명 ASCorDESC;





결과물에 영향을 미치지는 않지만 결과가 출력되는 순서를 조절하는 구문이다.


1
select * from emp order by empno; 
cs


보이는 것과 같이 empno를 중심으로 오름차순으로 정렬된 것을 볼수있다.

order by에는  asc(오름차순), desc(내림차순) 가있는데 기본적으로 오름차순으로 정렬이된다.



DISTINCT


형식



SELECT DISTINCT 컬럼명 FROM 테이블 명 ;






중복된 것을 하나만 남기는 명령어입니다.


1
select distinct job from emp; 
cs


보이는 것 처럼 중복되는 직업을 제외하고 나타내었



+ Recent posts