Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

subsay

관계 데이터베이스 모델과 언어 - DML - SELECT 본문

정보처리 기사

관계 데이터베이스 모델과 언어 - DML - SELECT

subsay 2017. 9. 30. 00:08

SELECT문은 테이블을 구성하는 튜플(행)들 중에서 전체 또는 조건을 만족하는 튜플(행)을 검색하여 주기억장치 상에 임시 테이블로 구성하는 명령문이다.


1. 일반형식

SELECT Predicate [테이블명.]속성명1, [테이블명.]속성명2, ...

FROM 테이블명1, 테이블명2, ...

[WHERE 조건]

[GROUP BY 속성명1, 속성명2, ...]

[HAVING 조건]

[ORDER BY 속성명 [ASC | DESC]];


 - SELECT 절

 > 속성명 : 검색하여 불러올 속성(열) 또는 속성을 이용한 수식을 지정한다.

 >> 기본 테이블을 구성하는 모든 속성을 지정할 때는 '*'를 기술한다.

 >> 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현한다.

 > Predicate : 불러올 튜플 수를 제한할 명령어를 기술한다.



*Predicate 옵션

 - ALL : 모든 튜플을 검색 할 때 지정하는 것으로, 주로 생략합니다.

 - DISTINCT : 중복된 튜플이 있으면 그 중 첫 번째 한 개만 검색합니다.

 - DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌 투플 전체를 대상으로 합니다.


 - FROM절 : 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술한다.

 - WHERE절 : 검색할 조건을 기술한다.


*조건 연산자

 - 비교 연산자* : =, <>, >, >=, <=, IN

 - 논리 연산자 : NOT, AND, OR

 - LIKE : 대표 문자*를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플만 검색합니다.


*비교 연선자

 - = : 같다

 - <> : 같지 않다

 - > : 크다

 - >= : 크거나 같다

 - < : 작다

 - <= 작거나 같다

 - IN : 포함되어 있다


*대표 문자

 - * 또는 % : 모든 문자를 대표

 - ? 또는 _ : 한 자리 문자를 대표

 - # : 한 자리 숫자를 대표


 - GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화할 속성을 지정한다.

 > 일반적으로 GROUP BY절은 그룹 함수와 함께 사용된다.


*그룹 함수의 종류

 - COUNT(속성명) : 그룹별 튜플 수를 구하는 함수

 - MAX(속성명) : 그룹별 최대값을 구하는 함수

 - MIN(속성명) : 그룹별 최소값을 구하는 함수

 - SUM(속성명) : 그룹별 합계를 구하는 함수

 - AVG(속성명) : 그룹별 평균을 구하는 함


 - HAVING절 : GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정한다.

 - ORDER BY절 : 특정 속성을 기준으로 정렬하여 검색할 때 사용한다.

 > 속성명 : 정렬의 기준이 되는 속성명을 기술한다.

 > [ASC|DESC] : 정렬방식으로서 'ASC'는 오름차순, 'DESC'는 내림차순이다. 생략하면 오름차순으로 지정된다.


2. 기본 검색

예) <사원> 테이블의 모든 튜플을 검색 하시오.

 - SELECT * FROM 사원;

 - SELECT 사원.* FROM 사원;

 - SELECT 이름, 부서, 생일, 주소, 기본급 FROM 사원;

 - SELECT 사원.이름, 사원.부서, 사원.생일, 사원.주소, 사원.기본급 FROM 사원;


예) <사원> 테이블에서 주소만 검색하되 같은 주소는 한번만 출력하시오

 - SELECT DISTINCT 주소 FROM 사원;


예) <사원> 테이블에서 기본급에 특별수당 10을 더한 월급을 "XX부서의 XXX의 월급 XX" 형태로 출력하시오

 - SELECT 부서, "부서의", 이름, "의 월급", 기본급 + 10 FROM 사원;


3. 조건 지정 검색

