본문 바로가기

Cerificate/SQLD

[SQLD] 2과목 1장 SQL 기본 요약 - 관계형 데이터베이스, SELECT문 (구 관계형 데이터베이스~DDL / 2024 개정사항 반영)

728x90
반응형

※ 이전글: 2023.02.25 - [Cerificate/SQLD] - [SQLD] 1과목 2장 데이터 모델과 SQL (구 데이터 모델과 성능 요약 / 2024 개정사항 반영)

  2과목 SQL 기본 및 활용은 새롭게 개정됨에 따라 범위가 1과목에 비해 크게 바뀌었다. 기존에 기록한 것이 아까워 최대한 살리는 방향으로 진행하되 변경된 내용 또한 이전글에서처럼 보라색으로 표시해 시험 대비에 문제가 없도록 만전을 기하고자 한다.

  2과목은 SELECT문을 활용하는 방법을 묻는다고 봐도 과언이 아니다. 실무에서도 SELECT문이 80% 이상 사용된다고 한다. 이 글에서는 2과목의 SQL 기본 중에서 관계형 데이터베이스 개요, SELECT문을 소개할 것이다. 관계형 데이터베이스 개요는 이전에도 있던 파트라 거의 동일하다.  

※ 필독! SQL 기본 파트 순서: 데이터베이스 > 함수 > WHERE절 > GROUP BY~ORDER BY > JOIN + 표준조인    

 새로운 과목으로 넘어왔다. 하지만 아직 1과목을 온전히 나의 것으로 만들지 못한 상태다. 시간이 한정되어 계속 파고들기 보다는 진도를 나가며 모르는 부분을 반복해서 보는 것이 좋은 판단일 듯하다. 그럼 이번에도 Data On Air에 실린 2과목 1장, 'SQL 기본'의 내용을  정리하도록 하겠다.

 

