CS/데이터베이스 8

[Database] TOP N QUERY, 계층형 질의

TOP N QUERY페이징 처리를 효과적으로 수행하기 위해 사용한다.전체 결과에서 특정 N개를 추출함ex 성적 상위자 3명TOP-N 행 추출 방법ROWNUMRANKFETCHTOP N(SQL SERVER)ROWNUM출력된 데이터 기준으로 행 번호를 부여하는 함수다.절대적인 행 번호가 아닌 가상의 번호이므로 특정 행을 지정할 수 없다. (= 연산이 불가능하다.)첫 번째 행이 증가한 이후 할당 되므로 > 연산은 사용 불가능하다.1이 먼저 할당 되고 나서 다음 숫자들이 할당 되기 때문에 무조건 rownum에 1이 할당이 먼저 돼야한다. 따라서 row num > 1 의 연산인 경우엔 1이 할당이 안 되기 때문에 오류가 나고  다음과 같이 where 절에 조건을 걸면 상위 5명의 급여를 추출할 수 없다. 이유는 s..

[Database] 윈도우 함수 정리

윈도우 함수서로 다른 행의 비교나 연산을 위해 만든 함수group by를 쓰지 않고 그룹 연산이 가능하다.lag, lead, sum, avg, min, max, count, rankover 뒤의 순서를 잘 지켜줘야 한다. 기존의 문제다음과 같이 다른 컬럼과 그룹함수를 같이 사용하는 것이 불가능 했었다.이를 윈도우 함수로 해결할 수 있다. sum, count, min, max등over 절을 사용하여 윈도우 함수로 사용이 가능하다.반드시 연산할 대상을 그룹함수의 입력값으로 전달해야한다. SUM OVER()전체 총 합, 그룹별 총 합 출력이 가능하다. 위의 문제점을 다음과 같이 해결할 수 있다. 누적합 같은 것을 사용하지 않고 전체 총합만 나타낼 것이기 때문에sum(sal) over()로 윈도우 함수가 끝났다..

[Database] 집합 연산자, 그룹함수 (UNION, UNION ALL, INTERSECT, MINUS, GROUPING SETS, ROLLUP, CUBE)

집합 연산자select 문 결과를 하나의 집합으로 간주, 그 집합에 대한 합집합, 교집합, 차집합 연산select 문과 select 문 사이에 집합 연산자 정의두 집합의 컬럼이 동일하게 구성되어야 한다. (각 컬럼의 데이터 타입과 순서가 일치해야함)전체 집합의 데이터 타입과 컬럼명은 첫번째 집합에 의해 결정됨합집합두 집합의 총 합 출력UNION과 UNION ALL 사용 가능1. UNION중복된 데이터는 한 번만 출력중복된 데이터를 제거하기 위해 내부적으로 정렬 수행중복된 데이터가 없을 경우는 UNION 대신 UNION ALL 사용(불필요한 정렬 발생할 수 있으므로)2. UNION ALL중복된 데이터도 전체 출력 UNION의 경우 중복되는 20번 부서에 대한 중복 제거 결과가 나타난다.  UNION ALL..

[Database] 서브쿼리 정리 (스칼라, 인라인뷰, where절 서브쿼리)

서브쿼리하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.반드시 괄호로 묶어야 한다.ex) select 안의 select 문, insert, update, delete 안의 select 문서브 쿼리 사용가능한 곳select 절from 절where 절having 절order by 절기타 DML (insert, delete, update, merge)group by는 사용 불가서브 쿼리 종류1. 동작하는 방식에 따라 분류비연관 서브쿼리서브쿼리가 메인쿼리 컬럼을 가지고 있지 않은 형태의 서브쿼리를 의미한다.메인쿼리에 섭쿼리가 실행된 결과 값을 제공하기 위한 목적으로 사용연관 서브쿼리서브쿼리가 메인 쿼리 컬럼을 가지고 있는 형태의 서브쿼리일반적으로 메인쿼리가 먼저 수행된 후에 서브쿼리에서 조건이..

