본문 바로가기

DB

(9)
MAC에서 MYSQL, MARIADB 설치하기 AWS RDS를 이용해서 MariaDB사용하고 있는 중이였는데...설정을 몇개 누락해서 청구서가 날아왔다...😭 그래서 homebrew를 이용해서 맥북에 MaraDB를 설치하려고 한다. 1. 설치 2. 설정 설치 끝! MYSQL 삭제
[SQLD] SQL 활용 - Table Partition 1️⃣ Partition 기능 ∙ 파티션은 대용량의 테이블을 여러 개의 데이터 파일에 분리해서 저장한다. ∙ 테이블의 데이터가 물리적으로 분리된 데이터 파일에 저장되면 입력, 수정, 삭제, 조회 성능이 향상된다. ∙ 파티션은 각각의 파티션 별로 독립적으로 관리할 수 있다. 즉, 파티션 별로 백업하고 복구가 가능하며 파티션 전용 인덱스 생성도 가능하다. ∙ 파티션은 Oracle DB의 논리적 관리 단위인 테이블 스페이스 간에 이동이 가능하다. ∙ 데이터를 조회할 때 데이터의 범위를 줄여서 성능을 향상시킨다. 2️⃣ Range Partition ∙ Range Partition은 테이블의 칼럼 중에서 값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 저장하는 것이다. 3️⃣ List Partition..
[SQLD] SQL 활용 - Window Function 1️⃣ 윈도우 함수 ∙ 윈도우 함수는 행과 행 간의 관계를 정의하기 위해서 제공되는 함수이다. ∙ 윈도우 함수를 사용해서 순위, 합계, 평균, 행 위치 등을 조작할 수 있다. 구조 설명 ARGUMENT(인수) 윈도우 함수에 따라서 0~N개의 인수를 설정한다. PARTITION BY 전체 집합을 기준에 의해 소그룹으로 나눈다. ORDER BY 어떤 항목에 대해서 정렬한다. WINDOWING - 행 기준의 범위를 정한다. - ROWS는 물리적 결과의 행 수이고, RANGE는 논리적인 값에 의한 범위이다. ∙ UNBOUNDED PRECEDING은 처음 행을 의미하며, UNBOUNDED FOLLOWING은 마지막 행을 의미한다. 그러므로 TOTAL_SAL에 처음부터 마지막까지의 합계(SUM(SAL))를 계산한 ..
[SQLD] SQL 활용 - Group Function 1️⃣ Group Function 1) ROLLUP ∙ ROLLUP은 GROUP BY의 칼럼에 대해서 Subtotal을 만들어 준다. ∙ ROLLUP을 할 때 GROUP BY구에 칼럼이 2개 이상 오면 순서에 따라서 결과가 달라진다. ∙ 위의 예는 DEPARMENT_ID에 대해서 GROUP BY로 급여합계를 계산하고 부서별 전체합계를 추가해서 계산했다. 즉, ROLLUP은 DEPARTMENT_ID에 대해서 기존 GROUP BY와는 다르게 부서별 전체합계를 게산하게 된다. ∙ DECODE문은 전체 합계를 조회할 때 '전체합계'라는 문자를 출력하기 위해서 사용된다. DECODE문을 사용해서 DEPARTMENT_ID가 NULL 과 같으면 '전체합계'라는 문자를 출력하고 그렇지 않으면 부서번호(DEPARTMEN..
[SQLD] SQL 활용 - Subquery 1️⃣ Main query와 Subquery ∙ Subquery는 SELECT문 내에 다시 SELECT문을 사용하는 SQL문이다. ∙ Subquery의 형태 - FROM구에 SELECT문을 사용하는 인라인 뷰(View). - SELECT문에 Subquery를 사용하는 스칼라 서브쿼리(Scala Subquery). - WHERE구에 SELECT문을 사용하면 서브쿼리(Subquery)라고 한다. ∙ WHERE 구에 있는 SELECT문은 서브쿼리(Subquery)이고 괄호 내에 SELECT문을 사용한다. ∙ 서브쿼리 밖에 있는 SELECT문은 메인쿼리(Mainquery)이다. ∙ FROM구에 SELECT문을 사용하여 가상의 테이블을 만드는 효과를 얻을 수 있다. ∙ FROM구에 SELECT문을 사용한 것인 인..
[SQLD] SQL 활용 - Connect by(계층형 조회) ∙ 계층형 조회는 Oracle DB에서 지원하는 것으로 계층형으로 데이터를 조회할 수 있다. ∙ 예를 들어 부장에서 차장, 차장에서 과장, 과장에서 대리, 대리에서 사원 순으로 트리 형태의 구조를 위에서 아래로 탐색하면서 조회하는 것이다. 역방향 조회도 가능하다. ∙ Connect by는 트리(Tree) 형태의 구조로 질의를 수행하는 것으로 START WITH구는 시작조건을 의미하고, CONNECT BY PRIOR는 조인 조건이다. Root 노드로부터 하위 노드의 질의를 실행한다. ∙ 계층형 조회에서 최대 계층의 수를 구하기 위한 문제, MAX(LEVEL)을 사용하여 최대 계층 수를 구한다. (즉, 게층형 구조에서 마지막 Leaf Node의 계층 값을 구한다. - EMPLOYEE_ID와 MANAGER_I..
[SQLD] SQL 활용 - Join 1️⃣ EQUI(등가) 조인(교집합) 1) EQUI(등가) 조인 ∙ 조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정이다. ∙ 조인의 가장 기본은 교집합을 만드는 것이다. ∙ 2개의 테이블 간에 일치하는 것을 조인한다. 2) INNER JOIN ∙ EQUI 조인과 마찬가지로 ISO 표준 SQL로 INNER JOIN이 있다. INNER JOIN은 ON구를 사용해서 테이블을 연결한다. 3) INTERSECT 연산 ∙ INTERSECT 연산은 2개의 테이블에서 교집합을 조회한다. (2개의 테이블에서 공통된 값을 조회한다.) 2️⃣ Non-EQUI(비등가) 조인 ∙ Non_EQUI는 2개의 테이블 간에 조인하는 경우 "="을 사용하지 않고 ">", "=", "
[SQL] 페이징을 위한 ROWNUM과 인라인뷰(@Oracle) ROWNUM - Oracle에서는 페이지 처리를 위해서 ROWNUM이라는 특별한 키워드를 사용해서 데이터에 순번을 붙여 사용한다. - ROWNUM은 SQL이 실행된 결과에 넘버링을 해준다고 생각하면 된다. - 모든 SELECT문에는 ROWNUM이라는 변수를 이용해서 해당 데이터가 몇 번째로 나오는지 확인할 수 있다. - ROWNUM은 실제 데이터가 아니라 테이블에서 데이터를 추출한 후에 처리되는 변수이므로 상황에 따라서 그 값이 매번 달라질 수 있다. - SQL에 아무런 조건이 없기 때문에 데이터는 테이블에 섞여 있는 상태 그대로 나오게 된다.(테이블을 FULL 스캔한 것과 동일하다.) - ROWNUM은 테이블에 존재하지 않고, 테이블에서 가져온 데이터를 이용해서 번호를 매기는 방식으로 결과는 테이블에서..
[SQL] ORDER BY와 INDEX (@Oracle) ORDER BY의 문제 - 데이터베이스를 이용할 때 웹이나 애플리케이션에 가장 신경 쓰는 부분은 1) 빠르게 처리되는 것 2) 필요한 양만큼만 데이터를 가져오는 것 이다. 예를 들어, 거의 모든 웹페이지에서 페이징을 하는 이유는 최소한의 필요한 데이터만을 가져와서 빠르게 화면에 보여주기 위함이다. 만일 수백 만개의 데이터를 매번 정렬을 해야하는 상황에서 사용자는 정렬된 결과를 볼 때까지 오랜 시간을 기다려야만 하고, 특히 웹에서 동시에 여러 명의 사용자가 정렬이 필요한 데이터를 요청하게 된다면 시스템에는 많은 부하가 걸리게 되고 연결 가능한 Connection의 갯수가 점점 줄어서 서비스가 멈추는 상황을 초래하게 될 것이다. 빠르게 동작하는 SQL을 위해서는 먼저 ORDER BY를 이용하는 작업을 가능하..