목록SQL (21)
K 개발자
인덱스 인덱스index, 색인란 자료를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조이다. 도서관에서 책을 찾을 때 서지 목록을 보고 책의 위치를 찾는 것처럼 인덱스도 같은 역할을 한다. 데이터베이스에서 인덱스란 원하는 데이터를 빨리 찾기 위해 투플의 키값에 대한 물리적 위치를 기록해 둔 자료 구조이다. 일반적인 RDBMS의 인덱스는 대부분 B-tree 구조로 되어 있다. 연습문제 -- Book 테이블의 bookname 열을 대상으로 인덱스 ix_Book을 생성하시오. CREATE INDEX ix_Book ON Book (bookname); -- Book 테이블의 publisher, price 열을 대상으로 인덱스 ix_Book2를 생성하시오. CREATE INDEX ix_Book2 ON Book (pu..
뷰 뷰view는 하나 이상의 테이블을 합하여 만든 가상의 테이블이다. 합한다는 말은 SELECT 문을 통해 얻은 최종 결과를 뜻하며, 뷰는 이러한 결과를 가상의 테이블로 정의하여 실제 테이블처럼 사용할 수 있도록 만든 데이터베이스 개체이다. 뷰의 장점은 다음과 같다. 편리성 : 여러 테이블에서 데이터를 가져와 하나의 테이블로 정의함으로써 질의 작성이 간단하게 된다. 또 미리 작성된 질의를 뷰로 정의해 두면 질의 재사용이 가능하다. 보안성 : 원본 테이블에서 보안이 필요한 속성을 제외하고 새로운 테이블을 정의하여 사용자에게 제공함으로써 데이터 보안성을 높인다. 논리적 데이터 독립성 : 뷰를 정의하여 응용 프로그램이 사용하게 하면 개념스키마에 정의된 테이블 구조가 변경되어도 응용 프로그램의 변경을 막아 주기..
인라인 뷰 - FROM 부속질의 인라인 뷰inline view는 FROM 절에서 사용되는 부속질의를 말한다. SQL 문의 FROM 절에는 테이블 이름이 위치하는데, 여기에 테이블 이름 대신 인라인 뷰 부속질의를 사용하면 보통의 테이블과 같은 형태로 사용할 수 있다. 부속질의 결과로 반환되는 데이터는 다중 행, 다중 열이어도 상관없다. 다만 가상의 테이블인 뷰 형태로 제공되기 때문에 상관 부속질의로 사용될 수는 없다. 연습문제 -- 고객번호가 2 이하인 고객의 판매액을 보이시오(고객이름과 고객별 판매액 출력). SELECT cs.name, SUM(od.saleprice) "total" FROM ( SELECT custid, name FROM Customer WHERE custid
스칼라 부속질의 - SELECT 부속질의 스칼라 부속질의scalar subquery는 SELECT 절에서 사용되는 부속질의로, 부속질의의 결과값을 단일 행, 단일 열의 스칼라값으로 반환한다. 만약 결과값이 다중 행이거나 다중 열이라면 DBMS는 그중 어떠한 행, 어떠한 열을 출력해야 하는지 알 수 없어 에러를 출력한다. 또 결과가 없는 경우에는 NULL 값을 출력한다. 스칼라 부속질의는 원칙적으로 스칼라값이 들어갈 수 있는 모든 곳에 사용 가능하며, 일반적으로 SELECT 문과 UPDATE SET 절에 사용된다. 주 질의와 부속질의와의 관계는 상관/비상관 모두 가능하다. 연습문제 -- 마당서점의 고객별 판매액을 보이시오(고객이름과 고객별 판매액 출력). SELECT ( SELECT name FROM Cu..
중첩질의 - WHERE 부속질의 중첩질의nested subquery는 WHERE 절에서 사용되는 부속질의를 말한다. WHERE 절은 보통 데이터를 선택하는 조건 혹은 술어predicate와 같이 사용된다. 그래서 중첩질의를 술어 부속질의predicate subquery라고도 부른다. 중첩질의는 주 질의에 사용된 자료 집합의 조건을 WHERE 절에 서술한다. 주 질의의 자료 집합에서 한 행씩 가져와 부속질의를 수행하며, 연산 결과에 따라 WHERE 절의 조건이 참인지 거짓인지 확인하여 참일 경우 주 질의의 해당 행을 출력한다. 중첩질의의 연산자는 다음과 같다. 술어 연산자 반환 행 반환 열 상관 비교 =, >, =, 단일 단일 가능 집합 IN, NOT IN 다중 다중 가능 한정 ALL, SOME(ANY) ..
ROWNUM ROWNUM은 오라클 내장 함수는 아니지만 자주 사용되는 문법이다. ROWNUM은 오라클 내부적으로 생성되는 가상 컬럼으로 SQL 조회 결과의 순번을 나타낸다. 자료를 일부분만 확인하여 처리할 때 유용하다. 연습문제 -- 고객목록에서 고객번호, 이름, 전화번호를 앞의 두 명만 보이시오. SELECT ROWNUM "순번", custid, name, phone FROM Customer WHERE ROWNUM
NULL 값에 대한 연산과 집계 함수 집계 함수를 사용할 때 NULL 값이 포함된 행에 대하여 다음과 같은 주의가 필요하다. 'NULL+숫자' 연산의 결과는 NULL이다. 집계 함수를 계산할 때 NULL이 포함된 행은 집계에서 빠진다. 집계 함수에 적용되는 행이 하나도 없으면, SUM, AVG 함수의 결과는 NULL이 되고, COUNT 함수의 결과는 0이다. NULL 값을 확인하는 방법 NULL 값을 찾을 때는 '=' 연산자가 아닌 'IS NULL'을 사용하고, NULL이 아닌 값을 찾을 때는 '' 연산자가 아닌 'IS NOT NULL'을 사용한다. NVL 함수 NVL 함수는 NULL 값을 다른 값으로 대치하여 연산하거나 다른 ..
날짜·시간 함수 데이터베이스에는 날짜를 저장하는 경우가 많다. 날짜는 단순히 문자열로 저장하여 관리할 수도 있지만 날짜형 데이터로 저장하여 관리하면 편리하다. 날짜를 더하거나 차이를 구하는 등의 연산을 손쉽게 처리할 수 있기 때문이다. 다음은 오라클에서 제공하는 주요 날짜 함수이다. 함수 설명 TO_DATE(char, datetime) 문자형(CHAR) 데이터를 DATE형으로 반환 TO_CHAR(date, datetime) DATE형 데이터를 문자열(VARCHAR2)로 반환 ADD_MONTHS(date, 숫자) 날짜에 지정한 달을 더해 DATE형으로 반환 LAST_DAY(date) 날짜에 달의 마지막 날을 DATE형으로 반환 SYSDATE DBMS 시스템상의 당일 날짜를 DATE형으로 반환하는 인자가 없..