목록SQL (7)
forest_moon
옵티마이저(Optimizer) 옵티마이저란 가장 효율적인 방법을 통해 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진이다. 사용자가 구조화된 질의어(SQL)로 결과 집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해준다. 옵티마이저가 생성한 SQL 처리경로를 실행계획(Excution Plan) 이라고 한다. 실행계획(Excution Plan) 동일한 결과가 나오는 SQL 이라도 어떻게 실행하는지에 따라서 성능이 달라질 수 있다. 옵티마이저는 데이터 딕셔너리(Data Dictionary)에 있는 오브젝트 통계,시스템 통계 등의 정보를 사용해서 예상되는 비용을 평가하여 여러 실행계획(Excution Plan) 을 작성한다 옵티마이저는 이들의 ..
윈도우 함수(Window Functoin) 윈도우 함수란 행과 행간의 관계를 쉽게 정의하기 위해 만들어진 함수를 말한다 분석함수 또는 순위함수라고 불리고, 다른 함수들 처럼 중첩해서 사용할 수는 없지만 서브쿼리는 사용이 가능하다. 기존 SQL 언어는 컬럼과 컬럼간의 연산 과 비교, 집계에 특화되어 있는 언어인데 반해 행과 행간의 관계를 정의하거나 비교, 연산 하는 것은 하나의 SQL 문으로 처리하기가 매우 번거롭다. 이러한 문제를 해결하기 위해 생겨난 것이 윈도우 함수이다. Window Function 문법 SELECT WINDOW_FUNCTION(컬럼) OVER([PARTITION BY 컬럼] [ORDER BY 컬럼]) FROM 테이블; OVER : OVER은 윈도우 함수에서 꼭 들어가야 하며 OVER..
LAG, LEAD 함수 LAG / LEAD (컬럼명 [,offset] [,default]) OVER([PARTITION BY 컬럼] ORDER BY 컬럼 ) ★ SQL SERVER 에서는 지원하지 않는 함수이다 ! LAG 함수 - 이전 행의 값을 리턴한다 LEAD 함수 - 다음 행의 값을 리턴한다 offset - 값을 가져올 행의 위치 ( 기본값 1 ) - 생략가능 default - 값이 없을 경우의 기본값 - 생략가능 PARTITION BY - 그룹 컬럼명 - 생략가능 ORDER BY - 정렬 컬럼명 - 필수 LAG / LEAD 함수 SELECT number, weight, LAG(number) OVER(ORDER BY number) AS numberlag , LEAD(number) OVER(ORDER..
WITH 문 임시테이블 또는 가상의 테이블을 생성해 사용하는 것. 반복 또는 중복되는 쿼리들의 성능을 높이기 위해 WITH절을 이용해서 임시테이블을 만들어 사용할 수 있다. 가상의 테이블을 생성해 사용하는 것은 서브쿼리랑 같은 부분이지만 서브쿼리는 서로 참조할 수 없어서 필요시에는 같은 내용을 계속 반복해서 작성해야한다. 그리고 서브쿼리는 쿼리중간에 추가하는 부분이기 때문에 가독성 부분에서도 많이 떨어진다. WITH 문 사용하는 방법 WITH (테이블명 = A) AS (SELECT ~ FROM ~) SELECT * from A WITH (테이블명 = A) AS (SELECT ~ FROM ~ UNION ALL AS (SELECT ~ FROM ~ ) SELECT * from A 주로 예시나 문법을 보면 UN..
UNION 연산자는 두 개 이상의 SELECT 문의 결과 집합을 결합하는 데 사용된다. UNION은 두개의 SQL 문의 결과를 결합하는데 사용되는 명령이다. 그러고 보면 UNION는 JOIN와 다소 유사하다. 이 두 명령 모두 여러 테이블에서 데이터를 가져올 수 있기 때문이다. 그러나 UNION이 제한되는 것은 두개의 SQL 문에서 만들어진 필드가 동일한 데이터 유형에 사용되어야 한다. 또한 UNION 명령을 사용하는 경우 중복 데이터는 출력되지 않는다(SELECT DISTINCT와 유사). UNION 의 생성 조건 UNION 내의 각 SELECT 문은 같은 수의 열을 가져야 한다. 열은 유사한 데이터 형식을 가져야 한다. 각 SELECT 문의 열은 또한 동일한 순서로 있어야 한다. UNION ALL U..
SQL을 실행할때 보면 분명 맞는데 쿼리의 실행 순서를 모르고 문법을 실행 해서 오류가 난적이 많았다. 실제 쿼리의 실행순서는 다음과 같다. 1. FROM 2.WHERE 3.GROUP BY 4,HAVING. 5.SELECT. 6.ORDER BY 각 순서에 대해서 정리해보면. FROM 절 FROM절에서 전체 테이블에 대한 정보를 가져온다. WHERE절 WHERE절에서는 FROM절에서 읽어온 데이터에서 조건에 맞는 결과만 데이터를 간추려 준다. GROUP BY 절 선택한 칼럼으로 GROUPING 작업을 한 결과를 갖고 있습니다. GROUP BY 절을 사용하게 되면 해당 칼럼으로 그룹함수를 사용할 수 있습니다. HAVING 절 HAVING절은 그룹핑 작업이 된 이후에 사용되는 조건절이다. HAVING절의 조건..
NULL이란 우선 NULL이란 unkown 또는 N/A(not applicable)이라는 의미이다. 0이나 공백과는 다르게 아예 값이 없는 값이다. 즉, 알수없거나 존재하지 않아서 적할수 없다. 그래서 테이블을 생성할 때는 기본키를 NULL일 수가 없다는 조건이 붙는다.(NOT NULL) 반면에 기본키가 아닌 null값이 포함된 데이터를 연산 함수를 사용하면 null값이 포함된 값을 자동으로 제외 시키고 계산해준다. NULL 처리하기 SQL에서 NULL을 처리하는 방법은 함수를 사용해 처리하거나 CASE WHEN문을 사용해서 해결 할 수 있다. https://school.programmers.co.kr/learn/courses/30/lessons/131114 함수 NVL(a,b). //ORACLE ISN..