'DATABASE'에 해당되는 글 38건

  1. 2010.09.09 제약조건 확인 스크립트
  2. 2010.09.09 외래키 지정 스크립트
  3. 2010.09.09 기본키 제약 조건 삭제
  4. 2010.08.30 RANK와 DENSE_RANK
  5. 2010.08.30 HIERACHICAL SELECT
  6. 2010.08.30 INLINE VIEW
  7. 2010.08.30 NOT IN
  8. 2010.08.30 ROWNUM
  9. 2010.08.30 서브쿼리(SUB QUERY)
  10. 2010.08.25 조인(JOIN)
2010.09.09 00:31
SELECT TABLE_NAME,CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('EMP10','DEPT10');

Posted by 박쥐소년
2010.09.09 00:28
CRETE TABLE emp10
(
  empno Number(4),
  ename VARCHAR2(15),
  deptno NUMBER(4)
  CONSTRAINT emp10_empno_pk PRIMARY KEY(emp_no);
  CONSTRAINT emp10_deptno_fk_foreign KEY(deptno) REFERENCES dept10(deptno));
Posted by 박쥐소년
2010.09.09 00:24

모든 테이블에는 기본키가 하나만 존재 합니다. 위 예에서 삭제하고 하는 제약 조건인 dept10_deptno_pk는 부서 테이블의 기본 키 제약 조건이 므로 다음과 같이 쿼리문을 작성 할 수있으나

ALTER TABLE dept10 Drop PRIMARY KEY;


기본키 제약 조건이 삭제 되지 않고 에러가 나는 이유는 emp10 테이블의 외래키인 deptno가 dept10 테이블의 기본 ㅣ인 deptno를 참조하고 있으므로 참조 무결성에 위배되기 때문입니다.

CASCADE 옵션을 지정하면 deptno를 참조하고 있는 외래 키 제약 조건도 연속적으로 삭제 되므로 기본키 제약 조건을 삭제 할 수 있게 됩니다.

ALTER TABLE dept10 DROP PRIMARY KEY CASCADE;

Posted by 박쥐소년
2010.08.30 22:56

SELECT  EMP_ID,SALARY,
DENSE_RANK() OVER( ORDER BY SALARY DESC) AS C1,
RANK() OVER(ORDER BY SALARY DESC) AS C2,
RANK() OVER(ORDER BY SALARY) AS C3
FROM TEMP;
7등이 두 명 나오면 다음 등수는 RANK의 경우 9등이 되며, DENSE_RANK의 경우 8등이 된다.
함수 뒤에 붙는 OVER의 의미는 해당 함수가 QUERY의 RESULTSET을 이용하여 동작하는 함수라는 표시이다.
Posted by 박쥐소년
2010.08.30 22:41

CONNECT BY...

START WITH 형식은 자료의 구조가 계층적으로 이루어진 경우 상위자료에서 부터 하위자료로의 자료전개 및 하위 자료에서 상위자료로의 역 전개를 위하여 사용되는 SELECT 형식이다.
Posted by 박쥐소년
2010.08.30 22:37

INLINE VIEW는 VIEW를 이용하는데, CREATE를 시키지 않고 바로 SQL안에 기술하여 사용하는 방식이다.


예)

SELECT NO,EMP_ID,EMP_NAME
FROM (SELECT ROWNUM NO,EMP_ID,EMP_NAME
FROM TEMP
WHERE EMP_ID > 0
)
WHERE NO BETWEEN 5 AND 10
Posted by 박쥐소년
2010.08.30 22:34

SELECT EMP_ID,EMP_NAME,HOBBY
FROM TEMP
WHERE HOBBY IN( NULL,'등산');


NOT IN 연산자에 NULL이 포함되면 어떠한 경우 일지라도 한건도 DATA를 검색하지 못한다.
Posted by 박쥐소년
2010.08.30 22:28

ROWNUM은 WHERE(WHERE절이 없으면 FROM)절에 의해 추출된 DATA SET에 ROW 단위로 붙는 순번이다.

자료의 순서를 다른 목적으로 이용하고자 할때 유용하게 쓰이는 정보이기도 하다.

WHERE 절에 ROWNUM을 조건으로 줄때는 항상 다른 조건을 모두 만족시킨 결과에 대해 조건이 반영된다.

즉 ROWNUM이란 WHERE까지를 만족시킨 자료에 붙는 순번이라고 할 수 있다.

이러한 이유로 ORDER BY가 추가되면 ROWNUM까지의 하나의 RECODE내의 COLUMN으로 인식되어 정렬이 일어난다.


ROWNUM과 관련하여 주어지는 조건이 =, > 또는 >=로 주어지면,원하는 결과가 나오지 않는다는 것을 확인...

Posted by 박쥐소년
2010.08.30 22:24

서브쿼리는 SELECT 한 결과를 조건 비교에 사용하거나 UPDATE,INSERT에 사용 할 때 사용되는 Query를 이르는 말이다. 조건 비교에 SELECT 한 결과를 사용 할 수 있다는 말은 SELECT,DELETE,UPDATE시의 WHERE절에 사용될 수 있다는 의미 이므로 DML 어디서든 사용될 수 있다는 의미가 되기도 한다.

서브쿼리는 InnerQuery와 OuterQuery로 구성되어 있다.