[Database] JOIN (조인) 정리 (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)

JOIN여러 테이블의 데이터를 사용하여 동시 출력하거나 참조 할 경우 사용from 절에 조인할 테이블 나열oracle 표준은 테이블 나열 순서가 중요하지 않다.where 절에서 조인 조건을 작성한다.동일한 열 이름이 여러 테이블에 존재할 경우 열 이름 앞에 테이블 이름이나 alias를 사용한다.여기서 alias는 당연히 from 절에서 정의해야 한다.from 절에서 alias는 select 와 다르게 as를 붙이면 안 된다.N개의 테이블을 조인하려면 최소 N-1개의 조인 조건이 필요하다.natural join은 말 그대로 자연스러운 조인으로, 조인 조건을 적지 않는다.자동으로 이름이 같은 컬럼을 찾아 해당 컬럼을 기준으로 조인된다. cross join도 마찬가지로 조인 조건을 적지 않는다. N * M으로..

[Database] GROUP BY, HAVING, ORDER BY 정리

GROUP BY 절각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문식group by 절에 그룹을 지정할 컬럼을 전달 (여러 개 전달 가능)만약 그룹 연산에서 제외할 대상이 있다면 미리 where 절에서 해당 행을 제외함(WHERE 절이 GROUP BY 보다 먼저 수행되므로)그룹에 대한 조건은 where 절에서 사용할 수 없음select 절에 집계함수를 사용해서 그룹 연산 결과를 표현해야 한다.GROUP BY 절을 사용하면 데이터가 요약되므로 요약되기 전 데이터는 select 절에 출력할 수 없다.sql의 실행 순서는 from -> where -> group by -> having 이다 group by에서 그룹핑이 되기 때문에 그 이전에 수행되는 where에서는 집계함수를 사용할 수가 없다..

[Database] SQL 함수 정리 (ORACLE), where 절 분석

그룹함수그룹함수란?다중행 함수여러 값이 input 값으로 들어가서 하나의 요약된 값으로 리턴된다.group by와 함께 자주 사용된다.ORACLE과 SQL-SERVER의 함수가 거의 동일하다.위는 ORACLE의 기준이며SQL -SERVER에서는 다음과 같이 함수가 달라진다.VARIANCE -> VARSTDDEV -> STDEV 일반 함수그룹 함수를 제외한 나머지 함수를 일반 함수라고 한다. (널 치환 함수 등등,,)DECODE: 예시를 봐보자 (DEPTNO,10,A,B) 가 있는데 DEPTNO는 특정 컬럼의 이름이다.해달 컬럼의 값이 10과 같다면 A를 반환하고 같지 않다면 B를 반환해라 라는 의미다.NVL은 COMM이란 컬럼에 NULL이 있다면 0으로 바꿔주겠다 라는 의미이다.NULL이 아니라면 해당 ..

[Database] 정규화란? (1NF, 2NF, 3NF, BCNF,4NF, 5NF)

정규화 (Nomalization)정규화의 목표는 테이블 간에 중복된 테이터를 허용하지 않게 만드는 것이다. 중복된 데이터를 허용하지 않음으로서 무결성, 일관성, 유연성을 향상 시킬 수 있고,DB의 저장 용량도 줄일 수 있다. 이러한 정규화는 단계가 정해져 있다. 하나씩 살펴보도록 하자. 제 1정규화제 1정규화란 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것이다. 예를 들어 밑과 같은 테이블이 존재한다고 했을 때,위의 취미들 컬럼은 원자성을 만족하지 못한다.복합 속성일 경우, 데이터의 검색 및 조작이 어려워지고, 중복 데이터가 증가할 확률이 높아진다.따라서 제 1정규화를 통해 원자성을 만족시키도록 해야한다.제 2정규화제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만..