[TIL] SQL

Narastro·2021년 8월 11일
0

TIL

목록 보기
15/16
post-thumbnail
post-custom-banner

SQL에 대해 알아보자!

표준 SQL 문법

TABLE 관련 DDL

  1. CREATE : 테이블 생성
    CREATE TABLE 테이블명

  2. ALTER TABLE : 테이블 수정
    ALTER TABLE 테이블명 ADD or MODIFY or DROP 컬럼명 데이터타입 [제약조건]

  3. DROP TABLE : 테이블 삭제
    DROP TABLE 테이블명

  4. TRUNCATE TABLE : 테이블 내의 데이터 삭제
    TRUNCATE TABLE 테이블명

DML

  1. SELECT : 데이터 내용 조회
    SELECT 속성명1,속성명2... FROM 테이블명 (WHERE 조건) ...
    1-1.WHERE : 조건 비교, 집합 등
    WHERE 이름 IN ('가',나');
    1-2.GROUP BY : 속성값을 그룹으로 분류
    ... GROUP BY 급여
    1-3. HAVING : GROUP BY 분류 후 그룹에 대한 조건 지정할 때 사용
    GROUP BY 부서 HAVING 급여합계 >= 5000;
    1-4. ORDER BY : 속성값을 정렬
    ORDER BY 학점

  2. JOIN : 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법
    INNER JOIN OUTER JOIN CROSS JOIN SELF JOIN 등 있음

  3. UNION : 테이블을 집합 개념으로 보고 두 테이블 연산에 집합 연산자를 사용하는 방식

  4. INSERT : 데이터 삽입
    INSERT INTO 테이블명(속성명1,...) VALUES (데이터1,...)

  5. UPDATE : 데이터 변경
    UPDATE 테이블명 SET 속성명=데이터,... WHERE 조건
    6.DELETE : 데이터 삭제
    DELETE FROM 테이블명 WHERE 조건

DCL

  1. GRANT : 관리자가 권한 부여시
    GRANT 권한 ON 테이블 TO 사용자
  2. REVOKE : 관리자가 권한 회수시
    REVOKE 권한 ON 테이블 FROM 사용자

내가 구현한 것과 실제 문법의 차이점

1. CREATE TABLE

데이터 타입의 종류와 추가적으로 컬럼마다 제약조건을 걸 수 있다는 점 빼고는 유사하다

2. INSERT INTO

유사하다

3. DELETE FROM

WHERE 없이 사용시 실제에서는 모든 레코드가 삭제된다는 것 빼고는 유사하다.

4. UPDATE

조건이 id로 한정된다는 점 빼고는 유사하다.

5. SELECT FROM

일단 가장 큰 차이점은 SELECT 이후 컬럼명을 지정하여 테이블에서 해당 컬럼에 해당하는 데이터를 모두 출력하지만 내가 구현한 것은 조건에 맞는 데이터를 모두 출력하는 것이다.
실제 문법의 경우 WHERE뿐만 아니라 GROUP BY, HAVING, ORDER BY 등의 구문이 가능하며 DISTINCT를 통해 중복을 제거한 튜플을 옵션으로 설정할 수 있다.

트랜잭션을 처리하려면 어떻게 해야할까?

트랜잭션이란?

어떠한 일련의 작업을 의미한다. 4가지 특성을 가지는데 하나라도 실패할 경우 전체가 취소되어야 하는 원자성과, 트랜잭션 실행 성공 후 항상 일관된 상태를 보존해야한다는 일관성, 트랜잭션 실행 중 생성하는 연산의 중간결과를 다른 트랜잭션이 접근하지 못하는 격리성, 성공이 완료된 트랜잭션의 결과는 영속적이어야 한다는 영속성이 그것이다.

내가 구현한 내용에서 처리하려면?

트랜잭션 처리가 일관된 묶음으로 진행되어야하므로 동기적으로 실행되면 좋다. 비동기가 실행될 가능성이 있는 것은 파일 입출력인데, 따라서 Sync 메소드를 이용해서 파일 입출력을 동기적으로 처리해주는 것이 필요하고 추가적으로 데이터가 잘 저장되면 true를 리턴해서 확인하는 과정이 필요하다고 생각한다.
(비동기를 쓰겠다면 웬만하면 async/await 구문이 좋겠다고 생각한다.)

🖥 추가로 학습할 사항

MySQL 구현 방식과 이유

  • RDBMS로 관계형 데이터베이스 관리 시스템이다. 역사가 오래되었으며 신뢰성 높고 데이터 분류, 정렬, 탐색 속도가 빠르다.
  • 구현방식은 2차원 테이블 형식을 이용해 데이터를 정의하고 데이터를 속성(Attribute)와 데이터 값(value)로 구조화하며 이들 사이의 관계를 찾아내서 테이블 모양으로 도식화하여 구현하였다.
  • SQL문이 Key, 쿼리의 실행결과가 Value인 Map으로서, 사용자로부터 SQL문을 잘게 쪼개고->해당 쿼리의 문법적 점검->실행계획을 통해 쿼리 분석, 인덱스 선택, 조인 처리-> 데이터를 디스크로 저장하는 일련의 과정으로 수행된다.

SQLite3 구현 방식과 이유

  • 트랜잭션을 제공해주는 파일 기반의 DBMS이다. 데몬처럼 동작하는 것이 아닌 마치 라이브러리와 같이 프로그램에 직접 Embed하여 사용한다. 프로그램 내부에서 잦은 파일 접근을 최대한 적게 하기 위한 취지로 만들어진 DB이다.

  • Nested Loop : 질의에 대해 for문 돌듯이 판단

  • File Based Processing : 파일 기반으로 동작. 다른 것과 달리 테이블 단위가 아닌 데이터베이스 단위로 잠금이 발생함. 즉 테이블을 여러개로 나누어도 내부적 잠금이 단일 프로세스이므로 write 성능이 달라지지 않음. DB자체가 파일 하나이므로 파일 기반 데이터베이스로서 DB단위로 잠금이 발생함.

  • Transaction : 트랜잭션 처리 중 문제 발생시 원래 데이터로 복원하고자 함. 이를 위해 원본 데이터를 별도의 파일에 저장->데이터 변경-> 백업 데이터 제거(커밋)

SELECT에서 JOIN을 지원하려면?

  • 여러 테이블 조인 -> 어떤 순서로 탐색할지?
  • 정렬해서 Merge해서 조회?
  • 해시맵 이용하기

👨‍🍳 느낀점

그나마 최근에 기사 준비하며 공부했던 SQL이 나와서 수월하게 할 수 있었다. 정규식을 사용하니 더 편하게 문자열 처리를 할 수 있었다. 앞으로 정규식을 다루는 연습을 더 많이 해야겠다. 내일 마지막 미션이다!! 끝까지 화이팅하잣!

profile
Earn this, Earn it.
post-custom-banner

0개의 댓글