정보처리기사

[정보처리기사] 실기 - SQL 응용

2023. 4. 16. 18:52
목차
  1. DDL
  2. CREATE DOMAIN
  3. CREATE TABLE
  4. CREATE VIEW
  5. CREATE INDEX
  6. ALTER TABLE
  7. DROP
  8. DCL
  9. GRANT/REVOKE
  10. ROLLBACK
  11. SAVEPOINT
  12. DML
  13. 삽입문 (INSERT INTO ~)
  14. 삭제문 (DELETE FROM ~)
  15. 갱신문 (UPDATE ~ SET ~)
  16. SELECT
  17. 조건 지정 검색
  18. 정렬 검색
  19. 하위 질의
  20. 그룹 함수
  21. 그룹 지정 검색
  22. 집합 연산자를 이용한 통합 질의
  23. JOIN
  24. EQUI JOIN
  25. OUTER JOIN
  26. 트리거
  27. 커서
  28. DBMS 접속 기술의 종류
  29. 동적 SQL
  30. ORM
  31. 쿼리 성능 관련 용어

DDL

  • DB를 구축하거나 수정할 목적으로 사용하는 언어
  • CREATE : SCHEMA , DOMAIN, TABLE, VIEW, INDEX를 정의
  • ALTER : TABLE 에 대한 정의를 변경하는데 사용함
  • DROP : SCHEMA,  DOMAIN, TABLE, VIEW, INDEX를 삭제

 

CREATE DOMAIN

  • 도메인을 정의하는 명령문
  • 표기형식
CREATE DOMAIN 도메인명 [AS] 데이터_타입
[DEFAULT 기본값]
[CONSTRAINT 제약조건명 CHECK (범위값)];

 

ex) '성별'을 '남' 또는 '여'와 같이 정해진 1개의 문자로 표현되는 도메인 SEX를 정의하는 SQL문 작성

CREATE DOMAIN SEX CHAR(1)
DEFAULT '남'
CONSTRAINT VALID-SEX CHECK(VALUE IN('남', '여'));

 

CREATE TABLE

  • 테이블을 정의하는 명령문
  • 표기 형식
CREATE TABLE 테이블명
  (속성명 데이터_타입 [DEFAULT 기본값][NOT NULL], ...
  [,PRIMARY KEY (기본키, 속성명...)]
  [,UNIQUE(대체키, 속성명 ...)]
  [,FOREIGN KEY(외래키_속성명,...)]
         REFERENCES 참조테이블 (속성명 ...)[
         [ON DELETE 옵션]
         [ON UPDATE 옵션]
  [,CONSTRAINT 제약조건명][CHECK (조건식)];

 

ex) <사원> 테이블을 정의하는 SQL문, 요구사항을 만족하는 SQL문을 작성하라.

  • '근무지번호'는 <근무지> 테이블의 '근무지번호'를 참조하는 외래키이다.
  • <근무지> 테이블에서 '근무지번호'가 사가제되면 <사원> 테이블의 '근무지번호'도 삭제된다.
CREATE TABLE 사원 (
    사원번호 NUMBER(4) PRIMARY KEY,
    사원명 VARCHAR(10),
    근무지번호 NUMBER(2) FOREIGN KEY REFERENCES 근무지
        ON DELETE CASCADE));

 

CREATE VIEW

  • 뷰(View)를 정의하는 명령문
  • 표기 형식
CREATE VIEW 뷰명 [(속성명[, 속성명 ...])]
AS SELECT 문

 

ex) 요구사항을 만족하는 뷰 <CC> 를 정의하는 SQL 문을 작성하라.

  • <Course>와 <Instruction> 릴레이션을 이용한다.
  • <Course>의 'Instructor' 속성 값과 <instructor>의 id 속성이 같은 자료에 대한 view 를 정의한다.
  • <CC> 뷰는 'ccid', 'ccname', 'instname' 속성을 가진다.
  • <CC> 뷰는 <Course> 테이블의 'id', 'name' , <Instructor> 테이블의 'name' 속성을 사용한다.
