가자공부하러!

데이터베이스(3) - SQL(DDL, SELECT) 본문

공부/정보처리기사(실기)

데이터베이스(3) - SQL(DDL, SELECT)

오피스엑소더스 2019. 5. 28. 11:13

1. SQL - DDL

2. SQL - SELECT

3. SQL - JOIN

4. SQL - DML

5. SQL - DCL

6. 뷰(VIEW)

7. 내장 SQL

8. 스토어드 프로시져(Stored Procedure)




1. SQL - DDL


1. DDL(Data Definition Language)?

  > DB의 중요 구성요소를 정의하거나 변경 또는 제거할 때 사용하는 언어이다.

- 스키마(Schema), 도메인(Domain), 테이블(Table), 뷰(View), 인덱스(Index)

  > DDL로 정의된 내용은 메타데이터(Meta Data)가 되며, 시스템 카탈로그(System Catalog)에 저장된다.

  > DDL의 유형

- CREATE : 스키마, 도메인, 테이블, 뷰, 인덱스 정의

- ALTER : 테이블에 대한 정의 변경

- DROP : 스키마, 도메인, 테이블, 뷰, 인덱스, 트리거 제거


2. CREATE SCHEMA

  > 스키마를 정의하는 명령문

- 스키마는 하나의 응용(사용자)에 속하는 테이블과 기타 구성 요소 등을 그룹짓기 위한 것

  > 스키마 식별을 위해 정의하는 요소

- 스키마 이름, 스키마 소유권자, 스키마 허가권자

  > 표기 형식

1
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_ID;
cs


3. CREATE DOMAIN

  > 도메인을 정의하는 명령문

- 도메인? : 하나의 속성이 취할 수 있는 동일한 타입의 원자값들의 집합

  > 정의된 도메인명은 일반적인 데이터 타입처럼 사용된다

  > 표기 형식

1
2
3
CREATE DOMAIN 도메인이름 데이터_타입
    [DEFAULT 기본값]
    [CONSTRAINT 제약조건명 CHECK (범위값)];
cs


4. CREATE TABLE

  > 테이블을 정의하는 명령문

- 테이블 : 설계에서 릴레이션, 조작/검색에서 테이블

  > 표기 형식

1
2
3
4
5
6
7
8
9
10
CREATE TABLE 테이블명
    (속성명 데이터_타입 [NOT NULL], ... , ...
        [, PRIMARY KEY (기본키_속성명, ... )] --기본키로 사용할 속성 지정
        [, UNIQUE (대체키_속성명, ... )] --지정된 속성은 중복된 값을 가질 수 없다
        [, FOREIGN KEY (외래키_속성명, ... ) --외래키 속성 지정. 참조무결성 CASCADE 법칙 적용
            REFERENCES 참조테이블(기본키_속성명, ... )] --참조테이블에 관한 정보 지정
            [ON DELETE 옵션] --참조테이블의 튜플이 삭제되었을 때 액션 지정
            [ON UPDATE 옵션] --참조테이블의 참조 속성값이 변경되었을 때 액션 지정
        [, CONSTRAINT 제약조건명] -- 제약조건의 이름 지정
[CHECK (조건식)]); --속성값에 대한 제약 조건 
cs


5. CREATE VIEW

  > 하나 이상의 기본 테이블로 부터 유도된 이름을 갖는 가상 테이블 VIEW 정의

  > 표기 형식

1
2
3
4
5
CREATE VIEW 뷰명[ (속성명[, 속성명, ...]) ]
AS SELECT 문;
--SELECT문을 서브쿼리로 사용하여 SELECT의 결과로 뷰를 생성
--SELECT문에는 UNION, ORDER BY 사용 불가
--속성명을 기술하지않으면 SELECT문의 속성명 자동 사용
cs


6. CREATE INDEX

  > 인덱스를 정의하는 명령문

- 인덱스? : 빠른 검색을 위한 보조적인 데이터 구조 

  > 표기 형식

1
2
3
CREATE [UNIQUE] INDEX <인덱스명>
    ON 테이블명( {속성명 [ASC | DESC] [, 속성명[ASC | DESC]] } )
    [CLUSTER];
cs

  > UNIQUE : 생략하는 경우? 중복을 허용하는 속성으로 인덱스 생성

  > 정렬여부 지정 : 생략이면 오름차순

  > CLUSTER : 지정된 키에 따라 튜플들을 그룹으로 지정하기 위해 사용


