SQL – DML
- DML은 데이터베이스 사용자가 저장된 데이터를 실질적으로 관리하는데 사용되는 언어
- DML은 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공한다.
명령문 | 기능 |
SELECT | 테이블에서 튜플을 검색함 |
INSERT | 테이블에서 새로운 튜플을 삽입함 |
DELETE | 테이블에서 튜플을 삭제함 |
UPDATE | 테이블에서 튜플의 내용을 갱신함 |
* 날짜데이터는 # # 으로 묶어주기
INSERT INTO 테이블명 ( [ 속성명1, 속성명2 … )
VALUES ( 데이터1, 데이터2, …. );
- 기본테이블의 모든 속성을 사용할 때는 속성명을 생략할 수 있다.
- SELECT문을 사용하여 다른 테이블의 검색 결과를 삽입할 수 있다.
DELETE
FROM 테이블명
[ WHERE 조건 ];
- 모든 레코드를 삭제할 때는 WHERE절을 생략한다.
- 테이블을 완전히 제거하기 위해서는 DROP문을 사용해야 한다.
UPDATE 테이블명
SET 속성명 = 데이터[ , 속성명=데이터 ….]
[ WHERE 조건 ];
Ex) <사원> 테이블에 있는 편집부의 모든 튜플을 편집부원(이름, 생일, 주소, 기본급)테이블에 삽입하시오.
INSERT INTO 편집부원(이름, 생일, 주소, 기본급)
SELECT 이름, 생일, 주소, 기본급
FROM 사원
WHERE 부서 = ‘편집’;
Ex) <사원> 테이블에서 “황진이” 의 부서를 “기획부”로 변경하고 기본급을 5만원 인상시키시오.
UPDATE 사원
SET 부서 = ‘기획’, 기본급 = 기본급+5
WHERE 이름 = ‘황진이’;
SELECT [PREDICATE] [테이블명.] 속성명 [AS 별칭] [, [테이블명.]속성명, …]
[, 그룹함수(속성명) [AS 별칭]]
[, WINDOW함수 OVER (PARTITION BY 속성명1, 속성명2 …)
ORDER BY 속성명3, 속성명4 …) ]
FROM 테이블명 [, 테이블명 …]
[WHERE 조건]
[GROUP BY 속성명, 속성명, … ]
[HAVING 조건]
[ORDER BY 속성명 [ASC | DESC ] ];
- PREDICATE : 검색할 튜플 수를 제한하는 명령어
è DISTINCT : 중복된 튜플이 있으면 그 중 첫 번째 한개만 표시함
- 그룹함수 : GROUP BY 에서 지정된 그룹별로 속성의 값을 집계할 함수
è COUNT(속성명), SUM(속성명), AVG(속성명), MAX(속성명), MIN(속성명),
STDDEV(속성명):표준편차, VARIANCE(속성명):분산,
ROLLUP(속성명, 속성명 … ): 그룹별 소계를 구하는 함수
속성의 개수가 n개면 n+1 레벨까지, 하위레벨에서 상위레벨 순으로 데이터 집계
CUBE(속성명, 속성명 … ): 모든 조합의 그룹별 소계를 구함
속성의 개수가 n개면, 2 n승 레벨까지, 상위레벨에서 하위레벨순으로 데이터집계
- WINDOW 함수: GROUP BY 절을 이용하지 않고 속서의 값을 집계할 함수
è ROW_NUMBER() : 윈도우별로 각 레코드에 대한 일련번호를 반환
è RANK() : 윈도우별로 순위를 반환하며, 공동순위를 반영한다.
è DENSE_RANK() : 공동순위를 무시하고 순위를 반환
è PARTITION BY : WINDOW함수의 적용범위가 될 속성을 지정함
è ORDER BY : PARTITON 안에서 정렬 기준으로 사용할 속성을 지정함
- GROUP BY 절: 특정 속성을 기준으로 그룹화하여 검색할 때 사용.
일반적으로 GROUP BY절은 그룹함수와 함께 사용됨
- HAVING 절 : GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정함
Ex) <사원>테이블에서 ‘주소’만 검색하되 같은 ‘주소’는 한번만 출력하시오.
SELECT DISTINCT 주소 FROM 사원;
Ex) <사원>테이블에서 ‘기본급’에 특별수당 10을 더한 월급을 “XX부서의 XXX의 월급 XXX” 형태로 출력하시오
SELECT 부서 + ‘부서의’ AS 부서2,
이름 + ‘의 월급’ AS 이름2,
기본급 + 10 AS 기본급2
FROM 사원;
Ex) <사원> 테이블에서 ‘김’인 사람의 튜플을 검색하시오
SELECT * FROM 사원 WHERE 이름 LIKE “김%”;
Ex) <사원> 테이블에서 ‘생일’이 ‘01/01/69’ 에서 ‘12/31/73’ 사이인 튜플을 검색하시오.
SELECT * FROM 사원 WHERE 생일 BETWEEN #01/01/69# AND #12/31/73#;
Ex) <사원> 테이블에서 ‘주소’가 NULL인 튜플을 검색하시오
SELECT * FROM 사원 WHERE 주소 IS NULL;
Ex) <사원> 테이블에서 ‘주소’를 기준으로 내림차순 정렬시켜 상위 2개 튜플만 검색하시오.
SELECT TOP 2 *
FROM 사원
ORDER BY 주소 DESC;
Ex) <사원>테이블에서 ‘부서’를 기준으로 오름차순 정렬하고, 같은 ‘부서’에 대해서는 ‘이름’을 기준으로 내림차순 정렬시켜서 검색하시오.
SELECT * FROM 사원
ORDER BY 부서 ASC, 이름 DESC;
Ex) <상여금> 테이블에서 ‘상여내역’별로 ‘상여금’에 대한 일련번호를 구하시오.
(내림차순, 속성명은 NO)
SELECT 상여내역, 상여금,
ROW_NUMBER() OVER (PARTITION BY 상여내역
ORDER BY 상여금 DESC) AS NO
FROM 상여금;
Ex) <상여금> 테이블에서 ‘부서’별 ‘상여금’의 평균을 구하시오.
SELECT 부서, AVG(상여금) AS 평균
FROM 상여금
GROUP BY 부서;
하위질의
: 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용한다.
SELECT 속성명, …..
FROM 테이블명
WHERE 조건 = ( SELECT 속성명 FROM 테이블명 WHERE 조건);
Ex) ‘취미’가 “나이트댄스”인 사원의 ‘이름’과 ‘주소’를 검색하시오.
SELECT 이름, 주소 FROM 사원
WHERE 이름 = ( SELECT 이름 FROM 여가활동 WHERE 취미=’나이트댄스’);
Ex) 취미활동을 하지 않는 사원들을 검색하시오.
SELECT * FORM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);
복수테이블검색
: 여러테이블을 대상으로 검색수행
Ex) ‘경력’이 10년 이상인 사원의 ‘이름’, ‘부서’, ‘취미’, ‘경력’ 을 검색하시오.
SELECT 사원.이름 , 사원.부서 , 여가활동.취미 , 여가활동.경력
FROM 사원, 여가활동
WHERE 여가활동.경력 >= 10 AND 사원.이름 = 여가활동.이름;
집합연산자를 이용한 통합질의
SELECT 속성명1, 속성명2, ….
FROM 테이블명
UNION | UNION ALL | INTERSECT | EXCEPT
SELECT 속성명1, 속성명2, ….
FROM 테이블명
[ ORDER BY 속성명 [ ASC | DESC ];
UNION(합집합, 중복된행은 한번만 출력) , UNION ALL(중복된행도 그대로 출력),
INTERSECT(교집합), EXCEPT(차집합, 첫 번째 SELECT문의 조회 결과에서 두 번째 SELECT문의 조회 결과를 제외한 행을 출력)
DML – JOIN
: 2개의 릴레이션에서 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션을 반환한다.
INNNER JOIN
1. EQUI JOIN : 같은 값을 가지는 행을 연결하여 결과를 생성하는 방법
-> WHERE 절을 이용한 EQUI JOIN 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명;
-> NATURAL JOIN 절을 이용한 EQUI JOIN 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 NATURAL JOIN 테이블명2;
* NATURAL 은 반드시 속성명이 같아야한다.
-> JOIN ~ USING 절을 이용한 EQUI JOIN 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 JOIN 테이블명2 USING(속성명);
2. NON-EQUI JOIN
: JOIN 조건에 ‘=’조건이 아닌 나머지 비교 연산자
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2
WHERE (NON-EQUI JOIN 조건);
OUTER JOIN
1. LEFT OUTER JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 LEFT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1, 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명(+);
2. RIGHT OUTER JOIN : LEFT와 같음 (+)를 쓸땐 왼쪽테이블에 붙임
3. FULL OUTER JOIN
SELECT [테이블명1.]속성명, [테이블명2.]속성명, …
FROM 테이블명1 FULL OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;
'정보처리기사' 카테고리의 다른 글
SQL - DDL (0) | 2023.10.04 |
---|---|
SQL - DCL (0) | 2023.10.04 |
서브네팅 Subnetting (0) | 2023.09.22 |