subsay
관계 데이터베이스 모델과 언어 - DML - SELECT 본문
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 직원
'정보처리 기사' 카테고리의 다른 글
관계 데이터베이스 모델과 언어 - 내장 SQL (0) | 2017.09.30 |
---|---|
관계 데이터벵스 모델과 언어 - DML - INSERT, DELETE, UPDATE (0) | 2017.09.30 |
관계 데이터베이스 모델과 언어 - DDL (0) | 2017.09.28 |
관계 데이터베이스 모델과 언어 - SQL의 개념 (0) | 2017.09.28 |
관계 데이터베이스 모델과 언어 - 정규화(Normalization) (0) | 2017.09.27 |