2주 차에는 스키마 정의와 데이터 필터링을 학습했다.
해당 챕터에서는 내가 몰랐던 내용과 개인적으로 중요하게 생각한 내용들을 간략하게 적을 것이다.
강의에서 배운 중요한 내용은 많지만, 저작권의 문제도 있어서 간략하게 올린다.
매주 코딩 테스트 문제를 7~15개 정도 푸는데 문제에 대한 리뷰도 다음 기수분들의 학습에 방해가 되지 않게 작성하지 않을 것이다.
해당 강의에서는 Classic Models Database라는 각종 운송수단의 축소 모형 판매를 위한 8개의 테이블이 있는 데이터베이스를 사용한다.
스키마 정의
스키마 정의 챕터에서는 SQL 문장이 종류(DDL, DML, DCL, TCL), DB의 자료형, DDL에 대해서 학습했다.
그중에서 하단의 내용들을 정리한다.
- CTE와 CTAS란 무엇인가?
- CREATE TABLE문의 컬럼 레벨 정의 방식과 테이블 레벨 정의 방식이란?
CTAS(Create Table As Scheme)
CTAS는 원본 테이블을 SELECT 해서 데이터베이스의 새로운 테이블을 만드는 구문이다.
CTAS는 데이터베이스의 스키마에 테이블이 생성된다.
사용은 자주 사용하는 테이블을 따로 생성해서 사용하고, 사용자별로 보여주고 싶은 데이터를 제한할 때도 사용한다.
문법은 CREATE TABLE 테이블명 AS SELECT 구문으로 이루어진다.
하단과 같이 학생(student) 테이블에서 학번(studentNo), 이름(name) 컬럼만을 보여주는 student_temp 테이블을 만들 수 있다.
CREATE TABLE student_temp AS
SELECT studentNo, name
FROM student
CTE(Common Table Expression)
CTE는 단어 그대로 공통 테이블 식이다. CTAS와는 다르게 데이터베이스의 스키마에 테이블을 생성하지 않고 쿼리를 실행하는 동안 임시로 메모리에 데이터를 적재해서 사용하는 방법이다.
문법은 하단과 같이 WITH구문으로 사용된다,
WITH구문을 사용하면 어려운 문제를 나눠서 해결이 가능하다.
CTE 테이블을 사용하면 WITH구문에서 지정한 별칭(Alias)을 사용해서 학번, 이름을 출력 가능하다.
WITH studentsTemp AS
(
SELECT studentNo AS 학번,
studentName AS 이름
FROM students
)
SELECT 학번,
이름
FROM studentsTemp
CREATE TABLE 문의 컬럼 레벨 정의 방식과 테이블 레벨 정의 방식이란?
- 컬럼 레벨 정의 방식
- 조건명을 사용하지 못해서 제약 조건의 삭제/추가가 불가능하다.
- 테이블 레벨 정의 방식
- 조건명이 사용 가능하고, 제약조건의 삭제/추가가 가능하다.
테이블을 생성하고 요구사항이 자주 바뀌는 일이 많기에, 칼럼 레벨 정의 방식보다는 테이블 레벨 정의 방식을 사용해야 유연하게 대응이 가능하다.
TIL : 스키마 정의
데이터 필터링
해당 챕터에서는 SELECT, WHERE문에 대해서 전체적으로 다루었다.
SELECT문의 실행 순서는 알고 있었지만, 다시 들으면서 상기시킬 수 있었다.
- SQL 실행 순서
- 데이터베이스 Alias
- SQL의 Alias 사용 가능한 범위
SQL 실행 순서
학부시절 데이터베이스를 처음 공부할 때는 실행 순서라는 게 있는지도 몰랐었다..ㅎ
SQLD를 준비하면서 유튜브에 정미나 님의 유튜브를 보면서 실행 순서에 대해서 알게 되었다.
실행 순서를 이해할 때, 도움이 되었던 유튜브 영상은 보시는 분들은 참고가 되게 하단에 링크를 달았다.
SQL의 논리적인 실행 순서는 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY로 실행이 된다.
예외적으로 옵티마이저의 실행계획을 사용자가 설정해주면 물리적인 수행 순서는 달라진다.
여기서는 해당 내용을 다루지 않을 것이다.
5. SELECT -- 작성한 컬럼들이 계산/출력된다.
1. FROM -- 사용할 테이블을 선택한다.
2. WHERE -- 조건에 맞는 행(튜플)을 추출한다.
3. GROUP BY -- 컬럼을 그룹화한다.
4. HAVING -- 그룹화된 조건에 일치하는 컬럼을 추출한다.
6. ORDER BY -- 작성한 컬럼들에 맞게 정렬한다.
데이터베이스 Alias
데이터베이스의 별칭(Alias)이란 컬럼과 테이블을 별칭을 달 수 있는 방법이다.
별칭을 다는 이유는 무엇일까?
SQL에서 연산을 하고 각종 함수를 사용하면 컬럼의 이름은 함수를 사용한 모든 이름이 나오게 된다.
별칭을 사용하게 되면 사용자가 알아보기 더 쉽다.
하단 쿼리를 실행하면 컬럼의 이름은 다음과 같이 나온다.
SELECT LENGTH('deokduck')
FROM DUAL;
AS라는 예약어를 붙여서 길이 라는 별칭을 사용하면 컬럼의 이름이 길이로 나온다.
SELECT LENGTH('deokduck') AS 길이
FROM DUAL;
SQL Alias 사용 가능한 범위
SELECT절에서 컬럼의 별칭을 사용하면 WHERE절에서 사용이 가능할까?
해당 내용은 SQL 실행 순서를 봤으면 이해가 조금 더 수월하다.
SELECT의 실행 순서는 언제인가? HAVING 다음으로 실행이 된다.
SELECT절 컬럼에서 설정한 Alias는 표준 SQL으로는 ORDER BY에서만 사용이 가능하다.
표준 SQL에서는 WHERE, GROUP BY 절은 SELECT절 보다 먼저 실행이 되므로, 별칭 사용이 불가능하다.
예외적으로 MySQL에서는 GROUP BY, HAVING절에서 SELECT에서 설정한 별칭이 사용 가능하다.
TIL : 데이터 필터링
해당 챕터에서는 NULL을 어떻게 다뤄야 하는지?
CASE문, IN구문 중요한 내용들을 많이 다뤘다.
2주차 후기
아직까지는 매주 진행하는 코딩 테스트의 문제는 풀만했다.
점점 난이도가 상승할 거 같다....
서브 쿼리와 통계 쿼리에 대해서 더 공부하고 싶어서 해당 강의를 수강했는데, 주차가 지나도 포기하지 않고 파이팅하자!
다음 3주 차는 그룹핑과 내장 함수에 대해서 학습한다.
'SQL > 프로그래머스 SQL 스터디 2기' 카테고리의 다른 글
[프로그래머스 SQL 스터디 2기] 6주 차 TIL/후기 (0) | 2022.04.13 |
---|---|
[프로그래머스 SQL 스터디 2기] 5주 차 TIL/후기 (0) | 2022.04.10 |
[프로그래머스 SQL 스터디 2기] 4주 차 TIL/후기 (0) | 2022.03.29 |
[프로그래머스 SQL 스터디 2기] 3주 차 TIL/후기 (0) | 2022.03.29 |
[프로그래머스 SQL 스터디 2기] 1주 차 TIL/후기 (0) | 2022.03.03 |