7. CREATE TRIGGER

  > DB시스템에서 이벤트가 발생할 때 마다 자동적으로 수행되는 사용자 정의 프로시저이다.

  > SQL의 제약조건 방법을 통해 명시할 수 없는 무경설 제약조건을 구현하고 관련 테이블의 데이터를 일치시킬 때 주로 사용한다.

  > 표기 형식

1
2
3
4
5
6
7
8
9
10
11
CREATE TRIGGER 트리거명 [동작시기 옵션][동작 옵션] ON 테이블명
--동작시기옵션 : AFTER(테이블변경후트리거시작) / BEFORE(반대)
--동작옵션 : INSERT, DELETE, UPDATE
REFERENCING [NEW | OLD] TABLE AS 테이블명
--NEW : 새로 추가되거나 변경에 참여할 테이플에 트리거가 적용된다.
--OLD : 변경된 튜플들의 집합(TABLE)에 트리거가 적용된다.
FOR EACH ROW
WHEN 조건식 --트리거가 실행되면서 지켜야 할 조건
트리거 BODY
--BODY : 트리거의 본문 코드를 입력하는 부분
--BEGIN으로 시작해서 END로 끝나는데 하나이상의 SQL문이 없으면 
cs


8. ALTER TABLE

  > 테이블에 대한 정의를 변경하는 명령문

  > 표기 형식

1
2
3
4
5
6
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];
--ADD : 새로운 속성을 추가한다.
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];
--ALTER : 속성의 기본값(DEFAULT)을 변경한다.
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];
--DROP COLUMN : 속성을 제거하ㅏㄴ다.
cs


9. DROP

  > 스키마, 도메인, 테이블, 뷰, 인덱스, 트리거를 제거하는 명령문

  > 표기 형식

1
2
3
4
5
6
7
8
9
DROP SCHEMA 스키마명 [CASCADE | RESTRICT];
DROP DOMAIN 도메인명 [CASCADE | RESTRICT];
DROP TABLE 테이블명 [CASCADE | RESTRICT];
DROP VIEW 뷰명 [CASCADE | RESTRICT];
DROP INDEX 인덱스명 [CASCADE | RESTRICT];
DROP TRIGGER 트리거명 [CASCADE | RESTRICT];
DROP CONSTRAINT 제약조건명;
--CASCADE : 제거할 개체를 참조하는 다른 모든 개체도 함께 제거
--RESTRICT : 다른 개제가 제거할 개체를 참조하고 있으면 제거 취소됨
cs

 

2. SQL - SELECT


1. SELECT? 

  > 주기억장치에 임시 테이블로 구성하는 명령문

- 테이블을 구성하는 튜플 중에서 전체 또는 조건을 만족하는 튜플만 골라서


  > 표기 형식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT [PREDICATE] [테이블명.] 속성명 [AS 별칭][, [테이블명.]속성명, ... ]
--PREDICATE : 검색할 튜플을 제한하는 조건(ALL, DISTINCT, DISTINCTROW)
--속성명 : 검색할 속성. 2개 이상의 테이블이 대상이라면 테이블명.속성명으로 사용
--AS : 속성 및 연산의 이름을 다른 제목으로 표시하기 위해 사용
FROM 테이블명[, 테이블명 ...]
--검색할 데이터가 있는 테이블명을 기술
[WHERE 조건]
--검색할 조건을 기술. 다양한 연산자 사용 가능
[GROUP BY 속성명[, 속성명, ...] ]
--특정 속성을 기준으로 그룹화 하여 검색할 때 사용
[HAVING 조건]
--그룹에 대한 조건을 기술
[ORDER BY 속성명[ASC|DESC] [, 속성명[ASC|DESC], ...] ];
--특정 속성을 기준으로 정렬하여 검색할 
cs


2. 기본 검색

  > 예제

1
2
3
4
5
--<사원> 테이블의 모든 튜플을 검색하는 SQL문
SELECT * FROM 사원;
SELECT 사원.* FROM 사원;
SELECT 이름, 부서, 생일, 주소, 기본급 FROM 사원;
SELECT 사원.이름, 사원.부서, 사원.생일, 사원.주소, 사원.기본급 FROM 사원;
cs
1
2
--<사원> 테이블에서 부서만 검색하되 중복 비허용
SELECT DISTINCT 부서 FROM 사원;
cs
1
2
3
--<사원> 테이블에서 이름, 기본급 속성에 특정 값을 더한 내용을 검색
--이름에 좌우공백 모두 제거(Trim)
SELECT Trim(이름)+"월급은" AS 이름, 기본급+10 AS 기본급 FROM 사원;
cs


