티스토리 뷰
현재 테이블형태

서브쿼리를 사용하는 이유
SELECT AVG(사용금액) FROM card
평균을 구해서 그값을 기억했다가
SELECT * FROM card WHERE 사용금액 > 245000
위코드에서 출력값 245000원을 입력하여 사용금액 평균이상인 사람들을 출력하였다
SELECT * FROM card WHERE 사용금액 >
(SELECT AVG(사용금액) FROM card)
위 에선 서브 쿼리를 이용하여 두번의 절차 없이 한번에 원하는 값을 출력하는 명령문이다.
중요 꼭 기억하기!!
- 1. 문자나 숫자 들어갈 곳에 서브쿼리를 대신 넣을 수 있습니다.
- 2. 그래서 1개의 문자나 숫자를 뱉는 SELECT문만 서브쿼리로 넣을 수 있음
- 3. 여러개의 행을 뱉는 SELECT는 서브쿼리 역할을 할 수 없습니다
- 4. 서브쿼리 넣을 때 ( ) 소괄호
컬럼명자리에 서브쿼리를 넣어보자
SELECT 사용금액 / (select avg(사용금액) FROM card) FROM card;
사용금액에 평균 사용금액을 나누어 결과를 뽑아내는 경우
결과

SELECT 사용금액 , (select avg(사용금액) FROM card) FROM card;
사용금액과 평균사용 금액을 같이 컬럼자리에 넣은 경우
결과

위 두 결과를 보면 어느 값에 서브쿼리를 나눠 각각의 다른값이 출력가능하므로 유용해보인다
반면 밑은 모두 같은 값이 여러번 출력되어 비효율적으로 보인다.
IN( ) 안에 서브쿼리를 넣어보자
블랙리스트라는 테이블을 만들어 3명의 인물을 저장하였다.

여기서 블랙리스트들의 사용금액을 알고싶다면 고객명 in 뒤에 서브쿼리를 작성하여 서브쿼리 실행결과에 나오는 사람들의 이름에 포함되는 사람만 출력되게 된다.
SELECT 사용금액 FROM card
WHERE 고객명 IN ('Pristine', 'George', 'Amy')
SELECT 사용금액 FROM card
WHERE 고객명 IN (SELECT 이름 FROM blacklist)
고객등급이 패밀리인 사람들의 평균 연체횟수 보다 연체횟수가 높은 사람은 몇명일까?
SELECT count(*) FROM card WHERE 연체횟수 > (SELECT avg(연체횟수) FROM card WHERE 고객등급='패밀리');

위의 사진처럼 개인의 사용금액이 평균사용금액과 얼마나 차이가 나는지 출력해보기
SELECT
고객명,
사용금액,
사용금액 - (SELECT avg(사용금액) FROM card) AS diff
FROM card;
'DB > MYSQL' 카테고리의 다른 글
MYSQL INNER, LEFT, RIGHT JOIN (0) | 2023.05.13 |
---|---|
AUTO_INCREMENT (테이블생성시 자동 숫자증가) (0) | 2023.05.11 |
IF / CASE 정리 (0) | 2023.05.09 |
limit concat replac substr insert(출력결과에서 원하는 만큼 가져오기, 문자열 함수) (0) | 2023.05.09 |
MY SQL 숫자 조작함수 (0) | 2023.05.04 |