Query의 조건에서 컬럼과 비교되는 상대 값으로 또 다른 쿼리의 결과가 사용되는 경우를 예로 들어 설명하면, 또 다른 쿼리를 InnerQuery라 하고 InnerQuery에서 나온 결과를 비교조건으로 사용하는 쿼리를 OuterQuery라 칭한다.

서브쿼리를 종류별로 나눠보면 SingleRow,Multi Row,Muti Column,Cor-Related로 크게 나뉘며, 이 들 가각이 다시 중복되어 사용 될수 있으므로 Single Row Multi Column,Multi Row Multi Column,Single Row Correlated, Multi Row Correlatged등으로 세분화 될 수 있다.

Single Row,Multi Row,Multi Column, Correlated의 4가지만 이해 하면 이들의 중복 사용은 단지 경우의 수 확장에 해당 한다.
Posted by 박쥐소년
2010.08.25 22:37
JOIN은 두 개 이상의 테이블이나 DATASET을 서로 연결하여 데이터를 검색 하고자 할 때 사용하는 방법이다.
FROM 절에 조인할 테이블들을 기술하고, 조건절에서 테이블간의 연결이 이루어질 조건들을 기술한다.
이 것은 RDB를 사용하려면 피해 갈수 없는 부분이다. SQL TUNNING의 많은 부분이 JOIN의 사용과 관련 있다는 걸로 그 중요성을
대신 설명 할 수 잇을 것이다.

조인을 종류별로 알아 보면 CARTESIAN PRODUCT ,EQUI JOIN, NON-EQUI JOIN, OUTER JOIN, SELF JOIN 등으로 나뉜다.


CARTESIAN PRODUCT
- 조인은 조인인데 조건 절에 조인을 위한 조건이 기술 되지 않는 경우를 일컬어 CARTE-SIAN PRODUCT라고 칭한다.
조인의 조건을 기술하지 않게 되면 테이블 단위로 나올수 있는 RECODE 수의 곱으로 결과가 생성된다.

대개 깜빡하고 조인 조건을 주지 않는 경우가 있는데 그러면 ORACLE이 무수한 RECORE를 DISPLAY시키면서 제대로 하라는 시위 아닌 시위 화면을 화면에 보여 줄 것이다.


SELECT NO,A.EMP_ID,A.EMP_NAME,A.SALARY
FROM TEMP A,
          MOD_TEST B
WHERE B.NO <= 2
AND A.LEV = '과장'


EQUI JOIN
 - 가장 많이 사용하는 조인이 바로 EQUI JOIN이다. 조건절에 기술된 조인조건을 EQUAL 연산자로 연결하는 경우가 여기에 해당한다.

SELECT A.EMP_ID,A.EMP_NAME,A.DEPT_CODE,B.DEPT_NAME
FROM TEMP A, TDEPT B
WHERE B.DEPT_CODE = A.DEPT_CODE;

NON EQUI JOIN
 - NON EQUI JOIN은 조건 절에서 조인 조건이 '='이 아닌 다른 연산기호로 주어지는 경우이다.
   테이블의 어떤 컬럼도 JOIN 할 테이블의 COLUMN에 일치 하지 않을 때 사용하고 조인조건은 동등(=) 이외의 연산자를 갖는다
(BETWEEN AND , IS NULL, IS NOT NULL, IN , NOT IN)

SELECT B.LEV  직급,
A.EMP_ID 사번,
A.EMP_NAME 성명,
A.BIRTH_DATE 나이,
A.LEV 현재직급
FROM  TEMP A, EMP_LEVEL B
WHERE .BIRTH_DATE BETWEEN ADD_MONTHS(SYSDATE,-1*TO_AGE*12)
AND ADD_MONTHS(SYSDATE,-1*FROM_AGE*12)
AND B.LEV= '과장';


OUTER JOIN
- 두개 이상의 테이블 조인시 한 쪽 테이블의 행에 대해 다른 쪽 테이블에 일치하는 행이 없더라도 다른 쪽 테이블의 행을 NULL로 하여 행을 RETURN 하는 것이 OUNTER JOIN이다.

조인을 했는데 한쪽은 값이 있고 다른 쪽에는 값이 없으면 값이 있는 쪽을 기준으로 값을 보겠단 이야기다. 하지만 값이 있는 한 쪽은 하나이어야 한다.

이것은 A,B 두개 테이블이 A면 A,B면 B 중 하나만이 기준 테이블의 될 수 있다는 의미 이다.
문법을 살펴 보면 아래 와 같다.

SELECT COLUMN1,COLUMN2,...
FROM TABLE1,TABLE2,....
WHERE TABLE1.COLUMN = TABLE2.COLUMN(+)

OUTER JOIN 연산자(+)를 지정한 테이블에 대해서는 일시적으로 특별한  NULL 열이 작성되고 통상의 JOIN에서는 리턴되지 않는 다른 쪽 테이블의 행 모두와 JOIN이 일어 난다.

JOINING TABLE ITSELF
- 대체로 JOIN이라고 하면 어떤 테이블과 또 다른 테이블간을 특정 COLUMN으로 연결하는 경우를 의미한다.
 이번 JOIN은 테이블간의  JOIN은 맞는데 다른 테이블간의  JOIN이 아니고 같은 테이블을 마치 다른 테이블처럼 인식시켜 JOIN을 하는 것이다.
그래서 자신의 JOIN에서는 테이블에 반드시 ALIAS(별명)을 사용한다.


 

Posted by 박쥐소년