Index

     

    2과목 SQL 기본 및 활용

    1장 SQL 기본

    1절 관계형 데이터베이스 개요

    1. 데이터베이스

    • DB : 일상적인 정보들을 모아 놓은 것 자체 | (일반적) 특정 기업이나 조직 또는 개인이 필요에 의해 데이터를 일정한 형태로 저장해 놓은 것.
    • DBMS (Database Management System)
      • 효율적인 데이터의 관리 + 예기치 못한 사건으로 인한 데이터의 손상을 피하고, 필요시 필요한 데이터를 복구하기 위한 강력한 기능의 소프트웨어.
      • 기존 DB에 더해 데이터 손상의 방지 및 복구 (백업), 접근 권한 부여 등의 기능을 지원하는 관리 체계 (이기적)
    • DB의 발전사
      • 1960's : 플로우차트 중심의 개발 방법 사용. 파일 구조를 통해 데이터를 저장하고 관리.
      • 1970's : 데이터베이스 관리 기법이 태동하던 시기. 계층형(Hierarchical) 데이터베이스, 망형(Network) 데이터베이스 같은 제품의 상용화.
      • 1980년대 : 현재 대부분의 기업에서 사용되고 있는 관계형 데이터베이스가 상용화. ex) Oracle, Sybase, DB2
      • 1990년대 : Oracle, Sybase, Informix, DB2, Teradata, SQL Server 등 많은 제품이 보다 향상된 기능으로 정보시스템의 확실한 핵심 솔루션으로 자리잡음. 인터넷 환경의 급속한 발전과 객체 지향 정보를 지원하기 위해 객체 관계형 데이터베이스로 발전.
    • 관계형 데이터베이스 (Relational Database) 
      • RDBMS: 테이블로 데이터를 관리하고 테이블 사이의 관계를 토대로 데이터를 정의하는 방식으로 대다수의 기업이 운용 중. (Oracle, MySQL 등) 
      • 1970년 영국의 수학자, E.F. Codd 박사의 논문에서 처음 소개됨.
      • 이후, IBM의 SQL 개발 단계 ▷ Oracle을 비롯해 여러 회사에서 상용화.
      • 현재 기업에서 사용하는 대부분의 DB는 기존 관계형 데이터베이스에 객체 지원 기능을 추가한 객체 관계형 데이터베이스.
      • 관계형 데이터베이스 장점
        • 1) 정규화를 통한 합리적인 테이블 모델링을 통해 이상(ANOMALY) 현상을 제거 + 데이터 중복을 피할 수 있으며 동시성 관리, 병행 제어를 통해 많은 사용자들이 동시에 데이터를 공유 및 조작할 수 있는 기능을 제공.
        • 2) 메타 데이터를 총괄 관리할 수 있어 데이터의 성격, 속성 또는 표현 방법 등을 체계화할 수 있고, 데이터 표준화를 통한 데이터 품질 확보.
      • DBMS 장점
        • 1) 인증된 사용자만이 참조할 수 있도록 보안 기능을 제공.
        • 2) 테이블 생성 시에 사용할 수 있는 다양한 제약조건을 이용하여 사용자가 실수로 조건에 위배되는 데이터를 입력한다든지, 관계를 연결하는 중요 데이터를 삭제하는 것을 방지하여 데이터 무결성 (Integrity) 보장
        • 3) 시스템의 갑작스런 장애로부터 사용자가 입력, 수정, 삭제하던 데이터가 제대로 반영될 수 있도록 보장해주는 기능 + 시스템 다운, 재해 등의 상황에서 데이터를 회복/복구할 수 있는 기능을 제공.

    2. SQL (Structured Query Language)

    • 정의 : 관계형 데이터베이스에서 조회, 데이터 정의, 데이터 조작, 데이터 제어를 하기 위해 사용하는 언어.
    • 독립된 하나의 개발 언어.
    • SQL 명령어는 3가지 SAVEPOINT 그룹인 DDL, DML, DCL로 나눌 수 있음. TCL은 DCL로 분류하기도 하 다소 성격이 다르므로 별도의 4번째 그룹으로 분리할 것을 권고함.

    SQL 명령어 구분 (Data On Air)

    3. Table

    • 데이터는 관계형 데이터베이스의 기본 단위인 테이블 형태로 저장됨.
    • 테이블
      • 어느 특정한 주제와 목적으로 만들어지는 일종의 집합. 데이터를 저장하는 객체 (Object) (Data On Air)
      • RDBMS에서 실제 데이터가 저장되고 조회되는 2차원 배열 형태의 저장공간. 엔터티, 속성, 인스턴스테이블, 컬럼, 튜플로 변경. (* 개념적 데이터모델링: 엔터티 / 논리적: 릴레이션 / 물리적: 테이블) (이기적) 
    • 관계형 데이터베이스 : 모든 데이터를 칼럼과 행의 2차원 구조로 표현.
      • 세로 방향을 칼럼 (Column) = 열
      • 가로 방향을 행 (Row) = 튜플, 인스턴스
      • 칼럼과 행이 겹치는 하나의 공간을 필드 (Field)
    • 정규화 (Normalization) : 테이블을 분할하여 데이터의 불필요한 중복을 줄이는 것.
    • 기본키 (Primary Key) : 각 행을 한 가지 의미로 특정할 수 있는 한 개 이상의 칼럼.
    • 외부키 (Foreign Key) : 다른 테이블의 기본 키로 사용되면서 테이블과의 관계를 연결하는 역할을 하는 칼럼.

    4. ERD (Entity Relationship Diagram)

    • 정의 : 정보와 테이블 간의 의미 또는 관계 등을 도식화하여 표현한 것.
    • 구성 요소 : 엔터티 (Entity), 관계 (Relationship), 속성 (Attribute)
    • 식별과 비식별
      • 식별 : 실선 표시 | 부모 테이블의 기본키가 자식 테이블의 외래키 (외부키) 이면서 기본키로 쓰이는 관계.
      • 비식별 : 점선 표시 | 자식 테이블에서 참조된 외래키가 기본키가 아닌 일반 컬럼으로 참조되는 관계.
      • 식별 관계로 정의하면 데이터의 정합성을 보장하나 비즈니스 로직이 변경되는 경우, 테이블 관리가 어려워지므로 비식별 관계로 테이블을 설정하는 것을 권함.

    2절 SELECT문

      2절부터는 이기적 유튜브 영상에 나오는 것으로 본 내용이 포함된 6강까지는 무료로 시청할 수 있다.

    일반집합연산자와 순수관계연산자

    • 집합연산자
      • UNION: UNION으로 실행.
      • INTERSECTION: INTERSECT로 실행.
      • DIFFERENCE: MINUS로 실행
      • PRODUCTL: 카티션곱 (조인)으로 실행.
    • 순수관계연산자
      • SELECT: WHERE로 실행.
      • PROJECT: SELECT로 실행.
      • (NATURAL) JOIN: 조인으로 실행.
      • DIVIDE: 현재 사용되지 않는다고 함.

    SELECT

      테이블에서 필요 데이터를 조회할 때 사용하는 문법이다.

      SELECT * FROM 테이블

      위 코드는 테이블의 모든 컬럼 정보를 가져온다. '*'는 애스터리스크라고 읽는다.

      SELECT DISTINCT 컬럼 FROM 테이블

      이 코드는 컬럼의 값을 중복없이 하나씩 출력하는 기능이다. 

      이외에 컬럼명 뒤에 AS를 넣어 별칭을 부여할 수 있다. 이때, 별칭의 주의사항은 다음과 같다. 띄어쓰기를 쓸 수 없고 문자로 시작해야 하며 예약어 (SELECT, FROM 등 시스템상에서 쓰임새가 정해진 것)를 사용해서는 안된다. 또한 특수문자는 '$', '_', '#', 이 3개만 쓸 수 있다. 

    SQLD 연결연산 (이기적 유튜브 강의 6회)

      숫자값을 가진 컬럼에 연산기호를 넣어 사칙연산도 가능하고 '||'를 넣어 연결연산을 할 수 있다. (ORACLE) 연결연산은 각 컬럼을 이어서 나타내는 것을 말한다.

      MySQL에서의 SELECT문은 아래글에서 확인할 수 있다.

    ※ SELECT문 참고: 2024.02.11 - [SQL] - [SQL] 메타코드M '데이터분석가 입문 필수 SQL 부트캠프' 강의 후기 #1 - SQL 설치, SELECT문 등

     


    2024 개정 이전 범위

      데이터정의어, DDL은 2과목 3장 관리구문으로 바뀌어 나중에 나오게 되었다. 새로운 글에서 DDL을 다시 정리하였으니 그쪽에서 학습하길 바란다.

    ※ 2과목 3장: 2023.03.05 - [Cerificate/SQLD] - [SQLD] 2과목 3장 관리 구문 - DML, TCL, DDL, DCL (구 SQL 최적화 기본 원리 / 2024 개정사항 반영) (終)

    반응형

    DDL

    1. 데이터 유형

    자주 사용되는 데이터 유형 (Data On Air)

    • 이외에도 ANSI/ISO에서는 Binary String Type, Binary Large Object String Type, National Character String Type, Boolean Type 등의 다양한 유형을 표시.
    • VARCHAR과 CHAR의 차이
      • VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐. ☞ 길이가 다양한 칼럼과 정의된 길이와 실제 데이터 길이에 차이가 있는 칼럼에 적합. 보다 작은 영역에 저장할 수 있음.
      • CHAR에서는 문자열을 비교할 때 공백(BLANK)을 채워서 비교. ex) CHAR - 'AA' = 'AA ' | VARCHAR -  'AA' ≠ 'AA '

    2. Create Table

    • 테이블에 있는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들(후보키) 중에 하나를 선정하여 기본키 칼럼으로 지정.
    • 구문 형식 : CREATE TABLE 테이블이름 ( 칼럼명1 DATATYPE [DEFAULT 형식], 칼럼명2 DATATYPE [DEFAULT 형식], 칼럼명2 DATATYPE [DEFAULT 형식] ) ;
    • 테이블 생성 규칙
      • 테이블명은 객체를 나타내는 적절한 이름을 사용한다. (가급적 단수형)
      • 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
      • 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
      • 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )" 로 묶어 지정한다.
      • 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.
      • 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)
      • 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
      • 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
      • 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
      • A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
      • 테이블 생성 시 대/소문자 구분은 하지 않는다. (기본 대문자)
      • DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다.
      • 문자 데이터 유형은 반드시 가질 수 있는 최대 길이를 표시해야 한다.
      • 칼럼과 칼럼의 구분은 콤마로 하되, 마지막 칼럼은 콤마를 찍지 않는다.
      • 칼럼에 대한 제약조건이 있으면 CONSTRAINT를 이용하여 추가할 수 있다.
    • 제약조건 : 사용자가 원하는 조건의 데이터, 즉, 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정.
      • NULL : NULL (ASCII 코드 00번)은 공백 (BLANK, ASCII 코드 32번), 숫자 0 (ZERO, ASCII 48)과 다른 값. 공집합과도 다름. ‘아직 정의되지 않은 미지의 값’ or ‘현재 데이터를 입력하지 못하는 경우’를 뜻함.
      • DEFAULT : 명시된 값을 지정하지 않은 경우에 NULL 값이 입력됨.

    제약조건의 종류 (Data On Air)

    • 테이블 구조 확인 : “DESC 테이블명;” (Oracle)
    • Select 구문으로 테이블 생성 (CTAS: Create Table ~ As Select ~)
      • 칼럼별로 데이터 유형을 다시 재정의 하지 않아도 되는 장점.
      • 주의 : 기존 테이블 제약조건 중 NOT NULL만 새로운 복제 테이블에 적용되고 기본키, 고유키, 외래키, CHECK 등의 다른 제약 조건은 사라짐. 

    3. ALTER TABLE

    • 1) ADD COLUMN : 테이블에 필요한 칼럼을 추가
      • 형식 : ALTER TABLE 테이블명 ADD 추가할 칼럼명 데이터 유형;
      • 주의 : 새로 추가된 칼럼은 테이블의 마지막 칼럼이 되고, 칼럼의 위치 지정 불가.
    • 2) DROP COLUMN : 불필요 칼럼 삭제
      • 형식 : ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;
      • 주의 : 한 번에 하나의 칼럼만 삭제 가능. 칼럼 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 함. 제거된 칼럼의 복구 불가
    • 3) MODIFY COLUMN : 칼럼의 데이터 유형, 디폴트(DEFAULT) 값, NOT NULL 제약조건의 변경.
      • 형식 :  ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 …);
      • 주의사항
        • (1) 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다. (기존의 데이터가 훼손될 수 있기 때문)
        • (2) 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다.
        • (3) 해당 칼럼이 NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있다. 
        • (4) 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
        • (5) 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.
    • 4) RENAME COLUMN : 칼럼명 변경.
      • 형식 : ALTER TABLE 테이블명 RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명;
    • 5) DROP CONSTRAINT : 제약조건 삭제.
      • 형식 : ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
    • 6) ADD CONSTRAINT : 제약조건 추가.
      • 형식 : ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
      • 외부키(FK)를 설정하여 실수에 의한 테이블 혹은 데이터의 삭제 방지 가능.

    4. RENAME TABLE 

    • 테이블의 이름 변경.
    • 형식 : RENAME 변경전 테이블명 TO 변경후 테이블명;

    5. DROP TABLE

    • 테이블 삭제
    • 형식 : DROP TABLE 테이블명 [CASCADE CONSTRAINT];
    • CASCADE CONSTRAINT : 해당 테이블과 관계가 있는 제약조건도 삭제.

    6. TRUNCATE TABLE

    • 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제. (테이블 삭제 X)
    • 형식 : TRUNCATE TABLE PLAYER;
    • TRUNCATE와 DELETE의 차이
      • 테이블에 있는 데이터를 삭제하는 명령어 : TRUNCATE TABLE 명령어 & DELETE 명령어
      • DELETE와 TRUNCATE의 처리방식이 상이.
      • 테이블의 전체 데이터를 삭제하는 경우 ☞ 시스템 부하가 적은 TRUNCATE TABLE 권고 (단, "TRUNCATE TABLE" 은 정상적 복구 불가)

    참고

    • Data On Air
    • DDL Sample text 

    sqld_ddl.txt
    0.00MB


    • 23.02.27 작성 시작 & 완료.
    • 24.02.28 이기적 2024 SQLD 내용 반영
    728x90
    반응형