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

(정보처리기사)SQL 응용

by 흥부와놀자 2020. 7. 12.

1. DDL -> DB를 구축하거나 수정할 목적으로 사용하는 언어

- CREATE TABLE 학생 (이름 VARCHAR(20) NOT NULL , 학번 CHAR(8), PRIMARY KEY(학번),

FOREIGN KEY(전공) REFERENCES 학과(학과코드) ON DELETE SET NULL ON UPDATE CASCADE,

CONSTRAINT 생년월일제약 CHECK(생년월일>='1980-01-01'));

  - NOT NULL ->특정 데이터가 NULL값을 가질 수 없음

  - FOREIGN KEY(전공) REFERENCES 학과(학과코드) ON DELETE SET NULL ON UPDATE CASCADE -> 학과 테이블의 학과코드를 참조해서 외래키로 쓸것이며 만약 학과테이블의 학과코드가 삭제되면 해당 전공 외래키는 널값으로, 업데이트되면 해당 전공 외래키도 연달아 업데이트 되게 하기

  - CONSTRAINT 생년월일제약 CHECK(생년월일>='1980-01-01') -> 생년월일을 특정 날짜 이후로만 기록할 수 있는 생년월일 제약이라는 제약조건 생성

 

- ALTER TABLE 테이블명 ADD 속성명 데이터타입

- ALTER TABLE 테이블명 ALTER 속성명 

- ALTER TABLE 테이블명 DROP COLUM 속성명

- DROP SCHEMA, DOMAIN, TABLE, VIEW, INDEX, CONSTRAINT

- DROP TABLE 테이블명 + CASCADE(해당 요소 참조하는 다른 모든 개체를 함께 제거), RESTRICTED(해당 요소를 다른 객체가 참조중일때 제거 취소)

 

2. DCL -> 데이터의 보안, 무결성, 회복, 병행 제어등을 정의하는데 사용하는 언어

- GRANT 권한 ON 개체 TO 사용자 -> 해당 개체(테이블)의 권한을 사용자에게 부여

- REVOKE 권한 ON 개체 FROM 사용자 -> 해당 개체(테이블)의 권한을 사용자에게서 취소

- WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한 부여

- GRANT OPTION FOR : 다른 사용자에게 부여받은 권한을 부여할 수 있는 권한 취소 

- CASCADE : 권한 취소시 해당 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소

- COMMIT : 트랜잭션이 성공적으로 끝나면 변경된 모든 내용을 반영하는 명령어 

- ROLLBACK : commit 되지 않은 변경된 내용들을 취소하고 이전 상태로 되돌림. 만약 SAVEPOINT 없이 롤백한다면 최근 커밋 바로 이후 부터 적용이 된다.

- SAVEPOINT : 트랜잭션 내에 ROLLBACK할 위치를 지정하는 명령어

 

3. DML -> 저장된 데이터를 실질적으로 관리하는 명령어

- INSERT INTO 테이블명(속성1, 속성2..) VALUES(데이터1, 데이터2...); -> 테이블에 튜플을 삽입하는 명령어

- DELETE FROM 테이블명 WHERE 속성명 = 데이터 -> 속성이 해당 데이터인 튜플 삭제

- UPDATE 테이블명 SET 속성명 = 바꿀 데이터 WHERE 속성명 = 데이터 -> 해당 튜플의 속성의 데이터를 변경

- SELECT 부서,COUNT(*)  FROM 상여금 WHERE 상여금>=100 GROUP BY 부서 HAVING COUNT(*)>=2 ORDER BY 나이 ASC

-> 상여금 테이블에서 상여금이 100보다 큰 검색대상을 먼저 추린다. 그 후 부서별로 그룹을 지정한 후 부서 중 요소가 2개이상의 부서들의 총 요소개수를 부서의 나이 속성을 오름차순으로 출력한다.

- SELECT DISTINCT 속성명 FROM 테이블 WHERE 조건 -> 해당 테이블의 속성에 맞는 테이블 중 해당 속성명이 곂친 중복 튜플들을 삭제하고 하나의 튜플만 출력한다. 만약 DISTINCT 뒤에 속성명이 여러개가 붙으면 중복 튜플의 조건은 붙은 모든 튜플이 같은애를 중복된 튜플로 인식한다.

 

4. JOIN -> 2개의 테이블을가져와 결합하여 새로운 릴레이션을 반환하는 명령어

- SELECT 속성명 FROM 테이블명1, 테이블명2 WHERE 테이블명1.속성 = 테이블명2.속성; -> 해당속성이 같은 값을 가지는 행 반환

- SELECT 속성명 FROM 테이블명1 NATURAL JOIN 테이블명2; -> 두 테이블에 도메인과 이름이 같은 속성이 존재할때 해당 속성의 값이 같은 애들을 반환

- SELECT 속성명 FROM 테이블명1 LEFT OUTER JOIN 테이블명2 ON 테이블명1. 속성 = 테이블명2.속성

-> 일단 왼쪽 테이블명1 테이블을 모두 나타내 준 후 오른쪽 테이블2를 WHERE절 속성 기준으로 나타낸다. RIGHT는 반대, FULL은 둘다 적용