본문 바로가기

Oracle DB

ROW_NUMBER() OVER() 학원에서 배웠던 오라클 DB 중 마지막으로 배웠던 내용이다. 분석함수 중의 하나로 테이블에 있는 데이터를 특정 용도로 분석하여 결과를 반환하는 함수다. ROW_NUMBER( ) OVER( )는 ROWNUM이랑 비슷하다. *항상 같이 해왔던 testboard를 예시 테이블로 들었다. --기본 형식 ROW_NUMBER() OVER([PARTITION BY 컬럼] ORDER BY COLUMN) --[그룹으로 묶어서 그 그룹 내에] COLOMN 기준으로 정렬한 후 번호를 매기는 함수 --그룹을 설정해서 그룹내 멤버(같은 그룹의 행의 갯수)가 2 이상인 경우 COLUMN 기준으로 번호를 매긴다. *대괄호로 묶여있는 부분은 선택사항이다. 그룹으로 묶는다는 것은 컬럼의 같은 값들끼리로 묶는다는 의미다. -- 사용 예.. 더보기
LEFT JOIN, RIGHT JOIN, ROWNUM 지난 글에 OUTTER JOIN이 무엇인지만 말하고 마무리했다. 그래서 이번엔 예시를 보여주고 ROWNUM에 대해 알아보자. 1.LEFT JOIN 두 테이블을 결합해서 누가 몇 개의 글을 작성했는지를 보여주는 쿼리문이다. bidx의 갯수로 글의 개수를 파악하여 작성했다. 현재 결과를 보면 두 개의 열로 나와있는데, 이걸 합쳐서 나타낼 수 있다. '||'를 이용하면 연달아 하나의 열에 연달아서 나타낼 수 있다. 2.RIGHT JOIN 앞의 예시는 너무 단순해서 약간 복잡하게 해봤다. 두 번째 줄의 DISTINCT의 의미는 컬럼(열)에 대한 중복되는 값을 없애주는 기능이다. 즉, 같은 내용은 한 번만 나타내게 한다. 한 사람이 글을 여러 번 썼을 경우가 있어 DISTINCT를 사용했다. DECODE( )랑 .. 더보기
FOREIGN KEY, INNER JOIN, OUTER JOIN 이번시간엔 외래키(FOREIGN KEY), INNER JOIN, OUTER JOIN 세가지를 알아보겠다. 다음과 같은게시판 형식의 테이블을 하나 더 준비해왔다. *NULL?컬럼의 'N'값은 필수로 입력해야 하는 값이다. 1.외래키FOREIGN KEY 외래키는 두개의 테이블을 연결하는 역할을 한다. test테이블의 midx컬럼과 testboard의 midx컬럼을 연결해보았다. 두 컬럼을 외래키로 정하게 되면 testboard테이블의 midx는 test테이블의 midx값들내에서만 정할 수 있다. testboard테이블을 보면 모두 1~10사이의 값으로 되어있는 것을 확인할 수 있다. 만일 범위 밖의 값으로 설정하게 되면 오류가 발생하게 된다. 어떤 사이트의 회원들만 글을 쓰게하고 싶을 경우 이 기능을 사용하.. 더보기
UNION 이번 시간엔 UNION만 알아보겠다. 서브쿼리와 비교해서 보면 되겠다. 서브쿼리에 대한 내용은 따로 글을 작성해놨으니 한번 보고 오면 좋다. 우선 서브쿼리는 쿼리문은 동시에 두 개를 작성하는 것이라고 했었다. (↓서브쿼리) 위의 쿼리문은 age를 대신할 쿼리문을 작성한 것이다. 즉, 쿼리문 안의 쿼리문이라고 볼 수 있다. UNION은 서브쿼리와 다르게 '쿼리 + 쿼리'의 형식이다. +부분에 UNION이 들어가면 된다. TEST테이블에서 나이가 가장 많은 사람의 나이와 가장 적은 사람의 나이를 출력하는 명령을 내려보겠다. 이제 UNION문을 서브쿼리와 함께 간단하게 응용해보겠다. 나이가 가장 많은 사람의 나이와 가장 적은 사람의 나이의 합을 구해보자. 일부러 별칭을 age라고 지어서 약간 헷갈리게 했지만,.. 더보기
DECODE, NVL, CASE 이번엔 다양한 구문을 소개하겠다. Java의 if문과 비슷한것이 있으니 편하게 보면 되겠다. 1. DECODE( ) 함수 if 대신에 DECODE로 생각하면 되고, 괄호안에 경우에 대한 값들을 작성하면 된다. DECODE( )함수는 경우를 어떻게 두냐에 따라 사용법이 달라진다. 첫번째 방법은 경우를 두 가지로 나누는 방법이다. 두번째 방법은 경우를 세 가지로 나타내는 방법이다. 2. NVL( ) 함수 NVL( ) 함수는 컬럼의 값이 NULL 인경우에 대해서만 사용하는 조건문이다. NULL인 값을 표현할 때 그대로 노출시키지 않고 다르게 표현한다고 보면 된다. 마찬가지로 두 가지 방법이 있다. DECODE( ) 함수와 굉장히 유사하지만, 약간 다르니 주의해서 보면 되겠다. 3. CASE 기능은 DECODE.. 더보기
서브쿼리, 시퀀스 * 본 글은 SQLgate편집기를 이용했습니다. 이번엔 서브쿼리와 시퀀스에 대해 알아보겠다. 꼭 알아두어야할 내용중 하나다. 1. 서브쿼리 서브쿼리는 메인쿼리 안에 들어가는 쿼리다. 쉽게말해 쿼리문을 한번에 두개를 작성한다고 생각하면 된다. 이를 이용해서 좀더 자세한 내용을 명령할 수 있다. 오늘도 등장하는 홍길이들로 보여주겠다. 테이블 이름은 TEST다. 이런 명령을 하고 싶다고 가정하자. 서브쿼리를 어떻게 작성하는지 그림으로 보자. 서브쿼리는 다양하게 이용되기 때문에 거듭 말하지만 알아둬야 한다. 2. 시퀀스 시퀀스는 자동으로 번호를 생성하는 기능이다. 은행의 번호표같은 것이다. 테이블의 행을 구분 짓기위해 사용되는 PRIMARY KEY. 즉, 기본키에 적용시킬 수가 있는데 기본키가 유일한 값을 가져.. 더보기
GROUP BY, 집계함수 이번엔 간단하게 두 가지정도만 알아보겠다. 전에 배웠던 WHERE 절, ORDER BY와 같이 쿼리문을 작성할 예정이다. 1. GROUP BY GROUP BY는 특정 컬럼들을 그룹화 하는 기능이다. WHERE절 처럼 뒤에 붙여서 작성하면 된다. 주의할점은 그룹화한 컬럼을 반드시 조회를 해야한다는 점이다. 2. 집계함수 크게 3가지로 SUM(), AVG(), COUNT()가 있다. SUM( ) : 합 AVG( ) : 평균 COUNT( ) : 갯수 단순하게 보여주는 것보다 전에 작성했왔던 명령어들을 조합해서 보여주겠다. 지역별 나이의 합을 내림차순으로 조회해라. 위와 같은 내용을 구현 하고 싶을때 어떤식으로 해야할지 생각 해보고 작성해보자. 필요한 명령어는 총 세개이므로 하나의 쿼리문에 동시에 사용하면 되겠.. 더보기
WHERE 절, ORDER BY *편집기는 SQLGate으로 진행합니다. 이전에 DML글에서 WHERE 절을 이용했었다. 그것에 대해 좀더 알아보고, 다른 것도 알아보자. 이번엔 DML구문인 SELCET 명령어에 살을 덧 붙이는 쿼리문을 작성해보겠다. SELCET 명령어로 단순하게 조회하는 것을 넘어, 조건을 걸어 특정 컬럼 값만 조회하자는 것이다. DML글을 아주 가볍게 읽고 오는것을 추천한다. 1. WHERE 절 WHERE 절을 사용하는 방법은 여러가지가 있지만 OR, AND, BETWEEN a AND b, IN함수, SUBSTR, LIKE 정도로 이미지와 함께 간략하게 소개하겠다. 1-1. OR, AND, BETWEEN a AND b 각각의 의미는 영어의 그것과 같기 때문에 어렵지 않게 보면 되겠다. 2번째 줄의 AND구문을 이용.. 더보기