3. 조건 지정 검색

  > 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--<사원> 테이블에서 부서가 '기획'인 튜플을 검색하는 SQL문 작성
SELECT * FROM 사원 WHERE 부서='기획';
 
--<사원> 테이블에서 부서는 '기획'이고, 기본급이 110보다 큰 튜플을 검색하는 SQL문 작성
SELECT * FROM 사원 WHERE 부서='기획' AND 기본급 > 110;
 
--<사원> 테이블에서 부서가 '기획'이거나 '인터넷'인 튜플을 검색하는 SQL문 작성
SELECT * FROM 사원 WHERE 부서='기획' OR 부서='인터넷';
SELECT * FROM 사원 WHERE 부서 IN ('기획''인터넷');
 
--<사원> 테이블에서 이름의 첫 번째 글자가 '김'인 모든 튜플 검색
SELECT * FROM 사원 WHERE 이름 LIKE '김%';
 
--<사원> 테이블에서 기본급이 85에서 95 사이인 튜플을 검색
SELECT * FROM 사원 WHERE 기본급 BETWEEN 85 AND 95;
 
--<사원> 테이블에서 주소가 NULL인 튜플을 검색
SELECT * FROM 사원 WHERE 주소 IS NULL;
cs


4. 정렬

  > 예제

1
2
3
4
5
6
7
--<사원> 테이블에서 부서가 '기획'인 튜플을 검색하되, 이름 기준 오름차순 정렬
SELECT * FROM 사원 WHERE 부서 = '기획' ORDER BY '이름';
 
--<사원> 테이블의 모든 튜플들을 검색
--부서를 기준으로 오름차순 정렬
--같은 부서 내에서는 이름 기준 내림차순 정렬
SELECT * FROM 사원 ORDER BY 부서 ASC, 이름 DESC;
cs


5. 그룹 검색

  > 특정 그룹에서 조건에 맞는 값 검색

  > 예제

1
2
3
4
5
6
7
8
--<사원> 테이블에서 부서 별 기본급의 평균을 부서 기준 오름차순 정렬
SELECT 부서, AVG(기본급) AS 평균 FROM 사원 GROUP BY 부서 ORDER BY 부서 ASC;
 
--<사원> 테이블에서 기본급이 100 이상인 사원이 2명 이상인 부서의 부서명과 사원 수를 검색
SELECT 부서, COUNT(*) AS 사원수 FROM 사원 
WHERE 기본급 >= 100 
GROUP BY 부서 
HAVING COUNT(*>= 2;
cs


6. 하위 질의

  > 괄호 안에 내용을 먼저 실행한 결과인 임시 테이블을 대상으로 SELECT 수행

  > 예제

1
2
3
4
5
6
7
--<여가활동> 테이블에서 취미가 '나이트댄스'인 사원에 대해
--<사원> 테이블에서 해당 사원의 이름과 주소 검색
SELECT 이름, 주소 FROM 사원
WHERE 이름 IN (SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스');
 
--여가활동을 하지 않는 사원 검색
SELECT * FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);
cs


7. 복수 테이블 검색

  > 2개 이상 테이블(여러 테이블)에서 값 검색

  > 예제

1
2
3
4
5
--경력이 10년 이상인 사원의 이름, 부서, 취미, 경력 검색
 
SELECT 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력
FROM 사원, 여가활동
WHERE 여가활동.경력 >= 10 AND 사원.이름=여가활동.이름;
cs


8. 통합(UNION) 질의

  > 합집합과 유사. UNION을 사용하여 두 테이블을 합치면 두 테이블 간 중복 튜블은 중복제거됨

  > 예제

1
2
--<임원>테이블과 <직원>테이블을 통합하는 SQL문
SELECT * FROM 임원 UNION SELECT * FROM 직원;
cs


3. SQL - JOIN


https://dotheright.tistory.com/101#3

4. SQL - DML


https://dotheright.tistory.com/101#4

5. SQL - DCL


https://dotheright.tistory.com/101#5

6. 뷰(VIEW)


https://dotheright.tistory.com/105#6

7. 내장 SQL


https://dotheright.tistory.com/105#7

8. 스토어드 프로시져(Stored Procedure)


https://dotheright.tistory.com/105#8



맨 위로













Comments