본문 바로가기

데이터베이스

[SQL] 데이터 검색 - SELECT (설명, 연습문제)

 

SELECT문은 테이블에서 원하는 데이터를 검색하기 위해 필요한 SQL문으로 다양한 검색 유형을 지원한다.

▶ 기본 검색

SELECT [ ALL | DISTINCT ] 속성_리스트 FROM 테이블_리스트;

속성_리스트와 테이블_리스트는 콤마(,)로 구분하여 차례로 나열한다.

SELECT 문은 테이블을 대상으로 하고 수행 결과도 테이블이다.

· DISTINCT : 투플을 중복 제거하고 한 번씩만 출력

· ALL : 투플을 중복 허용하며 모두 출력

*

모든 속성을 검색하여 출력하며 결과 테이블의 속성 순서는 원본 테이블이 정의한 속성 순서와 같다,

ex) SELECT * FROM 제품;

AS 키워드 ( 별명 )

결과 테이블에 출력되는 속성의 이름을 다른 이름으로 바꾸어 출력

ex) SELECT 단가 AS 가격 FROM 제품; // 단가 속성을 가격이라는 새로운 이름으로 출력

▶ 산술식을 이용한 검색

산술식은 속성의 이름과 +, -, *, / 등의 산술 연산자, 상수로 구성된다.

ex) SELECT 단가 + 500 FROM 제품;

▶ 조건 검색

조건을 만족하는 데이터만 검색한다.

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

WHERE 키워드는 비교 연산자와 논리 연산자를 이용한 검색 조건을 제시하면 된다.

비교 연산자

의미

논리 연산자

의미

=

같다.

AND

모든 조건을 만족해야 검색한다

<>

다르다.

OR

여러 조건 중 한 가지만 만족해도 검색한다.

<

작다.

NOT

조건을 만족하지 않는 것만 검색한다.

>

크다.

<=

작거나 같다.

>=

크거나 같다.

LIKE를 이용한 검색

검색 조건을 부분적으로만 알고 있다면 LIKE 키워드를 이용해 검색한다.

단, 문자열을 이용하는 조건에만 사용할 수 있다.

· % : 0개 이상의 문자(문자의 내용과 개수는 상관없음)

· _ : 1개의 문자 (문자의 내용은 상관없음)

NULL를 이용한 검색

검색 조건을 특정 속성의 값이 널 값인지를 비교하려면 IS NULL 키워드를 사용한다.

반대로 특정 속성의 값이 널 값이 아닌지를 비교하려면 IS NOT NULL 키워드를 사용한다.

▶ 정렬 검색

SELECT 문의 검색 결과 테이블은 일반적으로 DBMS가 정한 순서로 출력된다.

결과 테이블의 내용을 원하는 순서로 출력하려면 ORDER BY 키워드를 사용한다.

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

· ASC : 오름차순 (지정하지 않을 경우 오름차순으로 정렬된다.)

· DESC : 내림차순

▶ 정렬 검색

특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용한다.

집계 함수는 열 함수 COLUMN FUNCTION라고도 하며 개수, 합계, 평균, 최댓값, 최솟값의 계산 기능을 제공한다.

함수

의미

사용 가능한 속성의 타입

COUNT

속성 값의 개수

모든 데이터

MAX

속성 값의 최댓값

MIN

속성 값의 최솟값

SUM

속성 값의 합계

숫자 데이터

AVG

속성 값의 평균

주의할 점!!

· 집계 함수는 날인 속성 값은 제외하고 계산한다.

· 집계 함수는 WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용할 수 있다.

▶ 그룹별 검색

테이블에서 특정 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색을 하기 위해

GROUP BY 키워드를 사용한다.

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

그룹에 대한 조건은 HAVING 키워드와 함께 작성한다.

▶ 여러 테이블에 대한 조인 검색

여러 개의 테이블을 연결하여 데이터를 검색하는 것.

테이블을 연결하려면 조인 속성의 이름은 달라도 되지만 도메인은 같아야 한다.

SQL 문은 FROM 절에 검색에 필요한 모든 테이블을 나열하고, WHERE절에는 조인 속성의 값이 같아야 함을 의

미하는 조인 조건을 제시한다. 테이블의 이름과 속성의 이름은. 기호로 연결한다.

ex. FROM 고객, 주문 WHERE 고객.나이 >=30 AND 고객.고객아이디 = 주문.주문고객

테이블의 이름을 대신하는 단순한 별명을 사용할 수 있다.

ex. FROM 고객 c, 주문 o WHERE c.나이 >= 30 AND c.고객아이디 = o.주문고객

▶ 부속 질의문을 이용한 검색

SELECT 문 안에 또 다른 SELECET 문을 포함할 수도 있다.

다른 SELECT 문 안에 들어 있는 SELECT 문을 부속 질의문 또는 서브 질의문이라 한다.

그리고 다른 SELECT 문을 포함하는 SELECT 문을 상위 질의문 또는 주 질의문이라 한다.

부속 질의문은 하나의 행을 결과로 반환하는 단일 행 부속 질의문과 하나 이상의 행을 결과로 반환하는 다중 행 부

속 질의문으로 분류한다. (스칼라 부속 질의 - SELECT, 인라인 뷰 - FROM, 중첩 질의 - WHERE)

연산자

설명

IN

부속 질의문의 결과 값 중 일치하는 것이 있으면 검색 조건이 참

NOT IN

