SQLD

[SQLD 개념 요약] 관계형 데이터베이스(DBMS)

하부루 2024. 11. 10. 22:45

데이터베이스와 DBMS

  • 데이터베이스 : 데이터의 집합
  • DBMS : 데이터를 효과적으로 관리하기 위한 시스템(Oracle, MySQL)

DBMS 구성 요소

  • 계정 : 데이터 접근 제한을 위한 계정이 존재
  • 테이블: DBMS의 DB에서 데이터가 저장되는 형식
  • 스키마 : 테이블의 기본적인 구조를 정의

테이블이란

  • 행(로우)와 열(컬럼)을 갖는 2차원 구조로 구성
  • 컬럼은 속성이라고도 부름

테이블의 특징

  • 하나의 테이블은 반드시 하나의 계정 소유여야 함
  • 테이블 간의 관계는 1:1, 1:N, N:N의 관계를 가질 수 있다
  • 테이블 명은 중복될 수 없지만 테이블을 소유한 계정이 다를 경우 같은 이름으로 생성 가능

SQL

  • DBMS에서 데이터 조회 및 조작, 시스템 관리 기능을 명령하는 언어
  • SQL 문법은 대소문자를 구분하지 않는다

DBMS의 특징

  • 신뢰성이 높고 데이터의 무결성을 보장
  • 데이터의 정렬 및 탐색 속도가 빠름

데이터 무결성이란

  • 데이터의 정확성과 일관성을 유지하고 데이터에 부정합이 없음을 보장하는 것

데이터 무결성 종류

  • 개체 무결성 : 테이블의 기본키는 NULL이나 중복값을 가질 수 없다
  • 참조 무결성 : 외래키 값은 NULL이거나 참조 테이블의 기본키 값과 동일 해야한다
  • 도메인 무결성 : 주어진 속성 값이 정의된 도메인에 속한 값 이어야 한다
  • NULL 무결성 : 특정 속성에 대해 NULL을 허용하지 않는 특성
  • 고유 무결성 : 특정 속성에 대해 값이 중복되지 않는 특징
  • 키 무결성 : 하나의 관계에는 적어도 하나의 키가 존재 해야한다

SQL 종류

  • DDL : CREATE, ALTER, DROP, TRUNCATE
  • DML : INSERT, DELETE, UPDATE, MERGE
  • DCL : GRANT, REVOKE
  • TCL : COMMIT, ROLLBACK
  • DQL : SELECT

SELECT문 구조

  • FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 순으로 실행 된다
  • *를 사용하여 전체 컬럼 명을 조회 가능

컬럼 Alias(별칭)

  • 정의
    • 컬럼 명 대신 출력 할 임시 이름 지정(SELECT 절에서만 정의 가능)
    • 컬럼명 뒤에 AS와 컬럼 별칭 전달(AS는 생략 가능)
  • 특징 및 주의사항
    • SELECT 문 보다 늦게 출력되는 ORDER BY 절에서만 컬럼 별칭 사용 가능
    • 이미 존재하는 예약어는 별칭으로 사용 불가(avg, count, decode, 등등)
    • 별칭에 공백이나 특수문자를 포함하는 경우 쌍따옴표 전달 필요

FROM 절

  • 데이터를 불러 올 테이블 명 또는 뷰 명 전달
  • 테이블 여러개 전달 가능(, 로 구분)
  • 테이블 별칭 선언 가능(ORCALE은 AS 사용 불가, SQL Server는 사용/생략 가능)
  • ORACLE 에서는 FROM 절 생략 불가(DUAL 테이블을 선언하여 대체)
  • SQL Server에서는 FROM 절이 필요없는 경우 생략 가능

함수 정의

  • input value와 output value의 관계를 정의한 객체
  • from 절을 제외한 모든 절에서 사용 가능

함수의 기능

  • 데이터의 계산을 수행
  • 데이터의 정보를 수정
  • 데이터의 유형(type)을 변경

함수의 종류

  • 단일행 함수와 복수행 함수로 구분
  • 단일행 함수 : input과 output 관계가 1:1
  • 복수행 함수 : 여러개의 데이터를 받아서 하나의 값으로 요약해서 리턴

