공부/정보처리기사

8장 SQL 응용

edcrfv458 2025. 7. 4. 22:42

CREATE INDEX

  • 인덱스를 정의하는 명령문
  •  UNIQUE
    • 사용된 경우: 중복 값이 없는 속성으로 인덱스를 생성
    • 생략된 경우: 중복 값을 허용하는 속성으로 인덱스를 생성
  • 정렬 여부 지정
    • ASC: 오름차순 정렬 ➡️ Default 값
    • DESC: 내림차순 정렬
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명 [ASD | DESC][,속성명 [ASD | DESC]])
[CLUSTER];

 

ALTER TABLE

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

 

DROP

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

 

DML (데이터 조작어)

  • 삽입문 (INSERT INTO~)
INSERT INTO 테이블명([속성명1, 속성명2, ...])
VALUES (데이터1, 데이터2, ...);

ex) <사원> 테이블에 (이름:홍승현, 부서:인터넷) 삽입
INSERT INTO 사원(이름, 부서) VALUES ('홍승현', '인터넷');
  • 삭제문 (DELETE FROM~)
    • 모든 레코드 삭제해도 테이블 구조는 남아있기 때문에 테이블 완전히 제거하는 DROP 과는 다름
DELETE FROM 테이블명 [WHERE 조건];

ex) <사원> 테이블에서 '임꺽정'에 대한 튜플 삭제
DELETE FROM 사원 WHERE 이름 = '임꺽정';
  • 갱신문 (UPDATE~ SET~)
UPDATE 테이블명
SET 속성명 = 데이터[, 속성명=데이터, ...]
[WHERE 조건];

ex) <사원> 테이블에서 '황진이'의 부서를 '기획부'로 변경하고 '기본급'을 5만원 인상
UPDATE 사원
SET 부서 = '기획', 기본급 = 기본급 + 5
WHERE 이름 = '황진이';
  • SELECT
    • PREDICATE: 검색한 튜플 수를 제한하는 명령어
      • DISTINCT: 중복된 튜플이 있을 경우 첫 번째만 표시
    • 속성명: 검색하여 불러올 속성 또는 속성을 이용한 수식을 지정
    • AS: 속성이나 연산의 이름을 다른 이름으로 표시하기 위해 사용
SELECT [PREDICATE] [테이블명.]속성명 [AS 별칭][, [테이블명.]속성명, ...]

 

기본 검색

  • SELECT 절 이용
ex) <사원> 테이블의 모든 튜플 검색
SELECT * FROM 사원;

ex) <사원> 테이블에서 주소를 검색하되 같은 주소는 한번만 출력
SLECT DISTINCT 주소 FROM 사원

 

조건 지정 검색

  • WHERE 절 이용
  • 비교 연산자
    • =, <> (같지 않다), >, <, >=, <=
  • 논리 연산자
    • NOT, AND, OR
  • LIKE 연산자
    • 대표 무자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색
    • % ➡️ 모든 문자 대표
    • _ ➡️ 문자 하나 대표
    • # ➡️ 숫자 하나 대표
  • IN 연산자
    • 필드의 값이 IN 연산자의 수로 지정된 값과 같은 레코드만 검색하여, OR 연산을 수행한 결과와 같음

 

정렬 검색

  • ORDER BY 절 이용
    • ASC: 오름차순 ➡️ Default 값
    • DESC: 내림차순

 

하위 질의

  • 조건절에 주어진 질의를 먼저 수행해 그 검색 결과를 조건절의 피연산자로 사용
    • ALL ( )는 하위 질의로 검색된 범위를 기본 질의의 조건으로 사용
ex) 취미가 나이트댄스인 사원의 이름과 주소 검색
SELECT 이름, 주소
FROM 사원
WHERE 이름 = (SELECT 이름 FROM 여가활동 WHERE 취미 = '나이트댄스');

ex) 망원동에 거주하는 사원들의 기본급보다 적은 기본급 받는 사원의 정보 검색
SELECT 이름, 기본급, 주소
FROM 사원
WHERE 기본급 < ALL (SELECT 기본급 FROM 사원 WHERE 주소 = '망원동');

 

그룹 함수

  • COUNT( ) ➡️ 그룹별 튜플 수
  • SUM
  • AVG
  • MAX
  • MIN
  • STDDEV( ) ➡️ 그룹별 표준편차
  • VARIANCE( ) ➡️ 그룹별 분산

 

그룹 지정 검색

  • GROUP BY 절 이용
ex) 상여금 테이블에서 상여금이 100 이상인 사원이 2명 이사인 부서의 튜플 수
SELECT 부서, COUNT(*) AS 사원수
FROM 상여금
WHERE 상여금 >= 100
GROUP BY 부서
HAVING COUNT(*) >= 2;

 

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

  • UNION ➡️ 합집합
    • 중복된 행은 한 번만 출력
  • UNION ALL ➡️ 합집합
    • 중복된 행도 여러번 출력
  • INTERSECT ➡️ 교집합
    • 공통된 행만 출력
  • EXCEPT ➡️ 차집합
    • 첫 번째 SELECT문에서 두 번째 SELECT문의 결과를 제외한 행 출력

 

EQUI JOIN (동등 조인)

  • THETA JOIN: 두 릴레이션의 속성 값을 비교하여 조건 만족하는 튜플만 반환
    • 조건에는 =, !=, <, <=, >, >=가 있음
  • EQUI (동등) JOIN: = 비교에 의해 같은 값을 가지는 행을 연결하여 결과를 생성
  • NATURAL JOIN: 중복된 속성을 제거하여 같은 속성을 한 번만 표기

 

OUTER JOIN

  • LEFT OUTER JOIN: INNER JOIN의 결과에서 우측 항 릴레이션의 어떤 튜플과도 맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여 추가
  • RIGHT OUER JOIN: 반대