핵심테이블인지 보는 방법 (+) 기호 있는것 제외하기 outerjoin인 경우
기본키로 조회하면 무조건 1건이 조회된다 --> 무결성의 원칙
키가 늘어날수록 나머지값들이 중복 각 테이블의 기본키 갯수만큼 걸면 1건
(A테이블 기본키 3개 B테이블 기본키 5개)
--> B테이블에서 A테이블을 이너조인하여 A테이블의 기본키값으로 걸면 중복된 값이 나온다.
즉 기본키가 많은 테이블의 결과가 출력된다.
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'
쿼리에 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'