부속 질의문의 결과 값 중 일치하는 것이 없으면 검색 조건이 참

EXISTS

부속 질의문의 결과 값이 하나라도 존재하면 검색 조건이 참

NOT EXISTS

부속 질의문의 결과 값이 하나도 존재하지 않으면 검색 조건이 참

ALL

부속 질의문의 결과 값 모두와 비교한 결과가 참이면 검색 조건을 만족

ANY 또는 SOME

부속 질의문의 결과 값 중 하나라도 비교한 결과가 참이면 검색 조건을 만족

· (ALL)과 (ANY 또는 SOME)은 비교 연산자와 함께 사용한다.


키워드 연습 문제

1) 고객 테이블에서 고객 아이디, 고객 이름, 등급 속성을 검색해보자.

 

2) 고객 테이블에 존재하는 모든 속성을 검색해보자. (2가지 방법)

3) 제품 테이블에서 제조업체를 검색해보자.

4) 제품 테이블에서 제조업체를 검색하되, ALL 키워드를 사용해보자.

5) 제품 테이블에서 제조업체 속성을 중복 없이 검색해보자.

6) 제품 테이블에서 제품명과 단가를 검색하되, 단가를 가격이라는 새 이름으로 출력해보자.

7) 제품 테이블에서 제품명과 단가 속성을 검색하되, 단가에 500원을 더해 '조정 단가'라는 새 이름으로 출력해보자.

8) 제품 테이블에서 한빛 제과가 제조한 제품의 제품명, 재고량, 단가를 검색해보자.

9) 주문 테이블에서 apple 고객이 15개 이상 주문한 주문제품, 수량, 주문 일자를 검색해보자.

10) 주문 테이블에서 apple 고객이 주문했거나 15개 이상 주문된 제품의 주문제품, 수량, 주문 일자, 주문 고객을

검색해보자.

11) 제품 테이블에서 단가가 2,000원 이상이면서 3,000원 이하인 제품의 제품명, 단가, 제조업체를

검색해보자.

12) 고객 테이블에서 성이 김 씨인 고객의 고객 이름, 나이, 등급, 적립금을 검색해보자.

13) 고객 테이블에서 고객 아이디가 5자인 고객의 고객 아이디, 고객 이름, 등급을 검색해보자.

14) 고객 테이블에서 나이가 아직 입력되지 않은 고객의 고객 이름을 검색해보자.

15) 고객 테이블에서 나이가 이미 입력된 고객의 고객이름을 검색해보자.

16) 고객 테이블에서 고객 이름, 등급, 나이를 검색하되, 나이를 기준으로 내림차순 정렬해보자.

17) 주문 테이블에서 수량이 10개 이상인 주문의 주문 고객, 주문제품, 수량, 주문 일자를 검색해보자.

단, 주문제품을 기준으로 오름차순 정렬하고, 동일 제품은 수량을 기준으로 내림차순 정렬해보자.

18) 제품 테이블에서 모든 제품의 단가 평균을 검색해보자.

19) 한빛 제과에서 제조한 제품의 재고량 합계를 제품 테이블에서 검색해보자.

20) 고객 테이블에 고객이 몇 명 등록되어 있는지 검색해보자.

21) 제품 테이블에서 제조업체의 수를 검색해보자.

22) 주문 테이블에서 주문제품별 수량의 합계를 검색해보자.

23) 제품 테이블에서 제조업체별로 제조한 제품의 개수와 제품 중 가장 비싼 단가를 검색하되,

제품의 개수는 제품 수라는 이름으로 출력하고 가장 비싼 단가는 최고가라는 이름으로 출력해보자.

24) 제품 테이블에서 제품을 3개 이상 제조한 제조업체별로 제품의 개수와, 제품 중 가장 비싼 단가를 검색해보자.

25) 고객 테이블에서 적립금 평균이 1,000원 이상인 등급에 대해 등급별 고객 수와 적립금 평균을 검색해보자.

26) 주문 테이블에서 각 주문 고객이 주문한 총 주문 수량을 주문제품별로 검색해보자.

27) 판매 데이터베이스에서 banana 고객이 주문한 제품의 이름을 검색해보자.

28) 판매 데이터베이스에서 나이가 30세 이상인 고객이 주문한 제품의 주문제품과 주문 일자를 검색해보자.

29) 판매 데이터베이스에서 고명석 고객이 주문한 제품의 제품명을 검색해보자.

30) 판매 데이터베이스에서 달콤 비스킷을 생산한 제조업체가 만든 제품들의 제품명과 단가를 검색해보자.

31) 판매 데이터베이스에서 적립금이 가장 많은 고객의 고객 이름과 적립금을 검색해보자.

32) 판매 데이터베이스에서 banana 고객이 주문한 제품의 제품명과 제조업체를 검색해보자.

33) 판매 데이터베이스에서 banana 고객이 주문하지 않은 제품의 제품명과 제조업체를 검색해보자.

34) 판매 데이터베이스에서 대한 식품이 제조한 모든 제품의 단가보다 비싼 제품의 제품명, 단가, 제조업체를 검색해보자.

35) 판매 데이터베이스에서 2019년 3월 15일에 주문한 고객의 고객 이름을 검색해보자.

36) 판매 데이터베이스에서 2019년 3월 15일에 주문하지 않은 고객의 고객이름을 검색해보자.

 

ref. IT CookBook, 데이터베이스 개론(2판): 기초 개념부터 빅데이터까지 김연희