2022.12.16 Oracle 정리

SaGo_MunGcci·2022년 12월 16일
0

Oracle

목록 보기
2/12

기본키

핵심테이블인지 보는 방법 (+) 기호 있는것 제외하기 outerjoin인 경우

기본키로 조회하면 무조건 1건이 조회된다 --> 무결성의 원칙

키가 늘어날수록 나머지값들이 중복 각 테이블의 기본키 갯수만큼 걸면 1건
(A테이블 기본키 3개 B테이블 기본키 5개)
--> B테이블에서 A테이블을 이너조인하여 A테이블의 기본키값으로 걸면 중복된 값이 나온다.
즉 기본키가 많은 테이블의 결과가 출력된다.

1:N

A테이블에서 기본키로 조회했을때 1건 A테이블의 기본키로 조회했을때 B테이블의 조회결과 N이다.
이것을 주로 1:N관계라고 말한다.

예를들어 2:15이라면 해당 최종 결과는 30건이 조회된다.
조회 결과는 1 * N이 된다.

참고 쿼리


SELECT *
  FROM GCPJMGPAN
  WHERE patno IN (
  SELECT patno 
    FROM GMCRMPCHK
    )
    AND he_dt BETWEEN  '20221109' AND '20221130'
    
    11798275
    
  SELECT *
    FROM GCPJMGPAN
    WHERE PATNO ='11798275'
--      AND VIST_SN = '2'
--      AND HE_DT = '20221117'
--      AND HE_FORM_DIV_CD = 'G'
--      AND FORM_CD  ='PG20220101'
--      AND FORM_VER_CD = 'PG2022010101'
--      AND ITEM_ITEM_CD ='PG01010001'
   
   SELECT *
     FROM GMCRMPCHK
    WHERE PATNO ='11798275'
      AND VIST_SN = '2'
      AND HE_DT = '20221117'
      AND HE_FORM_DIV_CD = 'G'
    
      SELECT *
       FROM GCPJMGPAN GPAN
          , GMCRMPCHK PCHK
      WHERE PCHK.PATNO = '11798275'
      	AND PCHK.VIST_SN = '2'
      	AND PCHK.HE_DT = '20221117'
      	AND PCHK.HE_FORM_DIV_CD = 'G'
      	AND GPAN.FORM_CD  ='PG20220101'
       AND GPAN.FORM_VER_CD = 'PG2022010101'
       AND GPAN.ITEM_ITEM_CD ='PG01010001'
      	AND GPAN.VIST_SN = PCHK.VIST_SN
      	AND GPAN.HE_DT = PCHK.HE_DT
      	AND GPAN.HE_FORM_DIV_CD = PCHK.HE_FORM_DIV_CD 
        AND GPAN.patno = PCHK.PATNO 
        
        
        SELECT *
          FROM WPPIMINFO
          WHERE PATNO = '11798275'

WHERER절, IN, NULL, IS NULL,

EXSIST, NOT EXSIST

쿼리에 or은 절대 쓰지말기(조회속도 저하)
간단한 프로그램에서는 사용해도 되나 우리가 사용하는 것은 기본 몇만건 몇천만건을 조회해온다!!

SELECT * FROM GCPJMGPAN 
WHERE PATNO = '18438839'
  AND (HE_FORM_DIV_CD ='C' OR HE_FORM_DIV_CD ='S');

IN은 or과 동일하나 해당 IN안에 서브쿼리를 넣어서 or처럼 일일이 입력하지 않고 조회할 수 있고 조회속도도 빠르다 --> IN을 사용하자.

SELECT * 
FROM GMCRMPCHK 
WHERE PATNO IN ( 
               SELECT PATNO 
               FROM GCPJMGPAN
               )

IS NULL, IS NOT NULL
내가 조회하고 싶을때 해당컬럼이 NULL인것을 찾고 싶을때 IS NULL
내가 조회하고 싶을때 해당컬럼이 NOT NULL인것을 찾고 싶을때 IS NOT NULL


SELECT * 
FROM GCPJMGPAN 
WHERE patno IN (SELECT patno
               FROM GMCRMPCHK)
AND ITEM_RESULT_VAL IS NULL 

SELECT *
FROM GMCRMPCHK
WHERE HE_DT IN ('20221101','20221102','20221103','20221104','20221105')
AND JUDG_DT IS NOT NULL

EXIST와 NOT EXSIST
EXIST는 핵심테이블에도 있고 서브쿼리 테이블에도 있는 것을 조회해올때 사용 --> IN절과 동일