타입에 따른 함수 종류 분류

 

WHERE 절

  • 테이블의 데이터 중 원하는 조건에 맞는 데이터만 조회하고 싶을 경우 사용
  • NULL 조회 시 IS NULL 또는 IS NOT NULL 연산자 사용

GROUP BY 절

  • 각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문
  • GROUP BY 절에 그룹으로 지정할 컬럼을 전달(여러개 가능)
  • 그룹에 대한 조건은 WHERE에서 정의 불가능
  • GROUP BY 절을 사용하면 데이터가 요약되므로 요약되기 전 데이터와 함께 출력 불가능

HAVING 절

  • 그룹 함수 결과를 조건으로 사용할 때 사용한다
  • 연산 순서가 SELECT 절 보다 먼저이므로 SELECT 절에서 선언 된 Alias 사용 불가

ORDER BY 절

  • 출력되는 행의 순서를 사용자가 변경하고자 할 때 사용
  • 유일하게 SELECT 절에 정의한 컬럼 별칭 사용 가능
  • SELECT 절에 선언 된 순서대로의 숫자 전달 가능

ORDER BY 절 정렬 순서(오름차순)

  • 한글 : 가, 나, 다, 라 ...
  • 영어 : A, B, C, D ...
  • 숫자 : 1, 2, 3, 4 ...
  • 날짜 : 과거 날짜부터 최근 날짜로 정렬

NULL의 정렬

  • ORACLE 에서는 기본적으로 NULL을 마지막에 배치(NULL LAST)
  • SQL Server 에서는 기본적으로 NULL을 처음에 배치(NULL FIRST)

JOIN 이란

  • 여러 테이블의 데이터를 사용하여 데이터를 동시 출력하거나 참조 할 경우 사용
  • FROM 절에 JOIN 할 테이블 나열
  • ORACLE 은 테이블 나열 순서 중요하지 않음
  • ANSI 표준에서는 OUTER JOIN 시 테이블 나열 순서 중요함
  • 동일한 열 이름이 테이블에 존재할 경우 테이블 Alias를 선언하여 구분
  • N개의 테이블을 JOIN 하려면 최소 N-1 개의 조인 조건이 필요함

JOIN 종류

  • EQUI JOIN : JOIN 조건이 동등 조건인 경우
  • NON EQUI JOIN : JOIN 조건이 동등 조건이 아닌 경우
  • INNER JOIN : JOIN 조건에 성립하는 데이터만 출력하는 경우
  • OUTER JOIN : JOIN 조건에 성립하지 않는 데이터라도 출력하는 경우(LEFT JOIN, RIGHT JOIN)
  • NATURAL JOIN : JOIN 조건 생략 시 두 테이블에 같은 조건 끼리 같은 이름으로 자연 연결되는 JOIN
  • CROSS JOIN : JOIN 조건 생략 시 두 테이블에 발생 가능한 모든 행을 출력하는 JOIN(M * N 개 행 출력)
  • SELF JOIN : 하나의 테이블을 두 번 이상 참조하여 연결하는 JOIN

ON 절

  • ON 조건의 괄호는 생략 가능
  • 컬럼명이 같을 경우 별칭을 사용하여 명확하게 지정

USING 조건 절

  • JOIN 할 테이블 컬럼명이 같을 경우 사용
  • Alias나 테이블 이름을 사용 불가
  • 괄호 필수

OUTER JOIN 이란

  • JOIN 조건에서 동일한 값이 없는 행도 반환 하고싶을 때 사용
  • 조회하고 싶은 테이블 방향에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분

OUTER JOIN의 종류

  • LEFT OUTER JOIN
    • 왼쪽 테이블이 기준이 되어 오른쪽 테이블 데이터를 표현하는 방식
    • 오른쪽 테이블에 값이 없는 경우 NULL로 표시
  • RIGHT OUTER JOIN
    • 왼쪽 테이블이 기준이 되어 오른쪽 테이블 데이터를 표현하는 방식
    • 왼쪽 테이블에 값이 없는 경우 NULL로 표시
  • FULL OUTER JOIN
    • LEFT JOIN 과 RIGHT JOIN 을 합친 방식(UNION 연산과 동일)