반응형

SQL & DB 70

[SQL] 부정 논리 연산자(not in 등) 과 Null의 관계

실무에서 SQL쿼리를 사용하다 보면 Where 조건에 in과 not in 조건을 많이 사용할 텐데, not in(부정 논리 연산자)을 사용할때 주의하여야 한다. 그 이유는 NULL 때문이다.부정연산자부정 논리 연산자의 경우 위 표처럼 같지 않은 경우를 필터링할 때 사용하는 연산자이다.주로 not in이나 '', '!=' 등을 많이 사용한다. 부정 연산자와 Null의 관계결론부터 말하자면 부정 연산자를 사용하면 Null값이 모두 누락되게 된다.예시를 확인해보자 (샘플데이터 쿼리는 포스팅 최하단에 있음)SELECT * FROM orders WHERE 1=1 AND product_id not in (101,102)원래 의도는 product_id가 101,102인 것만 제외하고 조회하고 싶..

SQL & DB/PostgreSQL 2024.07.08

[PostgreSQL] Json(Jsonb) 컬럼 Query 방법 (->, ->>과 json_array_elements)

이번 포스팅에서는 PostgreSQL에서 Json(Jsonb)로 이루어진 컬럼을 Query 하는 방법을 알아봅니다. Json과 Jsonb의 차이Json의 특징입력된 텍스트의 원본을 그대로 저장 Json은 데이터를 불러올때 입력된 텍스트를 파싱해야하기 때문에 시간이 오래 걸림원본을 그대로 저장하기에 의미없는 공백등을 저장Json 객체 내의 key 순서가 보장되며, 중복된 key가 있는 경우도 중복되어 저장Jsonb의 특징Jsonb는 분해된 바이너리 형식으로 저장 (데이터를 정제하여 저장)Jsonb는 파싱할 필요가 없기 때문에 시간이 적게 걸림공백을 저장하지 않음객체들의 key순서를 보장하지 않으며, key를 중복해서 저장하지 않음. 입력에 중복된 key가 지정된 경우 마지막 값으로 대체객체들의 key순서를..

SQL & DB/PostgreSQL 2024.07.07

[PostgreSQL] generate_series을 활용한 날짜/시간 더미 데이터 생성 (월단위, 일단위, 시간단위)

날짜/시간 더미 데이터 생성이번 포스팅에서는 postgresql에서 generate_series 함수를 활용하여 날짜 및 시간 더미 데이터를 생성하는 방법을 알아봅니다.generate_seriesgenerate_series (start,stop[,step])일련의 숫자를 생성하는 함수. 시작과 끝, 증가 단계를 설정할 수 있음start : 시작 값입니다.stop : 시리즈의 끝값.step : 각 연속 숫자 사이의 증분 값. 선택 사항이며, 기본값은 1예시)SELECT generate_series(1, 10) as cnt 월 단위 데이터 더미 생성 (year-month)2024년 1월부터 12월까지의 더미 데이터 생성"generate_series(0,11)"을 활용하여 0부터 11까지 sequence를 생..

SQL & DB/PostgreSQL 2024.06.30

[PostgreSQL] PostgreSQL의 특징과 장단점

