-
DML - SELECT정보처리기능사/SQL 2018. 11. 9. 17:13
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절: 검색할 조건을 기술
- GROUP BY절: 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화할 속성을 지정
- 일반적으로 GROUP BY절은 그룹 함수와 함께 사용
- HAVING절: GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정
- ORDER BY절: 특정 속성을 기준으로 정렬하여 검색할 때 사용
- 속성명: 정렬의 기준이 되는 속성명을 기술
- [ASC | DESC]: 정렬 방식으로서 'ASC'는 오름차순, 'DESC'는 내림차순이다. 생략하면 오름차순으로 지정된다.
* 그룹 함수
릴레이션의 한 열을 요약하거나 집계하는 함수, COUNT, MAX, MIN, SUM, AVG 등이 있다.
* 조건 연산자 / 연산자 우선순위 / 주요 함수
- 조건 연산자
> 비교 연산자
연산자
=
<>
>
<
>=
<=
의미
같다
같지 않다
크다
작다
크거나 같다
작거나 같다
- 논리 연산자: NOT, AND, OR
NOT
조건을 만족하지 않을 경우에만 데이터를 추출
AND
두 조건을 모두 만족할 경우에만 데이터를 추출
OR
두 조건 중 하나라도 만족할 경우에 데이터를 추출
- LIKE 연산자: 가장 일반적으로 사용되는 문자열에 대한 연산으로, 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색하기 위해 사용
대표 문자
* 또는 %
? 또는 _
#
의미
모든 문자를 대표
문자 하나를 대표
숫자 하나를 대표
* 연산자 우선순위
-산술, 관계, 논리 연산자가 함께 사용되었을 때는 산술 > 관계 > 논리 연산자 순서로 연산자 우선순위가 정해진다.종류
연산자
우선순위
산술 연산자
x, /, +, -
왼쪽에서 오른쪽으로 갈수록 낮아진다.
관계 연산자
=, <>, >, >=, <, <=
모두 같다.
논리 연산자
NOT, AND, OR
왼쪽에서 오른쪽으로 갈수록 낮아진다.
* 주요 함수
NOW()
현재 날짜와 시간을 표시
DATE()
현재 날짜를 표시
LEFT(문자열, 자릿수)
문자열의 왼쪽에서 주어진 자릿수만큼 추출
MID(문자열, 시작값, 자릿수)
문자열의 시작 위치에서 주어진 자릿수만큼 추출
RIGHT(문자열, 자릿수)
문자열의 오른쪽에서 주어진 자릿수만큼 추출
TRIM(문자열)
문자열의 좌우 공백을 제거
LEN(문자열)
문자열의 길이를 반환
UPPER(문자열)
문자열을 모두 대문자로 변환
LOWER(문자열)
문자열을 모두 소문자로 변환
AVG(필드명)
필드의 평균을 구한다.
SUM(필드명)
필드의 합계를 구한다.
COUNT(필드명)
필드의 레코드 수를 구한다.
MIN(필드명)
필드의 최솟값을 구한다.
MAX(필드명)
필드의 최댓값을 구한다.
2. 기본 검색
예1) <사원> 테이블의 모든 튜플을 검색하시오.
SELECT * FROM 사원;
SELECT 사원.* FROM 사원;
SELECT 이름, 부서, 생일, 주소, 기본급 FROM 사원;
SELECT 사원, 이름, 사원.부서, 사원.생일, 사원.주소, 사원.기본급 FROM 사원;
예2) <사원> 테이블에서 주소만 검색하되 같은 주소는 한 번만 출력하시오.
SELECT DISTINCT 주소 FROM 사원;
예3) <사원> 테이블에서 기본급에 특별수당 10을 더한 월급을 "XX부서의 XXX의 월급 XXX" 형태로 출력하시오.
SELECT 부서, "부서의", 이름, "의 월급", 기본급+10 FROM 사원;
3. 조건 지정 검색
예4) <사원> 테이블에서 '기획'부의 모든 튜플을 검색하시오.
SELECT * FROM 사원 WHERE 부서='기획';
예5) <사원> 테이블에서 '기획'부에서 근무하면서 '후평동'에 사는 사람의 튜플을 검색하시오.
SELECT * FROM 사원 WHERE 부서='기획' AND 주소='후평동';
예6) <사원> 테이블에서 부서가 '기획'이거나 '인터넷'인 튜플을 검색하시오.
SELECT * FROM 사원 WHERE 부서='기획' OR 부서='인터넷';
예7) <사원> 테이블에서 성이 '김'인 사람의 튜플을 검색하시오.
SELETE * FROM 사원 WHERE 이름 LIKE '김%';
예8) <사원> 테이블에서 생일이 '01/09/69'에서 '10/22/73' 사이인 튜플을 검색하시오.
SELECT * FROM 사원 WHERE 생일 BETWEEN '01/09/69' AND '10/22/73';
예9) <사원> 테이블에서 주소가 NULL인 튜플을 검색하시오.
SELECT * FROM 사원 WHERE 주소 IS NULL;
4. 정렬 검색
예10) <사원> 테이블에서 주소를 기준으로 오름차순 정렬해서 검색하시오.
SELECT * FROM 사원 ORDER BY 주소 ASC;
예11) <사원> 테이블에서 '부서'를 기준으로 오름차순 정렬하고, 같은 부서에 대해서는 '이름'을 기준으로 내림차순 정렬해서 검색하시오.
SELECT * FROM 사원 ORDER BY 부서 ASC, 이름 DESC;
5. 그룹 지정 검색
예12) <사원> 테이블에서 부서별 기본급의 평균을 구하시오.
SELECT 부서, AVG(기본급) AS 평균 FROM 사원 GROUP BY 부서;
예13) <사원> 테이블에서 부서별 튜플 수를 검색하시오.
SELECT 부서, COUNT(*) AS 사원수 FROM 사원 GROUP BY 부서;
예14) <사원> 테이블에서 기본급이 100 이상인 사원이 2명 이상인 부서의 튜플 수를 구하시오.
SELECT 부서, COUNT(*) AS 사원수 FROM 사원 WHERE 기본급 >= 100
GROUP BY 부서 HAVING COUNT(*) >=2;
6. 하위 질의
* 하위 질의
조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용한다.
예15) 취미가 '나이트댄스' 인 사원의 이름과 주소를 검색하시오.
SELECT 이름, 주소 FROM 사원 WHERE 이름= (SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스');
예16) 취미활동을 하지 않는 사원들을 검색하시오.
SELECT * FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);
7. 복수 테이블 검색
예17) 경력이 10년 이상인 사원의 이름, 부서, 취미, 경력을 검색하시오.
SELECT 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력 FROM 사원, 여가활동
WHERE 여가활동.경력 >=10 AND 사원.이름 = 여가활동 = 이름;
8. 통합(UNION) 질의
예18) 사원들의 명단이 <사원> 테이블과 <직원> 테이블에 저장되어 있다. 두 테이블을 통합하는 질의문을 작성하시오. 단, 같은 레코드가 두 번 나오지 않게 하시오.
SELECT * FROM 사원 UNION SELECT * FORM 직원;
<사원>
사원
직급
김형석
대리
홍영선
과장
류기선
부장
김현천
이사
<직원>사원
직급
신원섭
이사
이성호
대리
홍영선
과장
류기선
부장
'정보처리기능사 > SQL' 카테고리의 다른 글
고급 데이터베이스 기능 (0) 2018.11.12 DML - INSERT, DELETE, UPDATE (0) 2018.11.09 DDL (0) 2018.11.09 SQL의 개념 (0) 2018.11.09