본문 바로가기
JAVA 웹개발 - 코드프레소

SQL 프로그래밍 입문

by 녕나 2022. 2. 3.

현재 코드프레소에서 진행하고 있는 JAVA 웹개발 커리큘럼에 참여중에 있습니다.

그 중 SQL에 대한 학습내용을 적어보고자 합니다.

 

SQL (Structured Query Language, 시퀄)

  • 데이터베이스(DB)와 대화하기 위해 특화된 언어
  • programming langauge가 아니다!
  • 잘 다루면 매우 유리하다 (많은 곳에 쓰이기 때문...)

데이터베이스 구성요소 (MySQL 기준)

  • Schema(엑셀) → Table(시트) → Record(data, 각 행)

MySQL 자료형

  • String 형태의 CHAR, VARCHAR
  • 숫자 형태의 INTEGER, FLOAT
  • 시간 형태의 DATE, TIMESTAMP

SQL 명령어

테이블 생성

  • age(column name) VARCHAR(자료형) PRIMARY KEY(옵션 파라미터) 와 같은 형식으로 생성가능
  • 딱히 외우지 않아도 되고 그때그때 검색해서 써도 됨

데이터 삽입 (INSERT INTO)

  • INSERT INTO 말고도 COPY 등등 여러가지 방법으로 테이블에 데이터 삽입 가능
  • 명령어마다 삽입 속도가 다를때도 있으므로 대용량 데이터는 그에 맞는 적절한 방법으로 삽입해야함

데이터 조회(SELECT {col1, col2, co3, ...} FROM {table})

  • SQL 에서 가장 자주 쓰이고 중요한 명령어
  • WHERE, GROUP BY, ORDER BY, UNION, Window function, LIMIT 등등.. 무궁무진하게 활용가능함

데이터 수정 (UPDATE {table} SET {col1, col2, ...}  WHERE ...)

  • WHERE 조건에 맞는 레코드들의 특정 컬럼의 값을 수정 가능
  • 자주 쓰이지는 않지만 쓰는데 주의해야함
  • WHERE 를 설정해주지 않으면 모든 레코드의 value를 바꾸기 때문에 주의
  • Transaction(트랜잭션) 에 대한 이해가 필요
    • 트랜잭션이란 "어떠한 작업의 단위" OR "한꺼번에 실행되어야할 일련의 과정들"을 의미한다
    • DB1 -> DB2 -> DB3 으로 순서대로 데이터를 옮기는 과정들을 1개의 작업이라고 칭하면 이것은 1개의 트랙잭션이 된다.
    • DB2 -> DB3 로 데이터를 옮기는 과정에서 만약 오류가 난다면, 1개의 작업이 성공했다고 볼 수 없고 여기서 rollback 커맨드를 걸면 모든 작업을 시작하기 전으로 되돌아간다
    • 하지만 만약 1개, 1개 작업을 할 때마다 commit을 했다고 가정하면, DB2 -> DB3 나중 과정에서 오류가 났을 때 굉장히 골치아파진다. 왜냐하면 DB1 -> DB2 과정은 이미 성공해서 데이터베이스에 업데이트가 반영이 되었기 때문이다. 만약 데이터베이스가 실시간으로 계속 변경이 있는 데이터베이스라면, DB2 -> DB3 가 실패했으므로 처음부터 DB1 -> DB2 -> DB3 하기도 애매해진다.
    • 이럴때 BEGIN, END (PostgreSQL 커맨드) 등을 이용해서 한번에 이뤄져야할 작업들을 묶어준다면 불상사를 막을 수 있다.

 

데이터 삭제 (DELETE FROM {table}, WHERE ... }

  • WHERE 조건문에 해당하는 레코드들을 삭제가능
  • UPDATE 와 마찬가지로 트랙잭션을 꼭 이용하는게 좋다

 

테이블 조인 (INNER JOIN, LEFT JOIN, RIGHT JOIN)

- 테이블 JOIN 에는 일반적으로 [INNER, LEFT, RIGHT, SELF] 4개 정도가 쓰인다

INNER JOIN

  • 두 테이블 모두의 공통 교집합을 구한다
  • table 1과 2 모두에 동시에 조건을 만족해야함

LEFT JOIN

  • 기본적으로 table1의 레코드는 모두 존재하고 조건에 맞는 table2 의 컬럼들을 table1의 레코드에 이어붙힌다
  • 조건을 만족하지 않는 table1의 레코드들의 컬럼에는 NULL 값이 삽입됨

RIGHT JOIN

  • LEFT JOIN의 반대형인 table2의 레코드가 모두 존재하고 table1의 조건에 맞는 레코드들을 가져와서 table2에 붙힌다
  • LEFT JOIN 에서 table 1과 table 2의 위치만 역으로 바뀌었다고 생각하면 편함
  • 고로 LEFT JOIN 만 써도 무방하다

'JAVA 웹개발 - 코드프레소' 카테고리의 다른 글

클라우드 컴퓨팅 첫 걸음  (0) 2022.02.23
Spring Boot 웹 개발 초급  (0) 2022.02.23
Spring Boot 웹 개발 입문  (0) 2022.02.03
Clean Code란 무엇인가?  (0) 2022.01.25
자바 프로그래밍 2  (0) 2022.01.21