CREATE VIEW CC(ccid, ccname, instname)
AS SELECT Course.id, Course.name, Instructor.name
FROM Course, Instructor
WHERE Course.instructor = instructor.id

 

 

CREATE INDEX

  • 인덱스를 정의하는 명령문
  • 표기 형식
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명 [ASC | DESC][, 속성명[ASC|DESC])
[CLUSTER];

 

ex) student 테이블에서 name 속성으로 idx_name 이라는 인덱스를 생성하는 SQL 문을 작성해라

CREATE INDEX idx_name
ON student(name)

 

ALTER TABLE

  • 테이블에 대한 정의를 변경하는 명령문
  • 표기 형식
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];
  • ADD : 새로운 속성(열)을 추가할 때 사용
  • ALTER : 특정 속성의 Default 값을 변경할 때 사용
  • DROP COLUMN : 특정 속성을 삭제할 때 사용

 

ex) <학생> 테이블에 20자의 가변 길이를 가진 '주소' 속성을 추가하는 SQL 문을 작성해라

ALTER TABLE 학생 ADD 주소 VARCHAR(20)

 

DROP

  • 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스, 제약 조건등을 제거하는 명령문
  • 표기 형식
DROP SCHEMA 스키마명 [CASCADE|RESTRICT];
DROP DOMAIN 도메인명 [CASCADE|RESTRICT];
DROP TABLE 테이블명 [CASCADE|RESTRICT];
DROP VIEW 뷰명 [CASCADE|RESTRICT];
DROP INDEX 인덱스명 [CASCADE|RESTRICT];
DROP CONSTRAINT 제약조건명;
  • CASCADE : 제거할 요소를 참조하는 다른 모든 개체를 함께 제거
  • RESTRICT : 다른 개체가 제거할 요소를 참조중일 때는 제거를 취소함

 

ex) <학생> 테이블을 제거하되, <학생> 테이블을 참조하는 모든 데이터를 함께 제거하는 SQL 문을 작성해라

DROP TABLE 학생 CASCADE;

 

 

DCL

  • 데이터의 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용하는 언어
  • 종류
COMMIT 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고 작업 완료를 관리자에게 알려줌
ROLLBACK  DB 조작 작업이 비정상적으로 종료되었을 때 원래 상태로 복구
GRANT DB 사용자에게 사용 권한을 부여함
REVOKE  DB 사용자의 사용 권한을 취소함

 

 

GRANT/REVOKE

  • GRANT : 권한 부여를 위한 명령어
  • REVOKE : 권한 취소를 위한 명령어
  • 표기 형식
// GRANT
GRANT 권한 리스트 ON 개체 TO 사용자 [WITH GRANT OPTION]

// REVOKE
REVOKE [GRANT OPTION FOR] 권한_리스트 ON 개체 FROM 사용자[CASCADE]

 

ex) 사용자 PARK에게 테이블 [STUDENT]의 데이터를 갱신할 수 있는 시스템 권한을 부여하는 SQL 문을 작성해라

GRANT UPDATE ON STUDENT TO PARK;

 

ex) 사용자 PARK에게  테이블 [STUDENT] 의 데이터를 갱신할 수 있는 시스템 권한을 취소하는 SQL 문을 작성해라

REVOKE UPDATE ON STUDENT FROM PARK;

 

 

ROLLBACK

  • 변경되었으나 아직 COMMIT 되지 않은 모든 내용들을 취소하고 데이터베이스를 이전 상태로 되돌리는 명령어

 

SAVEPOINT

  • 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어

 

DML

  • 저장된 데이터를 실질적으로 관리하는데 사용되는 언어
  • DML의 유형 (SELECT , INSERT , DELETE , UPDATE)

 

삽입문 (INSERT INTO ~)

  • 표기 형식
INSERT INTO 테이블명([속성명1, 속성명2 ...]) VALUES (데이터1,데이터2 ...);

 

