상세 컨텐츠

본문 제목

[PLAYDATA] 데이터 엔지니어링 8월 4주차 8/25

PLAYDATA/PLAYDATA데일리노트

by Na느님 2023. 8. 28. 12:02

본문

  • 8월 25일
토요일에 이사를 가야해서 25일차는 회고를 작성할 여유가 없었다. 주말에 이사를 다 끝내고 짐정리까지 다 마쳐서 이제 다시 회고를 꾸준히 작성할 것이다.

 

 

서브쿼리

간단히 말해 쿼리문 안에 또 쿼리문이 있는 형태로, 쿼리문 안에 있는 쿼리문을 서브쿼리라고 한다.

e.g.) SELECT <columns> FROM <table_names> WHERE <condition(<QUERY1>, ...)>;

서브쿼리의 핵심은 서브쿼리가 무엇을 출력하는가(즉 table 내용)를 확인하는 것이다. 서브쿼리의 출력은 메인쿼리의 입력이 된다(inline처럼 생각해보자). 해당 쿼리가 2개의 열 이상의 table을 반환하는지, column하나만 반환하는지, 데이터 하나만 반환하는지 등을 파악해야 한다.

서브쿼리는 소괄호()로 묶어준다.

예제)

SELECT T2.* FROM TB2 T2 WHERE (SELECT MAX(T3.COL3_1) FROM TB3 T3) = T2.COL1_1;

서브쿼리 안에 다중행 함수가 있어서 반환형은 하나의 단일 데이터이다. 위의 쿼리문은 T3.COL3_1에서 가장 작은 값과 일치하는 COL1_1값을 가지는 행만 출력하는 쿼리문이다.

 

WITH구문

WITH는 서브쿼리가 반환할 출력값에 alias를 메인쿼리 앞에 미리 붙여서 메인쿼리를 작성하기 편하게 해준다.

서브쿼리를 마치 매크로처럼 쓸 수 있게하는 기능이다.

단 WITH문에 들어가는 서브쿼리의 반환형은 반드시 table이거나 단일 column이어야 한다. (단일 데이터는 안됨)

-> 사실 엄밀하게 말하면 단일 column도 table 자료형이다. 단지 열이 한 줄일 뿐이다.

WITH구문 구조는 다음과 같다.

WITH <alias1> AS <QUERY1>, <alias2> AS <QUERY2>, ...

<MAIN QUERY>;

WITH문과 MAIN QUERY 사이에는 세미콜론이 들어가지 않음에 유의

예제)

WITH AL2 AS (SELECT * FROM TB3 T3)
SELECT T2.*, AL2.* FROM TB2 T2, AL2 WHERE T2.COL1_1 = AL2.COL3_1;

서브쿼리에서 TB3을 그대로 출력한 뒤 AL2로 이름을 치환하고 메인쿼리에 적용한 모습이다.

여기서는 예제의 단순함을 위해 서브쿼리에서 TB3 테이블을 아무 처리 없이 그대로 출력했다.

 

 

데이터의 추가, 수정, 삭제

CRUD기법 중에서 C, U, D에 대해 다룬다. R부분은 SELECT문에 해당한다고 볼 수 있다.

 

데이터 추가

테이블의 추가CREATE TABLE구문을 사용하며,

행의 추가INSERT INTO구문을 사용한다.

Tip) 테이블 복제: CREATE TABLE TB1_CP AS SELECT * FROM TB1;

INSERT INTO구문은 다음과 같다.

INSERT INTO <table_name> VALUES(<data>, <data>, ...);

특정 columns를 지정하여 추가하려면 다음과 같이 한다.

INSERT INTO <table_name> (<column1_name>, <column2_name>, ...) VALUES(<col1_data>, <col2_data>, ...);

지정되지 않은 column 자리에는 NULL로 채워진다.

 

데이터 갱신(수정)

특정 table의 데이터(행)를 갱신하기 위해서는 UPDATE ~ SET 구문을 사용한다.

형태는 다음과 같다.

UPDATE <table_name> SET <column1_name>=<data1>, <column2_name>=<data2>, ... [WHERE <condition>];

SET 뒤에는 어떤 column을 어떤 값으로 수정할지 정하고, WHERE 뒤에는 변경을 원하는 행들을 선별한다.

 

데이터 삭제

테이블의 삭제 DROP TABLE구문을 사용하며,

행의 삭제 DELETE  FROM구문을 사용한다.

DELETE구문은 다음과 같다.

DELETE FROM <table_name> [WHERE <condition>];

WHERE 뒤에는 삭제를 원하는 행을 선별한다.

 

관련글 더보기