반응형
하위 쿼리의 이해
FROM절의 하위 쿼리
1. 조건에 맞는 대상자 선정 후 요약할 때
이 방법은 조건에 맞는 대상자를 선정한 후 데이터를 요약할 때 많이 사용된다
=> 테이블 별칭을 주지 않으면 에러가 발생하기 때문에 하위 쿼리를 작성한 후 테이블 별칭을 꼭 주어야 한다
SELECT 열 이름1, 열 이름2
FROM (SELECT *
FROM 테이블명
WHERE 조건절) (AS) 별칭
WHERE 조건절;
2. 테이블 조인을 할 때
테이블 조인을 할 때 필요한 정보만 조인할 수 있도록 고안된 방법이다
SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블명1 (AS) 별칭1 LEFT OUTER JOIN
(SELECT 열 이름1, 열 이름2
FROM 테이블명 2
WHERE 조건절) (AS) 별칭2
ON 별칭1.KEY=별칭2.KEY;
1. CARD_ACCT 테이블과 CUST_PARTY 테이블을 이용하여 현재 살아있는 신용카드 보유 고객과 미보유 고객의 수를 나타내려면?
SELECT CASE WHEN TMP2.SSN IS NOT NULL THEN 'O' ELSE 'X' END AS CC_HOLDER,
SUM(CASE WHEN TMP2.SSN IS NOT NULL THEN 1 ELSE 0 END) AS SNT
FROM CUST_PARTY TMP1
LEFT OUTER JOIN (SELECT DISTINCT SSN
FROM CARD_ACCT
WHERE CLOSE_DT IS NULL
AND CC_GRADE IN ('1','2')) TMP2
ON TMP1.SSN = TMP2.SSN
GROUP BY 1;
1. 데이터 분석 시 키값이 되는 열들은 중복 없이 나열하고, 좀 더 자세히 분석하려는 대상은 옆으로 붙이는 것이 매우 중요하다
2. 중복을 제거한 형태의 테이블을 만든 후 조인해야 한다
=> 중복을 제거하지 않고 테이블을 조인하면 오류가 발생할 확률이 높아짐
WHERE 조건절의 하위 쿼리
1. IN을 사용한 WHERE 조건절의 하위 쿼리
열 이름 뒤에 IN을 사용하여 필요한 데이터만 가져올 수 있는 방법이다
=> 단일 결과값일 때는 '='를 사용할 수도 있지만 IN 연산자가 포괄적 기능을 하기 때문에 열 이름 다음에 IN을 사용한다고 외워두면 편함
SELECT 열 이름1, 열 이름2
FROM 테이블명1
WHERE 열 이름 IN (SELECT 열 이름 FROM 테이블명2 WHERE 조건절);
1. CARD_ACCT 테이블과 CUST_PARTY 테이블을 이용하여 현재 살아있는 신용카드 보유 고객의 주민등록번호, 이름, 아이디, 자택번호 및 휴대폰번호를 나타내려면?
SELECT *
FROM CUST_PARTY
WHERE SSN IN (SELECT DISTINCT SSN
FROM CARD_ACCT
WHERE CLOSE_DT IS NULL
AND CC_GRADE IN('1', '2'));
단일 행에서 하위 쿼리는 IN 대신 '='를 사용할 수 있다
=> WHERE SSN = (SELECT DISTINCT SSN FROM CARD_ACCT WHERE SSN IN ('31414', '12362'));
과 같은 복수 행에서는 작동하지 않기 때문에 오류가 발생한다
반응형
'Database > SQL' 카테고리의 다른 글
데이터 및 테이블 조작 (0) | 2024.02.29 |
---|---|
테이블 합치기 (1) | 2024.02.29 |
데이터의 그룹화, 필터링 (1) | 2024.02.27 |
SQL 함수 활용하기 (0) | 2024.02.26 |
SQL 기본 함수 배우기 (2) | 2024.02.26 |