[SQLD] SQL 기본

ewillwin·2023년 8월 8일
0

SQLD Study

목록 보기
3/8

[1. 관계형 데이터베이스 개요]

데이터베이스

  • DB: 특정 기업이나 조직 또는 개인이 필요에 의해 데이터를 일정한 형태로 저장해 놓은 것을 의미한다.

  • DBMS: 효율적인 데이터 관리 뿐만 아니라 예기치 못한 사건으로 인한 데이터의 손상을 피하고, 필요시 필요한 데이터를 복구하기 위한 강력한 기능의 소프트웨어


SQL (Structured Query Language)

  • SQL은 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어를 하기 위해 사용하는 언어이다.
    • 데이터 조작어 (DML: Data Manipulation language)
      • SELECT
      • INSERT
      • UPDATE
      • DELETE
    • 데이터 정의어 (DDL: Data Definition Language)
      • CREATE
      • ALTER
      • DROP
      • RENAME
    • 데이터 제어어 (DCL: Data Control Language)
      • GRANT
      • REVOKE
    • 트랜잭션 제어어 (TCL: Transaction Control Language)
      • COMMIT
      • ROLLBACK

Table

  • 데이터를 저장하는 객체(Object)로서 관계형 데이터베이스의 기본 단위이다. 관계형 데이터베이스에서는 모든 데이터를 칼럼과 행의 2차원 구조로 나타낸다.

  • Column: 2차원 구조를 가진 테이블에서 세로 방향으로 이루어진 하나하나의 특정 속성 (더 이상 나눌 수 없는 특성)

  • Row: 2차원 구조를 가진 테이블에서 가로 방향으로 이루어진 연결된 데이터

  • Field: Column과 Row가 겹치는 하나의 공간


정규화(Normalization)

  • 테이블을 분할하여 데이터의 불필요한 중복을 줄이는 것

  • 기본 키 (Primary Key): 테이블에 존재하는 각 행을 한 가지 의미로 특정할 수 있는 한 개 이상의 칼럼

  • 외부 키 (Foreign Key): 다른 테이블의 기본 키로 사용되고 있는 관계를 연결하는 칼럼


ERD (Entity Relationship Diagram)

  • ERD의 구성 요소는 엔티티(Entity), 관계(Relationship), 속성(Attribute) 3가지


[2. DDL (Data Definition Language)]

데이터 유형

  • CHAR(s)

    • 고정 길이 문자열 정보
    • s만틈 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다
    • 'AA' == 'AA '
  • VARCHAR(s)

    • 가변 길이 문자열 정보
    • s만큼의 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용된다
    • 'AA' != 'AA '
  • NUMERIC

    • 정수, 실수 등 숫자 정보
  • DATETIME

    • 날짜와 시각 정보

CREATE TABLE

테이블과 칼럼 정의

  • 테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들(후보키) 중에 하나를 선정하여 기본키 칼럼으로 지정한다.

  • 기본 키는 단일 칼럼이 아닌 여러 개의 칼럼으로도 만들어질 수 있다.

  • 테이블과 테이블 간에 정의된 관계는 기본키와 외부키를 활용해서 설정하도록 한다.

CREATE TABLE

  • 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.

  • 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.

  • 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.

  • 테이블 이름을 지정하고 각 칼럼들을 괄효 "()"로 묶어 지정한다.

  • 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다;.

  • 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.

  • 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.

  • 테이블명과 칼럼명은 반드시 문자로 시작해야하고, 벤더별로 길이에 대한 한계가 있다.

  • 벤더에서 사전에 정의한 예약어는 쓸 수 없다.

  • A-Z, a-z, 0-9, _, $, # 문자만 허용된다.

제약조건(CONSTRAINT)

  • 제약조건: 사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약이다.

    -> PRIMARY KEY(기본키): UNIQUE & NOT NULL
    -> UNIQUE KEY(고유키): 고유키 정의
    -> NOT NULL: NULL 값 입력금지
    -> CHECK: 입력 값 범위 제한
    -> FOREIGN KEY(외래키): NULL 가능, 여러속성가능

