데이터베이스 데이터 조작어(DML)
집계함수 검색, 조인 검색
집계함수 검색
내가 원하는 값들을 통계적으로 계산한 결과를 검색하기 위해 사용합니다.
열 함수(column function)라고도 하고 개수, 합계, 평균, 최대값, 최소값의 계산 기능을 제공합니다.
※ NULL 속성값은 제외하고 계산
집계 함수는 WHERE절에서는 사용할 수 없고 SELECT절이나 HAVING 절에서만 사용이 가능합니다.
숫자데이터에서만 사용 가능한 함수
SUM: 속성 값의 합계
AVG: 속성 값의 평균
모든 데이터에서 사용 가능한 함수
COUNT: 속성값의 갯수
MAX: 속성값의 최대값
MIN: 속성값의 최소값
1. 기본 집계 함수 검색
SELECT AVG(단가) FROM 제품;
제품 테이블에서 모든 제품의 단가 평균을 검색
SELECT SUM(재고량) AS 재고량 합계 FROM 제품 WHERE 제조업체 = '롯데';
제품 테이블에서 제조업체가 롯데인것만 속성명 재고량을 재고량 합계로 변경후 재고량을 합해서 검색
SELECT COUNT(고객아이디) AS 고객수 FROM 고객;
고객 테이블에서 고객이 몇명 등록이 되어있는지 검색하고 속성명 고객아이디를 고객수로 변경
※ 널 값은 제외하고 튜플을 세기 때문에 정확한 튜플의 수를 셀 때에는 속성명에 * (아스타리크)를 사용하거나 기본키 속성을 사용(기본키는 널값을 허용하지 않기 떄문에)
SELECT COUNT(DISTINCT 제조업체) AS '제조업체수' FROM 제품;
제품 테이블에서 속성명 제조업체를 제조업체수로 변경하고 튜플의 중복을 없애고 제조업체의 수를 검색
2. 그룹별 검색
SELECT [ALL | DISTINCT] 속성명 FROM 테이블명
[WHERE 조건]
[GROUP BY 속성명 [HAVING 조건]]
[ORDERBY 속성명 [ASC | DESC];
대괄호[] 안에 있는 키워드는 필요없으면 생략 가능
GROUP BY 키워드를 이용해 특정 속성의 값이 같은 튜플을 모아 그룹을 만들고 그룹별로 검색을 합니다. 그룹을 나누는 기준이 되는 속성을 지정하고 HAVING 키워드를 함께 이용해 그룹에 대한 조건을 작성합니다.
※그룹을 나누는 기준이 되는 속성을 SELECT 절에도 작성하는것이 좋음
그룹별 기본검색
SELECT 주문제품, SUM(수량) AS 총주문수량 FROM 주문 GROUP BY 주문제품;
주문 테이블에서 주문제품을 기준으로 속성명 수량을 총주문수량으로 변경하고 수량의 합계를 검색
SELECT 제조업체, COUNT(*) AS 제품수, MAX(단가) AS 최고가 FROM 제품
GROUP BY 제조업체;
제품 테이블에서 제조업체별로 제조한 제품의 갯수와 제품 중 가장 비싼 단가를 검색하되, 제품의 갯수는 제품수로 변경하고 가장 비싼 단가는 최고가 라는 이름으로 출력
그룹별 조건검색
SELECT COUNT(*) AS 제품수, MAX(단가) AS 최고가 FROM 제품
GROUP BY 제조업체 HAVING COUNT(*) >= 3;
제품 테이블에서 제품을3개 이상 제조한 제조업체별로 제품의 갯수와 제품 중 가장 비싼 단가를 검색
※집계 함수를 이용한 조건은 WHERE 절에는 사용할 수 없고 HAVING 절에서만 사용
SELECT 등급, COUNT(*) AS 고객수, AVG(적립금) AS 평균적립금 FROM 고객
GROUP BY 등급 HAVING AVG(적립금) >= 1000;
고객 테이블에서 등급별로 적립금 평균이 1000원 이상인 고객수와 적립금 평균을 검색
SELECT 주문제품, 주문고객, SUM(수량) AS 총주문수량 FROM 주문
GROUP BY 주문제품, 주문고객;
주문 테이블에서 각 고객이 주문한 제품의 총주문수량을 주문제품별로 검색
※ 집계함수나 GROUP BY절에 명시된 속성외의 속성은 SELECT 절에 작성 불가
조인 검색
조인 검색은 여러개의 테이블을 연결하여 데이터를 검색합니다. 조인 검색을 위해 테이블을 연결해주는 속성은 조인 속성이라고 합니다. 연결하려는 테이블간에 조인 속성의 이름은 달라도 되지만 도메인(타입)은 같아야 하고 일반적으로 외래키가 조인 속성으로 이용됩니다.
- FROM 절에 필요한 모든 테이블을 나열
- WHERE 절에 조인 속성의 값이 같아야 함을 의미하는 조인 조건을 제시
- 같은 이름의 속성이 서로 다른 테이블에 존재 할 수 있기 때문에 SELECT절이나 WHERE절의 속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시
ex) 주문.주문고객 (테이블명.속성)
SELECT 제품.제품명 FROM 제품, 주문
WHERE 주문.주문고객 = '홍길동' AND 제품.제품번호 = 주문.주문제품;
판매 데이터베이스에서 홍길동 고객이 주문한 제품의 이름을 검색
-
SELECT 주문.주문제품, 주문.주문일자 FROM 고객, 주문
WHERE 고객.나이 >= 20 AND 고객.고객아이디 = 주문.주문고객;
판매 데이터베이스에서 나이가 20세 이상의 고객이 주문한 제품의 주문제품과 주문일자를 검색
- 주문테이블에 있는 속성 주문제품과 주문 테이블에 있는 속성 주문일자를 고객테이블에 있는 속성 나이가 20세 이상이고, 고객 테이블에 있는 고객 아이디가 주문 테이블에 있는 주문고객과 같은것을 검색
SELECT 주문제품, 주문일자 FROM 고객 AS A, 주문 AS B
WHERE A.나이 >= 30 AND B.주문고객 = A.고객아이디;
판매 데이터베이스에 있는 고객의 나이가 30세 이상인 주문 고객의 아이디를 검색
- AS 키워드를 이용해 테이블의 이름을 변경해서 출력 할 수 있음
SELECT 제품.제품명 FROM 고객, 제품, 주문
WHERE 고객.고객이름 = '홍길동' AND 고객.고객아이디 = 주문.주문고객
AND 제품.제품명 = 주문.주문제품;
판매 데이터베이스에서 홍길동 고객이 주문한 제품의 제품명을 검색
댓글
댓글 쓰기