본문 바로가기
정보처리기사

SQL - DML

by Yeoseungwon 2023. 10. 4.
728x90

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.속성명;

 

 

 

 

 

 

 

 

728x90

'정보처리기사' 카테고리의 다른 글

SQL - DDL  (0) 2023.10.04
SQL - DCL  (0) 2023.10.04
서브네팅 Subnetting  (0) 2023.09.22