ex) <사원> 테이블에 이름, 부서, 생일, 주소, 기본급 속성이 있을 때 <사원> 테이블에 있는 편집부의 모든 튜플을 편집부원(이름, 생일, 주소, 기본급) 테이블에 삽입하는 SQL 문을 작성해라

INSERT INTO 편집부원(이름,생일,주소,기본급)
SELECT 이름, 생일, 주소, 기본급
FROM 사원
WHERE 부서 = '편집';

 

 

삭제문 (DELETE FROM ~)

  • 표기 형식
DELETE FROM 테이블명 [WHERE 조건]

 

ex) <사원> 테이블에서 부서가 "인터넷"인 모든 튜플을 삭제하는 SQL을 작성해라

DELETE FROM 사원
WHERE 부서 = '인터넷';

 

 

갱신문 (UPDATE ~ SET ~)

  • 표기 형식
UPDATE 테이블명
SET 속성명 = 데이터 ...
[WHERE 조건];

 

ex) <사원> 테이블에서 "황진이"의 "부서"를 "기획부"로 변경하고 "기본급"을 5만원 인상시키는 SQL문을 작성해라.

UPDATE 사원
SET 부서 = '기획부', 기본급 = 기본급 + 5
WHERE 이름 = '황진이';

 

 

SELECT

  • 표기 형식
SELECT [PREDICATE][테이블명] 속성명[AS 별칭] ...
FROM 테이블명[, 테이블명 ...]
[WHERE 조건]
[GROUP BY 속성명, 속성명 , ...]
[HAVING 조건]
[ORDER BY 속성명 [ASC|DESC]
  • PREDICATE : 검색할 튜플 수를 제한하는 명령어를 기술 (= DISTINCT : 중복된 튜플은 첫 번째 한개만 표시)

ex) <사원> 테이블에서 '주소'만 검색하되 같은 '주소'는 한 번만 출력하는 SQL문을 작성해라.

SELECT DISTINCT 주소 FROM 사원;

 

 

조건 지정 검색

  • 비교 연산자 : = , < > (같지 않다) , > , < , >= , <=
  • 논리 연산자 : NOT , AND, OR
  • LIKE 연산자 : % (모든 문자 대표) , _ (문자 하나 대표) , #(숫자 하나를 대표)

 

ex) <사원> 테이블에서 성이 '김'인 사람과 '생일'이 '01/01/69' 에서 '12/31/73' 사이인 튜플을 검색하는 SQL문을 작성해라

SELECT *
FROM 사원
WHERE (이름 LIKE '김%') AND (생일 BETWEEN #01/01/69# AND #12/31/73#)

 

정렬 검색

  • ORDER BY 절에 특정 속성을 지정하여 지정된 속성으로 자료를 정렬해 검색

 

ex) <사원> 테이블에서 '부서'를 기준으로 오름차순 , '이름'을 기준으로 내림차순 정렬 시켜 검색하는 SQL 문을 작성해라

SELECT *
FROM 사원
ORDER BY 부서 ASC, 이름 DESC;

 

 

하위 질의

  • 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용

 

ex) '취미'가 '나이트댄스'인 사원의 '이름'과 '주소'를  검색하는 SQL 문을 작성해라

SELECT 이름, 주소
FROM 사원
WHERE 이름 = (SELECT 이름 FROM 여가활동 WHERE 취미 = '나이트댄스');

 

 

그룹 함수

  • COUNT(속성명) : 그룹별 튜플 수 구하는 함수
  • SUM(속성명) : 그룹별 합계 구하는 함수
  • AVG(속성명) : 그룹별 평균을 구하는 함수
  • MAX(속성명) : 그룹별 최대값을 구하는 함수
  • MIN(속성명) : 그룹별 최소값을 구하는 함수
  • STDDEV(속성명) : 그룹별 표준편차 구하는 함수
  • VARIANCE(속성명) : 그룹별 분산을 구하는 함수

 

그룹 지정 검색

  • GROUP BY 절에 지정한 속성을 기준으로 자료를 그룹화하여 검색한다.