예) <사원> 테이블에서 '기획'부의 모든 튜플을 검색하시오

 - SELECT * FROM 사원 WHERE 부서 = '기획';


예) <사원> 테이블에서 '기획'부에서 근무하면서 '후평동'에 사는 사람의 튜플을 검색하시오.

 - SELECT * FROM 사원 WHERE 부서 = '기획' AND 주소 = '후평동';


예) <사원> 테이블에서 부서가 '기획' 이거나 '인터넷'인 튜플을 검색하시오.

 - SELECT * FROM 사원 WHERE 부서 = '기획' OR 부서 = '인터넷';


예) <사원> 테이블에서 성이 '김'인 사람의 튜플을 검색하시오

 - SELECT * FROM 사원 WHERE 이름 LIKE '김%';


예) <사원> 테이블에서 생일이 '01/09/69' 에서 '10/22/73' 사이인 튜플을 검색하시오.

 - SELECT * FROM 사원 WHERE 생일 BETWEEN #01/09/69# AND #10/22/73#;


예) <사원> 테이블에서 주소가 NULL인 튜플을 검색하시오.

 - SELECT * FROM 사원 WHERE 주소 IS NULL;


4. 정렬 검색

예) <사원> 테이블에서 주소를 기준으로 오름차순 정렬시켜서 상위 2개의 튜플만 검색하시오.

 - SELECT TOP 2 * FROM 사원 ORDER BY 주소 ASC;


예) <사원> 테이블에서 '부서를 기준으로 오름차순 정렬하고, 같은 부서에 대해서는 '이름'을 기준으로 내림차순 정렬시켜서 검색하시오

 - SELECT * FROM 사원 ORDER BY 부서 ASC, 이름 DESC;


5. 그룹 지정 검색

예) <사원> 테이블에서 부서별 기본급의 평균을 구하시오.

 - SELECT 부석, AVG(기본급) AS 평균 FROM 사원 GROUP BY 부서;


예) <사원> 테이블에서 부서별 튜플 수를 검색하시오.

 - SELECT 부서, COUNT(*) AS 사원수 FROM 사원 GROUP BY 부서;


예) <사원> 테이블에서 기본급이 100 이상인 사원이 2명 이상이 부서의 튜플 수를 구하시오.

 - SELECT 부서, COUNT(*) AS 사원수 FROM 사원 WHERE 기본급>=100 GROUP BY 부서 HAVING COUNT(*) >=2;


6. 하위 질의*

예) 취마가 '나이트댄스'인 사원의 이름과 주소를 검색하시오

 - SELECT 이름, 주소 FROM WHERE 이름=(SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄수')


예) 취미활동을 하지 않는 사원들을 검색하시오.

 - SELECT * FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동)


*하위 질의

 하위 질의는 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용합니다. 먼저 "SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스'"를 수행하여 <여가활동> 테이블에서 '성춘향'을 찾습니다. 그런 다음 하위 질의에 해당하는 피연산자의 자리에 '성춘향'을 대입하면 질의문은 "SELECT 이름, 주소 FROM 사원 WHERE 이름='성춘향'"과 같습니다.


*NOT IN()

 NOT IN()은 포함되지 않는 데이터를 의미합니다. 즉 <사원> 테이블에서 모든 자룔를 검색하는데, <여가활동> 테이블에 이름이 있는 자료는 제외하고 검색합니다.


7. 복수 테이블 검색

예) 경력이 10년 이상인 사원의 이름, 부서, 취미, 경력을 검색하시오.

 - SELECT 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력 FROM 사원, 여가활동 WHERE 여가활동.경력>=10 AND 사원.이름=여가활동.이름


8. 통합(UNION) 질의

예) 사원들의 명단 <사원> 테이블과 <직원> 테이블에 저장되어 있다. 두 테이블을 통합하는 질의문을 작성하시오. 단, 같은 레코드가 두 번 나오지 않게 하시오.

 - SELECT * FROM 사원 UNION SELECT FROM 직원