3 분 소요

Keypoint

  1. Database를 왜 써야하는가?
  2. 외래키와 기본키가 무엇인가?
  3. 기본키는 어떤 특징을 가지고 있는가?
  4. 관계설정은 어떻게 할 수 있을까?

SQL

  • SQL 종류
    • Data Definition Language (DDL)

      DDL 은 데이터를 정의할 때 사용되는 언어를 가리킵니다. 예를 들어 테이블을 만들 때 사용하는 CREATE 이나 테이블을 제거할 때 사용되는 DROP 등 입니다. 데이터베이스의 테이블과 같은 오브젝트를 정의할 때 사용됩니다.

    • Data Manipulation Language (DML)

      DML 은 데이터베이스에 데이터를 저장할 때 사용되는 언어를 가리킵니다. 예를 들어 INSERT 처럼 새로운 레코드를 추가할 때 사용되는 문법들이 포함됩니다. 따라서 데이터를 삭제하는 DELETE 라든가 변경하는 UPDATE 등이 여기에 포함됩니다.

    • Data Control Language (DCL)

      DCL 은 데이터베이스에 대한 접근 권한과 관련된 문법입니다. 어느 유저가 데이터베이스에 접근할 수 있는지 권한을 설정하거나 없애는 역할이죠. 예를 들어 권한을 주는 GRANT 나 권한을 가져가는 REVOKE 등이 포함됩니다.

    • Data Query Language (DQL)

      DQL 은 정해진 스키마 내에서 쿼리를 할 수 있는 언어입니다. 여기에 포함된 문법은 SELECT 정도가 있습니다. 물론 이렇게 따로 언어가 분류되지만 DQL 을 DML 의 일부분으로 말하곤 합니다.

    • Transaction Control Language (TCL)

      TCL 은 DML 을 거친 데이터 변경사항을 수정할 수 있습니다. 예를 들어 COMMIT 처럼 DML 이 작업한 내용을 데이터베이스에 커밋하거나 ROLLBACK 처럼 커밋했던 내용을 다시 롤백하는 문법들이 있습니다.

