IT Study/DB 6

[Programmers SQL] WITH RECURSIVE문

WITH RECURSIVE문 (재귀 쿼리)✅ WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해 재귀를 구성하는 것이 포인트  Ex. n 컬럼의 값이 3보다 작은 값 찾기WITH RECURSIVE cte_count AS ( -- Non-Recursive 문장( 첫번째 루프에서만 실행됨 ) SELECT 1 AS n UNION ALL -- Recursive 문장(읽어 올 때마다 행의 위치가 기억되어 다음번 읽어 올 때 다음 행으로 이동함) SELECT n + 1 AS num FROM cte_count WHERE n  반드시 UNION을 사용해야 함반드시 Non-Recursive도 최소한 1개 요구됨  [ SQL 문제 ] SELECT > 특성 세대의 ..

IT Study/DB 2024.10.22

[DB] 인덱스 개념, 종류 및 적용(feat. PostgreSQL)

인덱스 인덱스는 테이블의 조회 속도를 높여주는 역할을 한다. 즉, 조건에 만족하는 레코드를 빠르게 조회하기 위해서 인덱스를 사용한다. 또한 빠르게 정렬을 하거나 그룹핑을 하기 위해서도 사용한다. 인덱스가 없다면, full scan이 발생하고 시간복잡도는 O(N)이 된다. 인덱스가 걸려있다면, full scan보다 빠르게 조회가 가능하며 시간복잡도는 O(logN)이다. (B-tree 기준) 인덱스의 종류: B-Tree 인덱스, Hash 인덱스, Fractal 인덱스, BRIN 인덱스, GIN 인덱스 등 페이지(블럭) 디스크와 메모리(버퍼풀)에 데이터를 읽고 쓰는 최소 작업 단위로, PK와 테이블 등은 모두 페이지 단위로 관리된다. 쿼리로 하나의 레코드를 읽고 싶어도 하나의 블록을 읽어야 하는 것이다. 디스..

IT Study/DB 2024.01.28

[DB] 트랜잭션 (feat. nest.js, PostgreSQL) +에러해결

트랜잭션 트랜잭션, DB가 처리하는 명령어의 최소 단위로 데이터를 조작하고 명령어를 내리는 조작 단위이다. 트랜잭션을 한국어로 번역하면 “거래” 이다. 즉 하나의 거래를 안전하게 처리하도록 보장해주는 작업이다. 실생활의 예시로 이해를 해보자. 계좌이체를 하는 상황을 생각해보고, A가 B에게 1만원을 보내야 한다고 가정해보자. 만약 트랜잭션이 없을 경우, (1) A가 B에게 1만원 보냄. --중간 처리과정에서 오류 발생-- (2) B는 1만원을 받지 못함 A 잔고: -10,000원 / B 잔고: 유지 트랜잭션이 있다면, 트랜잭션 기능으로 commit과 rollback의 작업 가능하도록 한다. 위의 상황에서 (1)번은 성공했지만 중간 처리과정의 오류로 (2)번에서는 실패했을 때 거래 전의 상태로 돌아갈 수 ..

IT Study/DB 2024.01.26

[TypeORM] QueryBuilder | SELECT 절에서 as 사용하기 (with. getMany vs getRawMany)

사용 언어 및 Stack: Nest.js, TypeORM, PostgreSQL 맞닥드린 문제: alias를 활용해서 변수명을 변경하고 싶다. 기본적인 SQL문은 SELECT 절에서 'as 별명'을 통해 변수명을 변경한다. 그러나 TypeORM에서도 동일하게 as를 넣어보면 적용이 되지 않는다는 것을 알 수 있다. "as"를 적용한 totalCalories 컬럼만 출력되지 않았다. 구글링 결과, getMany()가 아닌 getRawMany()를 적용해보았다. 변수명들이 변경된 것을 볼 수 있다. getMany() vs getRawMany() [ TypeORM 문서 ] " There are two types of results you can get using select query builder: entit..

IT Study/DB 2024.01.24

[SQL] 데이터조작어(DML) (Feat. Elice 12주차)

데이터 조작어(DML) : DB에 저장된 데이터 조회, 수정, 삭제 ex. select, insert, delete, update 함수 종류 및 형식 INSERT INSERT INTO 테이블명(컬럼명) VALUES 값 ex. INSERT INTO fashion(name, size, color) VALUES ("면바지", 90, "블루"); UPDATE UPDATE 테이블명 SET col = value WHERE (col = value); ex. UPDATE fashion SET size = 105 WHERE (size = 100 AND name="카고바지"); DELETE DELETE FROM 테이블명 WHERE (col = value); ex. DELETE FROM fashion WHERE name =..

IT Study/DB 2023.11.11

[SQL] 제약조건 추가 및 삭제 쿼리 (Feat. Elice 12주차)

제약조건 테이블에 잘못된 데이터가 입력되는 것을 방지하기 위한 규칙 제약 조건을 통해 무결성을 지킬 수 있음 제약조건의 종류 NOT NULL NULL 값 비허용 데이터 입력하지 않으면 에러 공백(“”) 입력해도 에러 X UNIQUE 중복되는 값 비허용 똑같은 값 있으면 에러 NULL은 비교가 불가능해서 중복되어도 에러 발생 X DEFAULT 기본값 설정 CHECK 값의 범위를 제한해서 특정 값만 허용. 제한한 값 아닌 경우 에러 발생 ENUM('A', 'B') A와 B, 두 가지 값만 받을 수 있음 등등.. 제약조건 추가 방법 1. 처음 테이블을 구성할 때 추가 2. 이미 만들어져 있는 테이블에 추가 1. 처음에 추가하는 방법 CONSTRAINT 제약조건이름 제약조건 (적용할 속성) 단, NOT NULL..

IT Study/DB 2023.11.07
반응형