본문 바로가기

SQL

(11)
SQL 옵티마이저와 인덱스 기본 옵티마이저는 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할을 수행합니다. 옵티마이저는 크게 규칙 기반 옵티마이저(RBO)와 비용 기반 옵티마이저(CBO)로 나뉩니다. 현재 대부분의 관계형 DB는 비용기반 옵티마이저만을 제공합니다. 1. 규칙기반 옵티마이저 RBO는 우선순위를 기반으로 실행계획을 생성합니다. 오라클의 규칙기반 옵티마이저에는 총 15가지 규칙이 있으며 가장 기본은 RowID를 통해 테이블에서 하나의 행을 엑세스 하는 방식입니다. 규칙기반 옵티마이저는 인덱스를 이용한 방식이 전체 테이블 엑세스 방식보다 우선순위가 높습니다. 그렇기 때문에 인덱스가 존재한다면 항상 인텍스를 사용한 실행계획을 생성합니다. 조인 순서를 결정할 때는 조인 칼럼 인덱스 존재 유무가 중요한 판단 기준입..
윈도우함수(WINDOW FUNCTION) 총정리, 순위함수와 분석함수 SQL의 윈도우 함수란 행과 행 간을 비교, 연산, 정의하기 위한 함수이다. 분석함수 또는 순위함수라고 하기도 한다. 다른 함수들처럼 중첩해서 사용할 수는 없지만 서브쿼리에서는 사용가능하다. WINDOW FUNCTION 기본 문법 윈도우 함수에는 OVER 문구가 필수로 들어간다. SELECT WINDOW_FUNCTION (ARGUMENTS) OVER([PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절]) FROM 테이블명; WINDOW FUNCTION 종류 구분 함수 비교 순위 함수 RANK, DENSE_RANK, ROW_NUMBER 일반 집계 함수 SUM, MAX, MIN, AVG, COUNT SQL서버에서는 OVER 절 내에서 ORDER BY 지원하지 않음 그룹 내 행 순..
외부 조인) LEFT JOIN, RIGHT JOIN, FULL JOIN 차이 알아보기 OUTER JOIN은 외부 조인으로 기준이 되는 테이블이 조인 수행 시 드라이빙 테이블이 됩니다. 드라이빙 테이블이란 JOIN문을 실행했을 때 첫번째로 ACCESS되는 테이블을 의미합니다. 쿼리 수행 시 OUTER는 생략해도 무방합니다. 말로만 하면 헷갈릴 수 있기 때문에 실제 예시를 갖고 설명해보겠습니다. 위 테이블은 JOIN에 사용될 테이블입니다. EMP테이블의 기본키는 A컬럼, DEPT테이블의 기본키는 C컬럼이며 EMP테이블의 C컬럼은 DEPT테이블을 참조로 하는 외래키입니다. LEFT JOIN 왼쪽 테이블을 기준으로 A, B 테이블을 비교해서 B테이블에서 조인 조건에 해당하는 값이 있다면 그 값을 가져오고 값이 없다면 NULL값을 가져옵니다. 즉, WHERE절로 조회 조건을 제한하지 않는 이상 왼..
오라클 DELETE, TRUNCATE, DROP 차이점 알아보기 오라클에서 데이터를 삭제할 때 DELETE, TRUNCATE, DROP을 사용한다. 비슷한 것 같지만 3개의 구현 방법은 전부 다르다. DELETE 데이터는 지워지지만 테이블 용량은 그대로이다. 전체 또는 일부만 선택해서 삭제하는 것이 가능하며 COMMIT 이전에는 ROLLBACK이 가능하다. UNDO를 위한 데이터를 생성하기 때문에 TRUNCATE에 비해서 속도가 느리다. TRUNCATE TRUNCATE는 데이터를 전체 삭제하는 명령어이다. DELETE처럼 일부만 삭제하는 것은 불가능하고 무조건 전체 데이터를 삭제한다. 이때 주의할 점은 데이터와 인덱스만 삭제되고 테이블은 삭제되지 않는다는 점이다. 그렇기 때문에 TRUNCATE 명령어를 실행하고 나면 컬럼만 남아서 테이블이 처음 만들어졌을 때의 상태로..
SQL CREATE TABLE로 테이블 생성하기 및 PK / FK 등 제약 조건 알아보기 오늘은 CREATE TABLE 명령어로 간단하게 테이블을 생성하는 방법에 대해서 알아보겠습니다. 사실 회사에서는 이미 구축되어 있는 DB 마트를 사용하고 개인 테이블은 회사 시스템 내에서 생성하기 때문에 CREATE TABLE로 테이블을 만들 일은 없지만 SQLD 시험 공부를 위해 정리해보고자 합니다. 국가공인 SQL자격증 - SQLD CREATE TABLE로 테이블 생성 CREATE TABLE 테이블명 (컬럼1 데이터타입 조건, 컬럼2 데이터타입 조건, 컬럼3 데이터타입 조건, ...., ) SQL 데이터타입에 대한 자세한 설명은 아래 포스팅을 참고해주시기 바랍니다. SQL 데이터타입 가장 기본적인 테이블 생성 방법입니다. 이제 여기에 추가로 제약 조건을 걸어서 PK나 FK 등을 설정해주어야 합니다. ..
SQL 집계함수 - ROLLUP, CUBE, GROUPING SETS SQL의 집계함수에 대해 살펴보겠습니다. 보통 GROUP BY절 외에 ROLLUP, CUBE 등 다양한 그룹함수에 대해서도 같이 알아보겠습니다. 1. GROUP BY 절 SELECT 상품ID, 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY 상품ID, 월; 가장 기본적이고 단순한 GROUP BY절만 사용한 결과입니다. 상품ID와 월에 대해 매출액의 합계를 구해주었습니다. 2. ROLLUP ROLLUP함수는 소그룹간의 합계를 계산하는 함수입니다. ROLLUP을 사용하면 GROUP BY로 묶은 각각의 소그룹 합계와 전체 합계를 모두 구할 수 있습니다. SELECT 상품ID, 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY ROLLUP(상품ID, 월); NULL값으로 표..
SQL 유저라면 반드시 알아야 할 SQL 명령어 총정리 SQL은 관계형 데이터베이스에서 데이터 정의, 조작, 제어를 위해 사용하는 언어이다. 관계형 데이터베이스를 유일하게 조작할 수 있는 유일한 언어이기 때문에 SQL은 데이터를 다루는 사람에게 있어서는 가장 기본적인 언어라고 할 수 있다. 관계형 데이터베이스는 메타데이터를 총괄 관리할 수 있기 때문에 데이터의 성격, 속성 등을 체계화할 수 있고 데이터 표준화를 통해 데이터 품질 확보가 가능하다는 장점이 있다. 또한 이상(Anomaly) 현상을 제거하고 데이터 중복을 피할 수 있으며 동시성과 병행 관리가 가능하기 때문에 여러 명이 동시에 입력, 수정, 삭제 등 데이터를 공유하고 조작할 수 있다. 그렇기 때문에 대부분의 기업들의 핵심 데이터는 모두 관게형 데이터베이스 구조로 저장이 된다. 오늘은 SQL을 다룰 ..
SQLD 자격증 알아보기 - 2021년 시험일정과 시험과목 나는 회사에서 주로 SAS와 오렌지를 이용해서 SQL문을 쓰고 있다. 입사하고 처음으로 배운거라 아직 부족한 점이 많고.. 대부분은 팀에서 공유하는 쿼리를 받거나 여러개를 짜집기 해서 쓰기 때문에 입사한지 10개월이나 되었는데도 아직 SQL 실력이 그저그런것 같다. 특히나 대부분 JOIN문만 쓰다보니 항상 쓰는 것만 쓰는 기분ㅜ 역시나 또 회사에서 계속 쓰는 언어이기도 하고 나도 좀 더 발전하고 싶다는 생각이 들어 SQLD 시험에 응시하기로 했다. 사실 데이터 자격증은 P자격증이 인정받는 자격증이긴 하지만 P자격증은 워낙 난이도가 높아 일단은 좀 더 쉽게 접근할 수 있는 D자격증부터 취득하기로 했다. 항상 이직을 생각하는 아가리이직러라..ㅋㅋ 시간 날 때마다 자소설 닷컴을 들여다보는데 데이터분석 직무에서..