ex) <상여금> 테이블에서 '상여금'이 100이상인 사원이 2명이상인 '부서'의 튜플수를 구하는 SQL 문을 작성해라.

SELECT 부서, COUNT(*) AS 사원수
FROM 상여금
WHERE 상여금 >= 100
GROUP BY 부서
HAVING COUNT(*) >= 2;

 

 

집합 연산자를 이용한 통합 질의

  • UNION : 두 SELECT 문의 조회 결과를 통합하여 모두 출력 (중복은 한 번만 출력)
  • UNION ALL : UNION 과 동일하지만 중복 행도 모두 출력
  • INTERSECT : 두 SELECT 문 조회 결과 중 공통된 행만 출력 (교집합)
  • EXCEPT : 첫 번째 SELECT문의 조회 결과에서 두 번째 SELECT문의 조회 결과를 제외한 행 출력 (차집합)

 

JOIN

  • 연관된 튜플들을 결합하여 , 하나의 새로운 릴레이션을 반환
  • INNER JOIN, OUTER JOIN으로 구분

 

EQUI JOIN

  • 대상 테이블에서 공통 속성을 기준으로 = (equal) 비교에 의해 같은 값을 가지는 행을 연결해 결과를 생성하는 INNER JOIN 방법

WHERE절을 이용한 EQUI JOIN의 표기

SELECT [테이블명1] 속성명 , [테이블명2] 속성명, ...
FROM 테이블명1, 테이블명2 ...
WHERE 테이블명1.속성명 = 테이블명2.속성명

 

NATURAL JOIN절을 이용한 EUQI JOIN의 표기 형식

SELECT [테이블명1] 속성명 , [테이블명2] 속성명, ...
FROM 테이블명1 NATURAL JOIN 테이블명2

 

JOIN ~ USING 절을 이용한 EQUI JOIN의 표기 형식

SELECT [테이블명1]속성명, [테이블명2]속성명 ...
FROM 테이블명1 JOIN 테이블명2 USING (속성명);

 

 

OUTER JOIN

  • INNER JOIN의 결과를 구한 후 우측 항 릴레이션의 어떤  튜플과도 맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여 INNER JOIN의 결과에 추가함
  • 표기 형식
SELECT [테이블명1]속성명, [테이블명2]속성명, ...
FROM 테이블명1 LEFT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;

 

 

트리거

  • 이벤트가 발생할 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL

 

커서

  • 쿼리문의 처리 결과가 저장되어 있는 메모리 공간을 가리키는 포인터(Pointer)
  • 묵시적 커서 : 자동으로 생성되는 커서 (DBMS에 의해)
  • 명시적 커서 : 사용자가 직접 정의해서 사용하는 커서
  • 속성의 종류
SQL%FOUND 쿼리 수행 결과로 패치된 튜플 수가 1개 이상이면 TRUE
SQL%NOTFOUND 쿼리 수행 결과로 패치된 튜플 수가 0개이면 TRUE
SQL%ROWCOUNT 쿼리 수행 결과로 패치 된 튜플수를 반환
SQL%ISOPEN 커서가 열린 상태면 TRUE , 묵시적 커서는 자동 생성후 자동 닫히므로 항상 FALSE

 

DBMS 접속 기술의 종류

  • DBMS에 접근하기 위해 사용하는 API 또는 API의 사용을 편리하게 도와주는 프레임워크
  • JDBC : Java언어로 DB 접속 시 사용하는 표준 API
  • ODBC : 언어 관계 없이 DB 접근을 위한 표준 개방형 API ( MS사에서 개발 )
  • MyBatis : JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크 , SQL문장을 분리해 XML 파일을 만들고 Mapping을 통해 SQL을 실행한다.

 

동적 SQL

  • SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리 방식

 

ORM

  • 객체와 관계형 데이터베이스의 데이터를 연결하는 기술
  • 종류