PostgreSQL이란 오픈소스로 개발된 관계형 데이터베이스 ( ORDBMS) 다양한 영역에서 활용되고 있으며, 오라클/MySQL/MsSQL다음으로 많이 사용되는 RDBMS PostgreSQL 특징 1. 라이센스 비용이 전혀 들지 않음 PostgreSQL은 BSD(Berkeley Software Distribution) 라이센스를 활용하여 개발되었음 PostgreSQL은 자유로운 오픈 소스 라이선스를 통해 원하는 대로 DBMS를 사용, 수정 및 배포할 수 있음 따라서 데이터 volume가 커지더라도 라이센스 문제가 없기에, 기업에서는 부담이 전혀 없음 CF) BSD(Berkeley Software Distribution) BSD는 미국 캘리포니아 대학교 버클리의 CSRG(Computer System Re..

SQL & DB/PostgreSQL 2023.12.08

[PostgreSQL/MYSQL] 날짜/시간 계산(INTERVAL타입, age함수) (DATEDIFF, TIMESTAMPDIFF)

DATASET QUERYDROP TABLE IF EXISTS mst_users_with_dates;CREATE TABLE mst_users_with_dates ( user_id varchar(255) , register_stamp varchar(255) , birth_date varchar(255));INSERT INTO mst_users_with_datesVALUES ('U001', '2020-02-28 10:00:00', '2000-02-29') , ('U002', '2020-02-29 10:00:00', '1992-03-29') , ('U003', '2020-03-01 10:00:00', '2002-01-29') , ('U004', '2020-03-01 11:..

SQL & DB/PostgreSQL 2023.11.24

[PostgreSQL] CSV File를 Table에 삽입(Import)하기.

PostgreSQL에서 CSV File를 Table에 삽입(Import)하기.CSV파일을 PostgreSQL에 삽입하는 방법은 다음과 같습니다.먼저 데이터를 다운로드합니다. 그리고 데이터를 넣을 데이블을 만들어줍니다.DROP TABLE IF EXISTS sale_data;CREATE TABLE sale_data ( order_id SERIAL, date DATE, category VARCHAR(50), itemcode integer, price integer, amount integer, Primary KEY(order_id)); 데이블을 만들어 준후 CSV파일을 IMPORT하는 방법은 PSQL을 이용하는 것과 PgAdmin 기능을 이용하는 2가지 방법이 있습니다. PSQL로 CSV파일 IM..

SQL & DB/PostgreSQL 2023.03.05

[PostgreSQL] 중복행 제거

PostgreSQL에서 중복을 제거하는 방법은 다음과 같습니다. 로직의 원리는 중복되지 않는 데이터의 id만을 필터링해서 해당 id가 아닌 id를 제거하는 로직입니다. 1. 중복 제거하고자 하는 컬럼들만 group by 해서 가장 앞의 id만 남기는 로직 DELETE FROM table_name WHERE id NOT IN ( SELECT MIN(id) FROM table_name GROUP BY column_name ); 2. 중복 제거하고자 하는 컬럼들을 기준으로 rank를 매긴 다음에, 가장 앞의 id만 남긴다. DELETE FROM table_name WHERE id IN ( SELECT T.id FROM ( SELECT id , ROW_NUMBER() OVER(PARTITION BY column..

SQL & DB/PostgreSQL 2023.02.18

[SQL 튜닝] SQL 옵티마이저

선택도와 카디널리티 1. 선택도 : 조건절에 의해 선택되는 레코드 비율 선택도 = 1 / NDV(컬럼 값 종류 개수) 카디널리티 : 전체 레코드 중 조건절에 의해 선택되는 레코드 수 카디널리티 = 총 로우 수 * 선택도 = 총 로우 수 / NDV 옵티마이저는 카디널리티를 구하고, 데이터를 액세스하는데 드는 비용을 계산해서 데이블 액세스 방식, 조인순서, 조인방식 등을 결정 선택도를 제대로 계산하는 것이 중요 통계정보 테이블 통계 인덱스 통계 컬럼 통계 : 테이블 통계 수집할 때 함께 수집. '=' 조건에 대한 선택도는 데이터 분포가 균일하지 않은 컬럼에서는 잘못 산출될 수 있기 때문에 옵티마이저는 일반적인 컬럼통계 외에 히스토그램을 추가로 활용 시스템 통계 : 애플리케이션 및 하드웨어 성능 특성 측정 C..

SQL & DB/SQL 튜닝 2021.06.26

[SQL 튜닝] Lock과 트랜잭션 동시성 제어

오라클 Lock - 공유 리소스와 사용자 데이터를 보호할 목적으로 DML Lock, DDL Lock, 래치, 버퍼 Lock, 라이브러리 캐시 Lock/Pin 등 다양한 종류의 Lock을 사용 - 래치 : SGA에 공유된 각종 자료구조를 보호하기 위해 사용 - 버퍼 LOCK : 버퍼 블록에 대한 액세스를 직렬화 하기 위해 사용 - 라이브러리 캐시 Lock와 Pin은 라이브러리 캐시에 공유된 SQL 커서와 PL/SQL프로그램을 보호하기 위해 사용 - 애플리케이션 개발에서 가장 중요한 것은 DML LOCK - 다중 트랜잭션이 동시에 액세스하는 사용자 데이터의 무결성 보호 DML 로우 Lock - 두개의 동시 트랜잭션이 같은 로우를 변경하는 것을 방지 - DML 로우 Lock에는 배타적 모드를 사용하므로 UPD..

SQL & DB/SQL 튜닝 2021.06.19
반응형