생성된 테이블 구조 확인

  • "DESCRIBE 테이블명;" 또는 "DESC 테이블명;"으로 해당 테이블에 대한 정보를 확인할 수 있다.

ALTER TABLE

  • 한 번 생성된 테이블은 특별히 사용자가 구조를 변경하기 전까지 생성 당시의 구조를 유지하게 된다.
  • 업무적인 요구 사항이나 시스템 운영상 테이블을 사용하는 도중에 변경해야할 일들이 발생할 수도 있다. 이 경우 주로 칼럼을 추가/삭제하거나 제약조건을 추가/삭제하는 작업을 진행하게 된다.

ADD COLUMN

-> 주의할 것은 새롭게 추가된 칼럼은 테이블의 마지막 칼럼이 되며 칼럼의 위치를 지정할 수는 없다.

DROP COLUMN

MODIFY COLUMN

-> 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다. 이는 기존의 데이터가 훼손될 수 있기 때문이다
-> 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다. 또한 해당 칼럼이 NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있다.
-> 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
-> 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.

DROP CONSTRAINT

ADD CONSTRAINT


RENAME TABLE

  • RENAME 명령어를 사용하여 테이블의 이름을 변경할 수 있다.

DROP TABLE

  • 테이블을 잘못 만들었거나 테이블이 더 이상 필요 없을 경우 해당 테이블을 삭제해야 한다.
  • DROP 명령어를 사용하면 테이블의 모든 데이터 및 구조를 삭제한다. CASCADE CONSTRAINT 옵션은 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제한다는 것을 의미한다.

TRUNCATE TABLE

  • TRUNCATE TABLE은 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다. 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.
  • TRUNCATE는 데이터 구조의 변경 없이 테이블의 데이터를 일괄 삭제하는 명령어로 DML로 분류할 수도 있지만 내부 처리 방식이나 Auto Commit 특성 등으로인해 DDL로 분류하였다.


[3. DML (Data Manipulation Language)]

INSERT

  • 해당 칼럼명과 입력되어야 하는 값을 서로 1:1로 매핑해서 입력하면 된다.

UPDATE


DELETE

  • WHERE 절을 사용하지 않는다면 테이블의 전체 데이터가 삭제된다.

  • 데이터베이스는 DDL 명령어와 DML 명령어를 처리하는 방식에 있어서 차이를 보인다.
    -> DDL (CREATE, ALTER, RENAME, DROP): 직접 데이터베이스의 테이블에 영향을 미치기 때문에 DDL 명령어를 입력하는 순간 명령어에 해당하는 작업이 즉시 (AUTO COMMIT) 완료된다.
    -> DML (INSERT, UPDATE, DELETE, SELECT): 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 실시간으로 테이블에 영향을 미치는 것이 아니다. 따라서 버퍼에서 처리한 DML 명령어가 실제 테이블에 반영되기 위해서는 COMMIT 명령어를 입력하여 TRANSACTION을 종료해야 한다.

  • 테이블의 전체 데이터를 삭제하는 경우, 시스템 활용 측면에서는 삭제된 데이터를 로그로 저장하는 DELETE TABLE 보다는 시스템 부하가 적은 TRUNCATE TABLE을 권고한다. (단, TRUNCATE TABLE은 삭제된 데이터의 로그가 없으므려 ROLLBACK이 불가함)


SELECT


산술 연산자와 합성 연산자

산술 연산자

  • NUMBER와 DATE 자료형에 대해 적용되며 일반적으로 수학에서의 4칙 연산과 동일하다
  • 우선 순위를 위한 괄호 적용이 가능하다.
  • 산술 연산을 적용하면 칼럼의 LABEl이 길어지게 되므로 ALIAS를 새롭게 부여하는 것이 좋다.