관계형 데이터베이스

  • 데이터 : 각 항목에 저장되는 값
  • 테이블 (relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터
  • 필드(column) : 테이블 열
  • 레코드 (tuple) : 테이블의 한 행의 저장된 정보
  • 키 (key) : 테이블의 각 레코드를 구분할 수 있는 값, 각 레코드마다 고유값이어야 하며 기본기 (primary key)와 외래키 (foreign key) 등

스키마 디자인

ㄴ

CLI로 스키마 디자인하기

ㅁ

GUI로 스키마 디자인 확인하기

CREATE TABLE 테이블 이블 : 테이블 형성

인덱스 이름 데이터 타입 : 새로운 인덱스 형성

인덱스 이름 데이터 타입 PRIMARY KEY : 기본키 형성

FOREIGN KEY(이전관계 기본키 이름) REFERENCES 이전관계 테이블 이름(이전관계 기본키 이름) : 외래키 형성

기본 쿼리문

ㄷ

동그라미 친 부분이 1 대 다 관계이다. (선을 자세히 보면 관계성을 볼 수 있다.)

  • SQL을 사용할 때 알고 있어야 하는 작업
    • SELECT : (필수적) 데이터셋에 포함될 특성을 특정
    • FROM : (필수적) 결과들을 도출해낼 데이터베이스 테이블 명시
    • WHERE : (선택적) 필터 역할
    • AND, OR, NOT
    • ORDER BY : (선택적) 돌려받는 데이터 결과 정렬
    • INSERT INTO
    • NULL VALUES
    • UPDATE
    • DELETE
    • COUNT
    • LIKE : 특정 값 필터
    • WILDCARDS : 와일드카드, 전부 선택
    • ALIASES
    • JOINS
      • INNER JOIN : 공통된 부분 연결
      • LEFT JOIN : OUTER JOIN 중의 방법으로 좌측으로 방향 선택
      • RIGHT JOIN : OUTER JOIN 중의 방법으로 우측으로 방향 선택
    • GROUP BY
  • DB 관련
    • SQL Create DB
    • SQL Drop DB
    • SQL Create Table
    • SQL Drop Table
    • SQL Alter Table
    • SQL Not Null
    • SQL Unique
    • SQL Primary Key
    • SQL Foreign Key
    • SQL Default
    • SQL Auto Increment
    • SQL Dates
  • SQL 명령어 정리
    • SELECT

        SELECT 'Hello World'; # 일반 문자열
        SELECT 2; # 숫자
        SELECT 15 + 3; # 단순 계산
      
    • FROM

        SELECT 특성_1 # 특정 특성을 테이블에 사용
        FROM 테이블_이름;
              
        SELECT 특성_1, 특성_2 # 다수의 특성을 테이블에 사용
        FROM 테이블_이름;
              
        SELECT * # 테이블의 모든 특성 선택 # **여기서 * 와일드 카드로 전부 선택시 사용한다.**
        FROM 테이블_이름;
      
    • WHERE

        SELECT 특성_1, 특성_2
        FROM 테이블_이름
        WHERE 특성_1 = "특정 값"; # 특정 값과 동일한 데이터 찾기
              
        SELECT 특성_1, 특성_2
        FROM 테이블_이름
        WHERE 특성_2 <> "특정 값"; # 특정 값을 제외한 데이터 찾기
              
        SELECT 특성_1, 특성_2
        FROM 테이블_이름
        WHERE 특성_1 > "특정 값"; # 특정 값보다 크거나 작은 데이터를 필터
              
        SELECT 특성_1, 특성_2
        FROM 테이블_이름
        WHERE 특성_1 <= "특정 값"; # 특정 값을 포함하는 '이상' '이하'
              
        SELECT 특성_1, 특성_2
        FROM 테이블_이름
        WHERE 특성_2 LIKE "%특정 문자열%"; # 특정 값과 비슷한 값들을 필터 "*특정 문자열*"로도 가능
              
        SELECT 특성_1, 특성_2
        FROM 테이블_이름
        WHERE 특성_2 IN ("특정값_1", "특정값_2"); # 리스트의 값들과 일치하는 데이터 필터
              
        SELECT *
        FROM 테이블_이름
        WHERE 특성_1 IS NULL; # 값이 없는 NULL 찾을 
              
        SELECT *
        FROM 테이블_이름
        WHERE 특성_1 IS NOT NULL; # 값이 없는 경우를 제외할 
      
    • ORDER BY

        SELECT *
        FROM 테이블_이름
        ORDER BY 특성_1; # 데이터 정령 (오름차)
              
        SELECT *
        FROM 테이블_이름
        ORDER BY 특성_1 DESC; # 데이터 정렬 (내림차)
      
    • LIMIT

        SELECT *
        FROM 테이블_이름
        LIMIT 200; # 갯수 한정 (200 숫자 위치를 바꾸면 된다)
      
    • DISTINCT

        SELECT DISTINCT 특성_1 # 유니크한 값들 선택
        FROM 테이블_이름; #
              
        SELECT
          DISTINCT # 여러 특성의 유니크한 '조합' 선택
            특성_1
            ,특성_2
            ,특성_3
        FROM 테이블_이름;
      
    • INNER JOIN

        SELECT *
        FROM 테이블_1
        JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B;
              
        # 예시
        SELECT 
          c.FirstName || ' ' || c.LastName AS 'Customer Name',
          e.Firstname || ' ' || e.LastName AS 'Employee Name'
        FROM customers AS c
        JOIN employees AS e ON c.SupportRepId = e.EmployeeId;
      
    • OUTER JOIN

        SELECT *
        FROM 테이블_1
        LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
              
        SELECT *
        FROM 테이블_1
        RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B