기반 언어 ORM 프레임워크
Java JPA, Hibernate, EcplishLink, DataNucleus, Ebean 등
C++ ODB, QxOrm
Python Django, SQLAIchemy, Storm
.NET NHibernate, DatabaseObjects, Dapper
PHP Doctrine, Propel, RedBean

 

쿼리 성능 관련 용어

  • APM : 성능 관리를 위해 접속자, 자원 현황, 트랜잭션 수행 내역 등 다양한 모니터링 기능을 제공하는 도구
  • 옵티마이저 (Optimizer) : 작성된 SQL이 가장 효율적으로 수행되도록 최적의 경로를 찾아주는 모듈
    • RBO : DBA가 사전에 정의해둔 규칙에 의거하여 경로를 찾는 규칙 기반 옵티마이저
    • CBO : 입출력 속도, CPU 사용량, 블록 개수 등을 종합하여 산출되는 '비용'으로 최적의 경로 찾는 비용 기반 옵티마이저
  • 실행 계획 : DBMS의 옵티마이저가 수립한 SQL 코드의 실행 절차와 방법
  • 힌트 : SQL문에 추가되어 테이블 접근 순서를 변경하거나, 인덱스 사용을 강제하는 등 실행 계획에 영향을 줄 수 있는 문장
  • IOT : 인덱스 안에 테이블 데이터를 직접 삽입하여 저장함으로써 주소를 얻는 과정을 생략하여 빠른 조회가 가능하도록 구성한 테이블

 

 

  1. DDL
  2. CREATE DOMAIN
  3. CREATE TABLE
  4. CREATE VIEW
  5. CREATE INDEX
  6. ALTER TABLE
  7. DROP
  8. DCL
  9. GRANT/REVOKE
  10. ROLLBACK
  11. SAVEPOINT
  12. DML
  13. 삽입문 (INSERT INTO ~)
  14. 삭제문 (DELETE FROM ~)
  15. 갱신문 (UPDATE ~ SET ~)
  16. SELECT
  17. 조건 지정 검색
  18. 정렬 검색
  19. 하위 질의
  20. 그룹 함수
  21. 그룹 지정 검색
  22. 집합 연산자를 이용한 통합 질의
  23. JOIN
  24. EQUI JOIN
  25. OUTER JOIN
  26. 트리거
  27. 커서
  28. DBMS 접속 기술의 종류
  29. 동적 SQL
  30. ORM
  31. 쿼리 성능 관련 용어
'정보처리기사' 카테고리의 다른 글
  • [정보처리기사] 실기 - 프로그래밍 언어 활용
  • [정보처리기사] 실기 - 소프트웨어 개발 보안 구축
  • [정보처리기사] 실기 - 애플리케이션 테스트 관리
  • [정보처리기사] 실기 - 화면 설계
엥재
엥재
Development Blog
엥재
Zerozae
엥재
전체
오늘
어제
  • 분류 전체보기
    • ABAP
    • 데브코스
      • TIL
    • AWS
    • Error
    • 정보처리기사
    • SQLD
    • CS
      • HTTP
      • DataBase
      • OS
    • 기타
      • 가상 면접 사례로 배우는 대규모 시스템 설계 기초
    • Programming
      • 기타
      • Spring
      • Java

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백엔드 데브코스
  • 빈 생명주기
  • di
  • 의존관계
  • 디자인 패턴
  • 싱글톤 컨테이너
  • 캐시가능
  • 빈 스코프
  • 의존관계 주입
  • 스프링
  • 교착 상태
  • 자바 Thread
  • DI컨테이너
  • HTTP 메서드
  • IoC컨테이너
  • 컴포넌트 스캔
  • 데브코스
  • 상태 제어
  • 프로그래머스
  • 상태코드
  • 함수형 인터페이스
  • 스프링 빈
  • 퍼사드
  • HTTP
  • 데몬스레드
  • http 상태코드
  • 스프링 컨테이너
  • 어댑터 패턴
  • 퍼사드 패턴
  • 요구사항 확인

최근 댓글

최근 글

hELLO · Designed By 정상우.
엥재
[정보처리기사] 실기 - SQL 응용
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.