합성(CONCATENATION) 연산자

  • 문자와 문자를 연결하는 합성(CONCATENATION) 연산자
    -> 문자와 문자를 연결하는 경우 2개의 수직 바(||)에 의해 이루어진다 (Oracle)
    -> 문자와 문자를 연결하는 경우 + 표시에 의해 이루어진다. (SQL Server)
    -> 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수를 사용할 수 있다.
    -> 칼럼과 문자 또는 다른 칼럼과 연결시킨다.
    -> 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.


[4. TCL (Transaction Control Language)]

트랜잭션 개요

  • 트랜잭션: 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다. 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함된다.
    -> ALL or NOTHING

트랜잭션의 특성

  • 원자성(atomicity): 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)
  • 일관성(consistency): 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.
  • 고립성(isolation): 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
  • 지속성(durability): 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

COMMIT

  • 입력한 자료나 수정한 자료에 대해서 또는 삭제한 자료에 대해서 전혀 문제가 없다고 판단되었을 경우 COMMIT 명령어를 통해서 트랜잭션을 완료할 수 있다.

  • COMMIT 명령어는 INSERT 문, UPDATE 문, DELETE 문을 사용한 후에 이런 변경 작업이 완료되었음을 데이터베이스에 알려 주기 위해 사용한다.

  • COMMIT이나 ROLLBACK 이전 상태

  • COMMIT 이후 상태

  • ROLLBACK 이후 상태

SQL Server에서의 트랜잭션

  1. AUTO COMMIT
  • 명령어가 성공적으로 수행되면 자동으로 COMMIT을 수행하고 오류가 발생하면 자동으로 ROLLBACK을 수행한다.
  1. 암시적 트랜잭션
  • Oracle과 같은 방식으로 처리된다.
  • 트랜잭션의 시작은 DBMS가 처리하고 트랜잭션의 끝은 사용자가 명시적으로 COMMIT 또는 ROLLBACK으로 처리한다.
  1. 명시적 트랜잭션
  • 트랜잭션의 시작과 끝을 모두 사용자가 명시적으로 지정하는 방식이다.
  • BEGIN TRANSACTION으로 트랜잭션을 시작하고 COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION으로 트랜잭션을 종료한다.

ROLLBACK

  • ROLLBACK은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 LOCKING이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.

SQL Server에서의 ROLLBACK

  • SQL Server는 위에서 언급한 바와 같이 AUTO COMMIT이 기본 방식이므로 임의적으로 ROLLBACK을 수행하려면 명시적으로 트랜잭션을 선언해야 한다.

COMMIT과 ROLLBACK을 사용함으로써 얻는 효과

  • 데이터 무결성 보장
  • 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능
  • 논리적으로 연관된 작업을 그룹핑하여 처리 가능

SAVEPOINT

  • SAVEPOINT를 정의하면 ROLLBACK할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.


[5. WHERE 절]

WHERE 조건절 개요

  • WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.
    -> 칼럼 명 (보통 조건식의 좌측에 위치)
    -> 비교 연산자
    -> 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)
    -> 비교 칼럼명 (JOIN 사용시)

연산자의 종류

  • 비교 연산자 (부정 비교 연산자 포함)

  • SQL 연산자 (부정 SQL 연산자 포함)

  • 논리 연산자

  • 연산자의 우선순위


비교 연산자


SQL 연산자

  • LIKE 연산자에는 와일드카드를 사용할 수 있다.

논리 연산자


부정 연산자


ROWNUM, TOP 사용

ROWNUM

  • Oracle의 ROWNUM은 칼럼과 비슷한 성격의 Pseudo Column으로써 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호이며, 테이블이나 집합에서 원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용한다.


TOP

  • SQL Server는 TOP 절을 사용하여 결과 집합으로 출력되는 행의 수를 제한할 수 있다.

  • Expression: 반환할 행의 수를 지정하는 숫자이다.
  • PERCENT: 쿼리 결과 집합에서 처음 Expression%의 행만 반환됨을 나타낸다.
  • WITH TIES: ORDER BY 절이 지정된 경우에만 사용할 수 있으며, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정할 수 있다.

profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글