2016년 10월 26일 수요일

SQL의 데이터 조작 기능(2)

SQL의 데이터 조작 기능(2)

5. NULL을 이용한 검색

검색 조건에서 특성 속성의 값이 널 값인지를 비교하려면 IS NULL 키워드를 사용한다. 마찬가지로 특정 속성의 값이 널 값이 아닌지를 비교하려면 IS NOT NULL 키워드를 사용한다.

고객 테이블에서 나이가 아직 입력되지 않은 고객이름을 검색해보자.
SELECT name FROM customer WHERE age IS NULL;
검색 조건에서 나이가 아직 입력되지 않았다는 것은 나이 속성이 널 값임을 의미하며 이러한 검색 조건은 'age = NULL' 형태로 표현해서는 안된다.

고객 테이블에서 나이가 이미 입력된 고객의 고객 이름을 검색해보자.
SELECT name FROM customer WHERE age IS NOT NULL;
검색 조건에서 나이가 이미 입력되었다는 것은 나이 속성이 널 값이 아님을 의미한다. 이러한 검색 조건은 'age <> NULL' 의 형태로 표현하지 않고 반드시 'age IS NOT NULL' 형태로 표현해야 한다.

검색 조건에서 널 값은 다른 값과 크기를 비교하면 결과가 모두 거짓이 된다. 아래에서 재고량 stock의 값이 널이면 어떤 비교 연산자를 사용해도 결과가 모두 거짓이다.

재고량 > 10
재고량 < 10
재고량 >= 10
재고량 <= 10
재고량 = 10
재고량 <> 10

6. 정렬 검색

SELECT 문의 검새 결과 테이블은 일밙거으로 DBMS가 정한 순서로 출력된다. 결과 테이블의 내용을 사용자가 원하는 순서로 출력하려면 ORDER BY 키워드를 사용한다. 결과 테이블의 내용을 원하는 기준에 따라 정렬하여 출력하는 SELECT 문의 기본 형식은 다음과 같다.

SELECT [ ALL | DISTINCT ] 속성_리스트
FROM 테이블_리스트
[ WHERE 조건 ]
[ ORDER BY 속성_리스트 [ ASC | DESC ] ];

ORDER BY 키워드와 함께 정렬 기준이 되는 속성을 지정하고, 오름차순 정렬이면 ASC, 내림차순 정렬이면 DESC로 표현한다. 기본 정렬 방법은 오름차순이므로 특별히 지정하지 않으면 오름차순으로 기본 정렬한다.

문자 데이터를 오름차순으로 정렬하면 알파벳이나 사전 순으로 출력된다. 날짜 데이터는 빠른 날짜가 먼저 출력된다. 널 값은 오름차순에서 맨 먼저 출력되고 내림차순에서는 맨 마지막에 출력된다.

결과를 여러 기준에 따라 정렬하려면 ORDER BY 키워드와 함께 정렬 기준이 되는 속성을 차례로 제시하면 된다.

고객 테이블에서 고객이름, 등급, 나이를 검색하되, 나이를 기준으로 내림차순 정렬해보자.
SELECT name, grade, age FROM customer ORDER BY age DESC;

주문 테이블에서 수량이 10개 이상인 주문의 주문고객, 주문제품, 수량, 주문일자를 검색해보자. 단, 주문제품을 기준으로 오름차순 정렬하고, 동일 제품은 수량을 기준으로 내림차순 정렬해보자.
SELECT name, product, quantity, date FROM order_info ORDER BY product ASC, quantity DESC;

7. 집계함수

함수의미사용 가능한 속성의 타입
COUNT속성 값의 개수
MAX속성 값의 최대값모든 데이터
MIN속성 값의 최소값
SUM속성 값의 합계숫자 데이터
AVG속성 값의 평균

집계 함수를 사용할 때 다음과 같은 사항에 주의해야 한다.
  • 집계 함수는 널인 속성 값은 제외하고 계산한다.
  • 집계 함수는 WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용할 수 있다.
제품 테이블에서 모든 제품의 단가 평균을 검색해보자.
SELECT AVG(price) FROM product;

한빛제과에서 제조한 제품의 재고량 합계를 제품 테이블에서 검색해보자. 출력할 때 속성이름을 재고량 합계로 표시하자.

SELECT SUM(price) AS '재고량 합계' FROM product WHERE manufacturer = '한빛제과';

고객 테이블에 몇 명이 등록되어 있는지 검색해보자.
SELECT COUNT(*) FROM customer;

집계 함수는 널인 속성 값은 제외하기 때문에 널 값을 포함하고 있는 속성으로 COUNT 함수를 적용하면 다른 값이 나올 수 있다. 개수를 정확히 계산하려면 널 값이 없는 속성에 COUNT 함수를 적용하는 것이 좋기 때문에 보통 기본키 속성이나 * 를 이용해 계산한다.

DISTINCT 키워드를 사용해 특정 속성 값의 중복을 없애고 집계 함수를 적용할 수도 있다.

제품 테이블에서 제조업체의 수를 검색해보자. 속성값은 '제조업체 수'로 표시한다.
SELECT COUNT(DISTINCT manufacturer) AS '제조업체 수' FROM product;


[출처] 한빛아카데미 데이터베이스 개론 김현희지음

댓글 없음: