。공부 。

<DB> 조작어(DML) SELECT

kyoe 2007. 11. 14. 12:07
* SELECT문의 일반 형식 *
SELECT [PREDICATE][테이블명,]속성명[AS 별칭][,테이블명.]속성명, ..]
FROM 테이블명[, 테이블명, ..]
[WHERE 조건]
[GROUP BY 속성명[,속성명, ..]]
[HAVING 조건]
[ORDER BY 속성명[ASC | DESC][, 속성명[ASC | DESC],...]];
=SELECT 절=
->PREDICATE : 검색할 튜플을 제한할 목적으로 사용되는 조건
    ->ALL : 모든 튜플들을 검색할 때 사용된다.(기본값)
    ->DISTINCT : 중복된 튜플을 제거할 때 사용된다.
    ->DISTINCTROW : 중복된 튜플을 제거하지만, 선택된 속성의 값이 아닌 튜플 전체값을 대상으로 할때사용된다.
-> 속성명 : 검색하여 불러올 속성 또는 수식으로서, 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명,속성명'으로 사용된다.
-> AS : 속성 및 연산의 이름을 다른 제목으로 표시하기 위해 사용된다.
- GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할 때 사용한다. 일반적으로 GROUP BY절은 그룹함수와 함께 사용한다.
- HAVING절 : 그룹에 대한 조건을 기술한다.
- ORDER BY절 : 특정 속성을 기준으로 정렬하여 검색할 때 사용한다.
    ->속성명 : 정렬의 기준이 되는 속성명을 기술한다.
    ->[ASC | DESC] : ASC는 오름차순, DESC는 내림차순

* 예제로 SELECT문을 알아보자 *
- 기본검색 -
예1) <사원>테이블의 모든 튜블 검색
- SELECT * FROM 사원;

예2) <사원>테이블에서 부서만 검색하되, 같은 부서는 한번만 검색
- SELECT DSTINCT 부서 FROM 사원;

예3) <사원>테이블에서 이름,문자열 "월급은",기본급에 10을 더한 값을 검색
- SELECT 이름,"월급은",기본급+10 FROM 사원;

- 조건 지정 검색 -
예4) <사원>테이블에서 부서가 '기획'인 튜플검색
- SELECT * FROM 사원 WHERE 부서='기획';

예5) <사원>테이블에서 부서는 '기획'이고, 기본급이 110보다 큰 튜플을 검색
- SELECT * FROM 사원 WHERE 부서='기획' AND 기본급 > 110;

예6) <사원>테이블에서 부서가 '기획'이거나 '인터넷'인 튜플을 검색
- SELECT * FROM 사원 WHERE 부서='기획' OR 부서='인터넷';
- SELECT * FROM 사원 WHERE 부서 IN('기획','인터넷');

예7) <사원>테이블에서 이름의 첫 번재 글자가 '김'인 모든 튜플을 검색
- SELECT * FROM 사원 WHERE 이름='김%';

예8) <사원>테이블에서 기본급이 85에서 95사이인 튜플을 검색
- SELECT * FROM 사원  WHERE 기본급 BETWEEN 85 AND 95;

예9) <사원>테이블에서 주소가 NULL인 튜플을 검색
- SELECT * FROM 사원 WHERE 주소 IS NULL;

- 정 렬 -
예10) <사원>테이블에서 부서가 '기획'인 튜플을 검색하되, 이름을 기준으로 오름차순 정렬
- SELECT * FROM 사원 WHERE 부서='기획' ORDER BY 이름;

예11) <사원>테이블의 모든 튜플들을 검색하되, 부서를 기준으로 오름차순 정렬하고 같은 부서에 대해서는 이름기준으로 내림차순 정렬
- SELECT * FROM 사원 ORDER BY 부서 ASC, 이름 DESC;

- 그룹 검색 -
예12) <사원>테이블에서 부서별로 기본급의 평균을 구하여 부서를 기준으로 오름차순 정렬
- SELECT 부서,AVG(기본급) AS 평균 FROM 사원 GROUP BY 부서 ASC;

예13) <사원>테이블에서 기본급이 100이상인 사원이 2명 이상인 부서와 그 부서의 전체 사원수 검색
- SELECT 부서,COUNT(*) AS 사원수 FROM 사원
    WHERE 기본급 >= 100 GROUP BY 부서 HAVING COUNT(*) >=2;

- 하위 질의 -
예14) <여가활동>테이블에서 취미가 '나이트댄스'인 사원에 대해 <사원>테이블에서 해당 사원의 이름과 주소를 검색
- SELECT 이름,주소 FROM 사원
    WHERE 이름 IN (SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스');

예15) 여가활동을 하지 않는 사원들을 검색
- SELECT * FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);

- 복수 테이블 검색 -
예16)경력이 10년 이상인 사원의 이름,부서,취미,경력을 검색
- SELECT 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력
    FROM 사원, 여가활동
    WHERE 여가활동.경력 >= 10 AND 사원.이름 = 여가활동.이름;

- 통합 질의 -
예17) 사원들의 명단이 <임원>테이블과 <직원>테이블에 저장되어 있다. 두 테이블을 통합하는 SQL문을 작성. 단, 같은 레코드가 중복되어 나오지 않게 한다.
- SELECT * FROM 임원 UNION SELECT * FROM 직원;

- 자료참고 : 기사친구(www.gisa79.com) -