일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JQuery
- 제네릭
- jQuery값전송
- 페이징
- 엔티티직접사용
- 제너릭
- fetchjoin
- values()
- 벌크연산
- Hibernate
- javaservlet
- 자바서블릿
- springflow
- 대량쿼리
- LIST
- jQueryUI
- Generic
- 스프링데이터흐름
- JPQL
- javascriptcalendar
- namedQuery
- joinfetch
- fullcalendar
- JPA
- jQuery값전달
- jscalendar
- paging
- calendar
- 페치조인
- 프로젝트생성
- Today
- Total
가자공부하러!
데이터베이스(3) - SQL(DDL, SELECT) 본문
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
맨 위로
'공부 > 정보처리기사(실기)' 카테고리의 다른 글
데이터베이스(5) - SQL(VIEW, 내장SQL, 스토어드프로시저) (0) | 2019.05.30 |
---|---|
데이터베이스(4) - SQL(JOIN, DML, DCL) (0) | 2019.05.29 |
데이터베이스(2) - 관계형 데이터베이스와 관계 연산 (0) | 2019.05.25 |
데이터베이스(1) - 데이터베이스 기본 (0) | 2019.05.25 |
알고리즘(8) - 실무응용2 (0) | 2019.04.03 |