현재 코드프레소에서 진행하고 있는 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 |