SQLD 공부 PART 2 - CH1. SQL 기본

SQLD - Week 2 - Part2 - CH1. SQL 기본

  • 책 <2023 유선배 SQL개발자(SQLD) 과외노트>로 기본 이론 단권화
  • 유튜브 <홍쌤의 데이터랩>, 강의자료 참고

1. 관계형 데이터베이스

  • RDBMS: 관계형 데이터베이스를 효과적으로 관리하기 위한 시스템
    • Oracle, MySQL, MariaDB.. 등

      관계형 데이터베이스 구성요소

  • 계정 : 데이터 접근제한을 위한 업무별/시스템별 계정으로 나뉨
  • 테이블 : RDBMS의 DB안에서 데이터가 저장되는 형식
  • 스키마 : 테이블이 어떤 구성으로 되어있는지, 어떠한 정보를 가지고 있는지에 대한 기본구조를 정의

테이블

  • RDB의 기본단위
  • 엑셀에서 워크시트처럼 행/열을 갖는 2차원 구조
    • row : 인스턴스 / column : 속성
  • 데이터를 입력,저장하는 최소단위
    • 행 단위로 데이터 입력, 삭제
    • 값 단위로 수정 가능
  • 하나의 테이블은 반드시 하나의 유저(계정) 소유여야함
  • 테이블명은 중복X
    • but, 소유자가 다른 경우 같은 이름 테이블 생성 가능
  • 객체 : 생성하고 변경할수 있는 하나의 관리 대상

관계형 데이터베이스 특징

  • 데이터 분류, 정렬, 탐색 속도가 빠름
  • 신뢰성 높음
  • 데이터의 무결성 보장
  • 기존 작성된 스키마를 수정하기 어려움
  • 데이터베이스의 부하를 분석하기 어려움

데이터 무결성(integrity)

  • 데이터의 정확성과 일관성을 유지하고, 데이터에 결손과 부정합이 없을을 보증하는 것 => “결점이 없다”
    • 데이터베이스에 저장된 값 == 표현하는 현실 비즈니스 모델의 값이 일치 : 정확성
  • 데이터 무결성을 유지하는게 데이터베이스관리시스템의 중요한 기능

[종류]

  • 개체 무결성 : 테이블의 기본키를 구성하는 컬럼(속성)은 NULL/중복값 X
  • 참조 무결성 : 외래키 값은 NULL 이거나 참조 테이블의 기본키 값과 동일해야함
    • 외래키는 참조 테이블의 기본키에 정의된 데이터만 허용되는 구조이므로
  • 도메인 무결성 : 주어진 속성값은 정의된 도메인에 속한 값이어야함
  • NULL 무결성 : 특정 속성에 대해 NULL을 허용하지 않음
  • 고유 무결성 : 특정 속성에 대해 중복값을 허용하지 않음
  • 키 무결성 : 하나의 관계에는 적어도 하나의 키가 존재해야함
    • 테이블이 서로 관계가 있는 경우 반드시 하나 이상의 조인키를 가짐

SQL (Structured Query Language)

  • 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어
    • 데이터 조회, 조작, RDBMS 시스템 관리 기능을 명령

[종류]

구분 종류
DDL
(Data Definition Language)
CREATE, ALTER, DROP, TRUNCATE
DML
(Data Manipulation Language)
INSERT, DELETE, UPDATE, MERGE
DCL
(Data Control Language)
GRANT, REVOKE
TCL
(Transaction Control Language)
COMMIT, ROLLBACK
DQL
(Data Query Language)
SELECT
  • DDL : 테이블을 ‘정의’
    • 생성, 변경, 삭제 -> ‘구조’를 변경
    • auto commit
      • 한번 생성하면 되돌릴수 없음(ROLLBACK X)
      • TRUNCATE는 auto commit에 해당하기때문에 DDL!
        • 테이블을 그대로 두고 데이터를 모두 삭제
  • DML : 데이터를 변경
    • 입력, 삭제, 수정, 병합
  • DCL : 데이터를 권한으로 ‘컨트롤’
  • TCL : TRANSACTION에 해당하는 데이터 언어 관리

2. SELECT문

  • 6개의 절로 구성
    • SELECT * 컬럼명 표현식
    • FROM 테이블명 / 뷰명
    • WHERE 조회 조건
    • GROUP BY 그룹핑 컬럼명
    • HAVING 그룹핑 필터링 조건
    • ORDER BY 정렬 컬럼명
  • SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY 순서대로 실행

SELECT 절

  • 저장되어있는 데이터를 조회하려고 할때 사용하는 명령어
  • * : 테이블 내 전체 컬럼 조회
  • 원하는 컬럼을 , 로 나열해서 작성 가능(순서대로 출력됨)
  • 표현식 : 원래의 컬럼명을 제외한 모든 표현 가능한 대상(연산식, 기존 컬럼의 함수 변형식 포함)
  • 대소문자를 구분하지 않아도 인식
  • Alias(별칭) 지정 가능
    • AS 별칭
    • 별칭에 공백 있을 경우 “ “로 작성
      • e.g. “NEW SAL”
    • 컬럼 Alias : 컬럼명 대신 출력할 임시 이름 지정(SELECT 절에서만 정의 가능)

옵션

  • DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력(중복행 제거)
    • SELECT DISTINCT column_name FROM table

서브쿼리(sql 활용파트에서 자세히 설명)

  • 스칼라 서브쿼리 : SELECT 에 사용하는 서브쿼리
    • 서브쿼리의 결과를 ‘하나의 컬럼처럼 사용’하기 위해 사용

FROM 절

  • 테이블/뷰 명 전달
  • ORACLE에서는 생략 불가(의미상 필요없으면 DUAL 테이블 선언)
    • ORACLE 23c 버전부터는 생략 가능
  • 카티시안 곱 : 발생할수 있는 모든 경우가 발생
  • 테이블 Alias : 여러개의 테이블을 JOIN하거나 서브쿼리가 있을때 사용
    • 컬럼명 앞에 테이블명을 같이 명시해야하기때문
      • e.g.
          SELECT BAND.BAND_NAME, BAND_MEMBER.MEMBER_NAME
              FROM BAND, BAND_MEMBER
              WHERE BAND.BAND_CODE = BAND_MEMBER.BAND_CODE;
        

        👇

          SELECT B.BAND_NAME, BM.MEMBER_NAME
              FROM BAND B, BAND_MEMBER BM
              WHERE B.BAND_CODE = BM.BAND_CODE;