컴퓨터 과학/[프로그래머스] SQL DB Essentials 16

[6주차] 강의노트 DML (Data Manipulation Language)

1. 6주차 세션 리뷰 1.0. 지난 과제 리뷰 - 엔지니어로 근무하기위해 SQL은 기본이다. - WITH절 쓰면 CTE라고 한다. - 재귀함수에서 1초가 넘어가면 거기까지만 출력한다. - SQL에서 피벗 기능은 가장 높은 수준이고 많이 쓰인다. - 피벗은 행렬에서 transpose (전치)의 개념과 비슷하다. - 집단함수 Vs 윈도우함수 -> GROUP BY + SUM => 집단함수 (통계치를 구한다.) -> SUM(noOfCustomers) OVER (PARTITION BY office) => 윈도우함수 - 적용되는 범위마다의 합을 투플마다 모두 나타낸다. - 윈도우함수에서 프레임이 가장 중요하다. - 프레임 정의하는 방법이 어렵다. (ROWS절: 행의 개수 / RANGE절: ORDER BY절의 ) ..

Chapter 12 윈도우 함수와 그룹함수

1. SQL 내장 함수 - 단일행 내장 함수: 함수의 입력이 단일행 -> 문자형/ 숫자형/ 날짜형/ 변환형/ NULL관련, 정규식 함수 - 다중행 내장 함수 -> 집단함수: 그룹 별로 통계치 -> 윈도우 함수: 투플 별로 통계치 + PARTITION BY, 모든 투플에 각각 적용, 파티션의 모든 투플들을 리턴한다. -> 그룹함수: 레벨 별로 통계치 제공 (그룹마다 하나의 결과 리턴) - 윈도우 함수는 서브쿼리로 바꿀 수 있다. 1) 집단함수: SUM(), AVG(), COUNT(), MIN(), MAX() 2) 순위함수 - RANK(): -> 1 2 3 3 5 5 7 7 7 7 7 7 ... - DENSE_RANK(): 동점자 처리, 순위는 이어지게한다. -> 1 2 3 3 4 4 5 5 5 5 5 5 ..

Chapter 11 CTE와 통계 테이블

1. CTE(Common Table Expression) - 질의 내에서 이름을 갖는 중간 결과를 임시로 생성한다. - CTAS와 다르게 테이블을 생성하지 않는다. - FROM절 서브쿼리와 기능이 동일하다. 2. 재귀 CTE (Recurrsixe CTE) - 초기값으로 주어진 투플을 이용햇 재귀적으로 연속해서 다음 투플을 생성한다. Ex) Date Series 생성 (중요) - GROUP BY orderDate - SELECT COUNT(*) .. 주문횟수 -> 모든 날짜를 생성하려면? -> SELECT date + INTERVAL 1 DAY 3. pivot 기능 - 피벗 컬럼 값으로 새로운 컬럼을 생성한다. - CASE절과 집단 함수 / GROUP BY절을 이용해서 구현 4. 집단함수에서의 NULL처리..

[5주차] 강의노트 SubQuery & DDL

2022-03-26 프로그래머스 5주차 강의 1. 5주차 세션 리뷰 1.0. 지난 과제 리뷰 - 10장 DDL 내용 !가장! 중요하므로 꼭 실습을 해봐야한다. - 질의의 결과는 항상 테이블이다. (단일값 서브쿼리도 테이블) - 연관서브쿼리는 조인과 비슷하다. 차이점을 정확히 파악한다. -> 연관 서브쿼리가 훨씬 효율적이다. (메인 메모리의 사이즈를 줄여주기 때문에) -> 조인은 두 개의 테이블이 같이 나오는 반면, 서브쿼리는 메인쿼리의 투플을 필터링한다. -> WHERE절의 연관 서브쿼리가 가장 많이 쓰인다. 메인 테이블의 필터 역할 -> FROM절 보다는 WITH절 쓰는 것이 가독성이 좋다. - 10장의 9쪽 메커니즘 아주 중요! - RESTRICT는 NO ACTION과 동일 - 9장은 실습 문제가 있..

Chapter 10 DDL : 무결성 유지 메카니즘, 뷰와 데이터 사전

- 하나의 테이블에서 FK는 여러 개 가질 수 있다. - FK제약 조건 유지를 위한 DBMS의 동작 1) 자식테이블에 대한 INSERT / UPDATE문에서 부모의 PK에 존재하지 않는 값이 시도될때 DBMS가 거부 2) 부모테이블에 대한 DELETE/ UPDATE문에서 부모 테이블의 PK값을 삭제/수정할 때, -> NO ACTION, RESTRICT: DBMS가 실행을 거부 -> SET NULL, SET DEFAULT: 자식테이블에서 해당 PK값 갖는 모든 FK를 NULL 또는 DEFAULT로 수정 -> CASCADE: 자식테이블에서 FK에 해당 PK값을 갖는 모든 투플을 연속적 삭제/ 수정 - 참조무결성 옵션 1) NO ACTION(표준SQL) / RESTRICT(MySQL) 2) SET NULL /..

