UNION ALL SQL에서 UNION ALL은 두 개 이상의 SELECT 문을 결합해서 단일 결과 집합을 만드는 구문입니다. 중복된 결과가 있으면 모두 표시합니다. 구문 SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; 다만 UNION ALL을 사용할 땐 모든 SELECT 문이 동일한 수의 열을 가져야 하며, 열은 서로 비슷한 데이터 타입을 가져야 합니다. 이에 위배되면 오류 메시지를 반환합니다. 예시) 아래와 같이 Sales2019와 Sales2020 두 테이블이 있습니다. 1. 두 테이블 결합 두 테이블을 결합하려면 아래와 같이 쿼리 합니다. SELECT * FROM Sales2019 UNION ALL SEL..
MS SQL Server에서 특정 구분자 패턴으로 저장되어 있는 문자열을 나눌 때 SUBSTRING, CHARINDEX, LEN 함수를 자주 사용합니다. 아마 이 쿼리 패턴을 처음 보시면 복잡해 보일 수도 있지만, 하나씩 분리해 보면 구조가 눈에 들어오실 겁니다. 만약 바로 이해하지 못하더라도 구문을 가져다가 수정해서 바로 쓸 수도 있으니 끝까지 읽어주시면 도움이 되실 겁니다. MSSQL 문자열 분할 쿼리 문자열 분할에 사용할 함수인 SUBSTRING, CHARINDEX, LEN 를 각각 간단히 살펴보겠습니다. SUBSTRING SUBSTRING 함수는 문자열에서 특정 부분을 추출하는데 사용됩니다. SUBSTRING(string, start, length) string : 부분 문자열을 추출하려는 원본 ..
PostgreSQL에서 DB 성능이 좋지 못하다거나, 특정 테이블 데이터가 조회되지 않는 문제 등이 발생했을 때 현재 실행 중인 쿼리를 확인하는 방법으로 디버깅할 수 있습니다. 특히 특정 테이블에 락(Lock)이 걸린 경우도 확인할 수 있어 디버깅하는데 도움이 됩니다. PostgreSQL 실행 중인 쿼리 확인 구문 아래의 쿼리는 PostgreSQL에서 현재 실행 중인 쿼리와 관련된 정보를 반환합니다. SELECT datname, pid, client_addr, client_port, query_start, wait_event_type, wait_event, state, query FROM pg_stat_activity ORDER BY query_start ASC; datname : 현재 데이터베이스의 이..
csv 형태의 데이터는 여러 방면에서 유용하게 쓸 수 있습니다. 데이터 분석 도구에 넣고 돌리기도 적합하고, 데이터를 이관하거나 백업용으로 쓸 수도 있습니다. 몽고 DB의 컬렉션(collection)에 저장된 데이터도 csv 형태로 추출하여 활용이 가능합니다. mongoexport라는 명령어를 이용하면 됩니다. 몽고 DB 컬렉션 데이터 csv 저장 방법 1. 추출할 Collection 필드 확인 몽고 DB에 접속하는 부분부터 진행해 보겠습니다. 저는 testdb 데이터베이스에 있는 컬렉션을 추출할 예정입니다. > show dbs admin 0.000GB config 0.000GB local 0.000GB testdb 0.000GB testdb로 전환합니다. > use testdb switched to d..
테이블 Lock 데이터베이스에서 락(Lock)은 공유 자원에 대한 동시 액세스를 제어하는 메커니즘입니다. 테이블에 락이 걸리면 그 테이블에 대해서는 동시 액세스가 불가합니다. 테이블 락은 거의 모든 DBMS에서 제공하는 기능입니다. 동시에 같은 테이블을 수정하려고 할 때, 하나의 트랜잭션이 끝나지 않은 상태에서 다른 트랜잭션이 동일한 데이터에 접근하려 할 때 데이터베이스에 락이 발생할 수 있습니다. 트랜잭션은 데이터베이스에서 한 번에 수행되어야 하는 연산의 단위를 말합니다. 그렇다고 테이블 락이 나쁜 건 아닙니다. 오히려 데이터베이스의 데이터 일관성을 보장하기 위해 발동하는 기능입니다. 예시) 예를 들어 orders라는 주문 정보를 저장하는 테이블이 있습니다. 트랜잭션 1이 시작되며 새로운 주문을 추가하..
SQL에서 JOIN 연산은 두 개 이상의 테이블에서 관련 있는 데이터를 결합하여 조회하기 위해 사용합니다. JOIN은 여러 종류가 있습니다. LEFT JOIN, RIGHT JOIN, INNER JOIN이 가장 많이 언급되고, 그 외 FULL OUTER JOIN, CROSS JOIN 등도 있습니다. 결론부터 말씀드리면 LEFT JOIN과 INNER JOIN만 기억하셔도 문제없다고 봅니다. 두 JOIN이 실제로 유효하게 사용되는 구문이기 때문입니다. 그중에서도 INNER JOIN이 가장 활용도가 높지 않나 싶습니다. JOIN 1. INNER JOIN INNER JOIN 또는 JOIN은 두 테이블에서 공통되는 부분을 합쳐서 조회하는 구문입니다. 아래의 그림처럼 두 원이 품고 있는 값 중 겹치는 부분입니다. 겹..
리눅스에 PostgreSQL를 설치하고 계속 커맨드라인으로만 조작하는 건 불편함이 있습니다. 이럴 땐 윈도우 PC에 설치한 pgAdmin을 서버와 연결해서 사용하면 됩니다. pgAdmin 4 PostgreSQL 연결 방법 1. 윈도우 pgAdmin4 설치 공식 사이트에서 pgAdmin 4 윈도우용을 설치합니다. 특별한 이유가 없으면 최신 버전으로 설치하시면 됩니다. pgAdmin 4 다운로드 (https://www.pgadmin.org/download/pgadmin-4-windows/) Download pgAdmin 4 (Windows) Download Maintainer: pgAdmin Development Team pgAdmin is available for 64 bit Windows™ 7 SP1 (..
SQL에서 CONCAT은 문자열을 결합하는 데 사용하는 함수입니다. 두 개 이상의 문자열을 입력으로 받아서 이를 연결하고 그 결과를 출력하는 역할을 합니다. 여러 상황에 활용할 수 있는 함수입니다. 예를 들어, 직원 이름과 직급이 각 다른 컬럼으로 저장되어 있는 테이블에서도 CONCAT을 이용해 "000 사원"처럼 문자열을 붙여서 출력 결과를 만들 수 있습니다. CONCAT 구문 SELECT CONCAT(column1, column2, ...) FROM table_name; column1, column2, ... : 합치려는 문자열 또는 컬럼명입니다. 입력한 순서대로 합쳐집니다. 참고로 NULL 값은 무시합니다. 예시) users라는 테이블에서 CONCAT을 사용하는 예시를 보겠습니다. 미국 이름이기 때..
테이블 컬럼에 날짜 값이 일별(yyyy-mm-dd) 형태로 들어가 있더라도, 월별(yyyy-mm)로 데이터를 뽑아낼 수 있습니다. substr(), as, group by 등을 함께 사용하면 됩니다. 날짜 데이터를 substr()를 통해 원하는 형태로 추출하고 그 추출한 값을 기준으로 데이터를 조회하는 방식을 쓰면 됩니다. 이런 방식을 쓰면 날짜 컬럼에 2023-01-15, 2022-01-01 … 처럼 저장되어 있어도 2023년 1월 판매량, 2022년 1월 판매량 … 같이 분류하여 쿼리 할 수 있습니다. 날짜별 데이터 구하기 예를 들어, 아래와 같은 orders 테이블이 있습니다. 주문 날짜와 함께 주문 수량이 저장되어 있습니다. 1) 일별 판매 수량 구하기 이때 단순하게 날짜별 판매 수량의 합계를 구..
PostgreSQL은 base라는 디렉토리에 실질적인 데이터를 저장합니다. base 디렉토리에는 또 각각의 숫자로 된 하위 디렉토리가 있는데, 그 숫자의 의미는 데이터베이스의 OID(Object ID)입니다. PostgreSQL이 데이터베이스를 구분하는 데 사용됩니다. PostgreSQL base 디렉토리 PostgreSQL base 디렉토리에 있는 숫자 파일들은 PostgreSQL의 테이블과 인덱스를 저장하는 데이터 파일들입니다. 각 파일은 PostgreSQL 페이지라는 단위로 구성됩니다. 파일들은 확장자도 없이 숫자로만 되어 있기 때문에 처음 보면 이게 무슨 의미인가 싶을 수 있지만, 그 숫자들은 PostgreSQL가 자동으로 생성하는 객체를 식별하는 숫자일 뿐이니 사용자에게 어떤 의미가 있는 것은 ..