NOT EXSIST
EXIST는 핵심테이블에는 있지만 서브쿼리 테이블에 없는것을 조회해올때 사용
--> 핵심테이블에만 해당데이터가 검증할때 사용???
ex) 병원에 방문은 했지만 검사를 받지않은 경우, A,B검사를 받아야 되는데 A검사만 받은 사람을 조회하는 경우


 SELECT * 
FROM GCPJMGPAN A
WHERE 1=1
AND NOT EXISTS ( SELECT 'X'
                 FROM GMCRMPCHK B
                 WHERE A.PATNO = B.PATNO)
-- A에는 존재 하나 B에는 존재하지 않음 = NOT EXISTS
-- A에 존재하고 B에도 존재 = EXISTS = IN절

참고쿼리

SELECT * FROM GCPJMGPAN;
SELECT * FROM GCPJMGPAN;

SELECT * FROM GCPJMGPAN;


SELECT * FROM GCPJMGPAN 
WHERE PATNO = '18438839'
  AND (HE_FORM_DIV_CD ='C' OR HE_FORM_DIV_CD ='S');


 SELECT PATNO  
      , HE_FORM_DIV_CD
   FROM GCPJMGPAN 
  WHERE PATNO = '18438839'
    AND HE_FORM_DIV_CD ='C'
  UNION ALL
  SELECT '' AS PATNO
       , HE_FORM_DIV_CD
    FROM GZCDCITCD  
   WHERE HE_FORM_DIV_CD ='S';
 
  
 SELECT * 
   FROM GCPJMGPAN a
      , GMCRMPCHK b
   WHERE a.patno = b.PATNO 
     AND a.PATNO = '18438839'
 
 SELECT * 
                        FROM GMCRMPCHK
                        WHERE PATNO = '11488477'
 
                      SELECT * 
                        FROM GMCRMPCHK 
                       WHERE PATNO IN ( 
                                         SELECT PATNO 
                                           FROM GCPJMGPAN
                                        )
                         AND PATNO = '11488477'
                        
                      SELECT * 
                        FROM GCPJMGPAN 
                       WHERE PATNO IN ( 
                                         SELECT PATNO 
                                           FROM GMCRMPCHK
                                        )
                         AND PATNO = '18438839'
                         
 SELECT * 
   FROM GCPJMGPAN 
--   WHERE PATNO = '18438839'
   WHERE PATNO IN ( 
                     SELECT PATNO 
                        FROM GMCRMPCHK
   )
   
   
                       SELECT * 
                        FROM GCPJMGPAN 
                       WHERE patno IN (SELECT patno
                                        FROM GMCRMPCHK)
                       AND ITEM_RESULT_VAL IS NULL                          
                     
                       SELECT *
                        FROM GMCRMPCHK
                       WHERE HE_DT IN ('20221101','20221102','20221103','20221104','20221105')
                        AND JUDG_DT IS NOT NULL                            
                                                
                                                   
                                                   
                       SELECT * 
                        FROM GCPJMGPAN A
                       WHERE 1=1
                         AND NOT EXISTS ( SELECT 'X'
                                            FROM GMCRMPCHK B
                                           WHERE A.PATNO = B.PATNO)
                                           -- A에는 존재 하나 B에는 존재하지 않음 = NOT EXISTS
                                           -- A에 존재하고 B에도 존재 = EXISTS = IN절
                                           
                                           SELECT *
                                             FROM GMCRMPCHK
                                             WHERE patno= '18438839'


                      SELECT  PATNO  
                           , VIST_SN 
                           , HE_DT 
                           , HE_FORM_DIV_CD
                        FROM GMCRMPCHK A
                       WHERE 1=1
                         AND NOT EXISTS ( SELECT 'X'
                                            FROM  GCPJMGPAN  B
                                           WHERE A.PATNO = B.PATNO)
                         UNION ALL
                     SELECT   PATNO  
                           , VIST_SN 
                           , HE_DT 
                           , HE_FORM_DIV_CD
                        FROM GCPJMGPAN A
                       WHERE 1=1
                         AND NOT EXISTS ( SELECT 'X'
                                            FROM GMCRMPCHK B
                                           WHERE A.PATNO = B.PATNO)
                                           
                                        
                                           
                                           SELECT *
                                             FROM GCPJMGPAN
                                            WHERE patno = '15463115'
                                            
profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글