Chapter 09 DML : 서브쿼리(Subquery)

Def) 서브 쿼리: SQL문 (주로 SELECT문) 안에 포함되는 SELECT문 - 질의문 / 갱신문 위치에 사용가능하다. 1. 주의 사항 1) 컬럼참조 시 주의 사항: 메인쿼리에서 볼 때, 서브쿼리는 블랙 박스 - inline view(FROM절 서브쿼리)의 경우, 메인쿼리는 inline view의 컬럼을 자유롭게 참조한다. 2) ORDER BY절 사용 제한 - WHERE절 서브쿼리에서는 ORDER BY절을 사용하지 못한다. - inline view의 경우, 사용 가능. - WHERE절 서브쿼리 1) 단일값 서브쿼리 (scalar sunquery) 2) 다중값 서브쿼리 (column subquery): ANY | SOME | ALL 3) 다중행 서브쿼리 (table subquery): 여러 개의 투플..

[4주차] 강의노트 DML(다중 테이블 쿼리)

2022-03-19 프로그래머스 4주차 강의 1. 3주차 세션 리뷰 1.0. 지난 과제 리뷰 - DB에서 가장 중요한 개념 "JOIN"을 활용하는 문제로 구성됐다. - JOIN을 완벽히 이해해야 서브쿼리 알 수 있다. - 99%의 조인은 PK, FK 사이에서 이뤄진다. - 프로그래밍에서 for반복문이 중첩되서 돌아가는 것과 같다. - where절 조인은 검색 조건과 조인 조건이 섞여 있어서 가능하다면 FROM절 조인을 쓰는 게 좋다. - 과제할 때 WHERE절에 조인 조건을 깜빡해서 오답이 있었다. - LEFT JOIN에 WHERE 절을 적용하면 조인의 의미가 사라진다. -> customers LEFT JOIN payments ... 하면 결제액 없는 고객도 출력 - OUTER JOIN에 WHERE절을 ..

Chapter 08 DML : 조인 연산을 사용한 검색문 (다중 테이블 검색문)

- WHERE절 조인: INNER JOIN만 제공 - FROM절 조인 1) (INNER) JOIN -> ON절/ USING절 2) NATURAL JOIN 3) LEFT/RIGHT/FULL (OUTER) JOIN -> ON절/ USING절 4) CROSS JOIN - CTAS로 저장 -> ON절 조인을 CTAS로 저장하려면 에러가 난다. (office code가 두 개) -> USING절 조인은 정상 실행된다. (office code가 한 개) - OUTER조인: 조인 조건을 만족하지 않는 투플도 결과에 포함된다. -> FULL [OUTER] JOIN: LEFT 및 RIGHT JOIN 결과의 합집합(UNION) -> MySQL은 FULL [OUTER] JOIN을 지원하지 않는다. - CROSS JOIN: ..

Chapter 07 DML : 집합과 조인 연산을 사용한 검색문 (다중 테이블 검색문)

- 조인 -> WHERE절 조인: SELECT문의 WHERE절에서 INNER JOIN 기능 제공 -> FROM절 조인: SELECT문의 FROM절에서 다양한 조인 기능 제공 Ex) INNER JOIN, NATURAL JOIN, OUTER JOIN, CROSS JOIN -> 카티션 프로덕트: CROSS JOIN - JOIN 일반 형식 SELECT 컬럼명 FROM 테이블 WHERE 조건식 GROUP BY 컬럼명 { UNION [DISTINCT | ALL] } | INTERSECT | EXCEPT SELECT FROM WHERE GROUP BY ORDER BY { 컬럼명 | 컬럼별칭 | 컬럼위치 [ ASC | DESC],}+ ; -> SELECT에서는 ALL 이 디폴트, UNION에서는 DISTINCT가 디폴..

[3주차] 강의노트 DML- Function & Update

2022-03-12 프로그래머스 3주차 강의 1. 3주차 세션 리뷰 1.0. 지난 과제 리뷰 - GROUP BY절 주의사항 - PPT 10쪽 ->productLine을 기준으로 GROUP BY 했지만 name, scale을 select할 수 는 있다. -> 이 부분에 대해 MySQL에서는 에러 여부 옵션 설정이 가능. (ONLY_FULL_GROUP_BY) -> MySQL의 디폴트 SQL mode 중 하나인 ONLY_FULL_GROUP_BY: GROUP BY란? -> ONLY_FULL_GROUP_BY: GROUP BY 기준 컬럼 혹은 기준 컬럼에 종속되지 않은 컬럼이 SELECT, HAVING, OREDER BY절에서 사용되면 질의 실행을 거부한다. -> 표준SQL에서는 에러이다. - 윈도우 함수(중요!)..