본문 바로가기
개발일지/SQL

SQL 기초 17 서브쿼리

by 다니엘의 개발 이야기 2022. 8. 25.
320x100

#1 서브쿼리

## *매우중요

 

예시문

 

메인쿼리

select * from tbl_cake where price >= 

 

서브쿼리

(select avg(price) from tbl_cake;

 

메인과 서브쿼리를 합친 형태

 

예시1

select * from tbl_cake where price >= (select avg(price) from tbl_cake;

 

예시2

select * from tbl_novel where price > (select avg(price) from tbl_novel);

 

예시3

SELECT code, MIN(arrival) FROM tbl_stock GROUP BY code

HAVING MIN (arrival) < (SELECT AVG(shipment) FROM tbl_stock);

 

예시4

select team, min(point2) as lowest from tbl_results group by team

having min(arrival) < (select avg(shipment) from tbl_results);

 

예시5

SELECT MAX(point_avg) AS max_avg

    -> FROM (SELECT AVG (point1 + point2) AS point_avg

    -> FROM tbl_results GROUP BY team) AS p_avg;

 

예시5에 대해서 주석을 해보자면

#1 point_avg라는 컬럼의 최대값을 리턴해줘라.

#2 그리고 그 컬럼의 이름을 출력이 될때는 max_avg라고 표기해준다.

# * max_avg라는 이름으로 써줄때 굳이 AS를 써줄 필요도 없고, 써준다 하더라도 대문자로 써줄 필요는 없다.

 

#3 첫째줄에서 선택한 값을 어디서 가져오냐면

우선은 테이블이 아니라 어떤 테이블에 들어있는 컬럼들인 point1과 point2를 더해주고, 그것들의 평균을 내줘봐

#4 그리고 이게 출력될때는 point_avg라고 컬럼명을 보여주고

 

#5 바로 전 줄에서 point1과 point2컬럼이 들어있는 tbl_results라는 테이블의 값을 가져와줘

#6 그리고  컬럼중에서 team이라는게 있을텐데 그것을 기준으로 가져와주면되

#7 그리고 가져올때 해당 컬럼출력본은 p_avg라고 불러줘

 

*예시5의 최종 출력결과는

max_avg라는 이름의 컬럼으로

301.500이라는 결과값이 출력된다.


#2 서브쿼리 응용

 

 

예시1

INSERT INTO tbl_advance SELECT * FROM tbl_results WHERE point1 + point2 > (SELECT AVG (point1 + point2) FROM tbl_results);


#3 

 

서브쿼리는 결국 기본의 합과 같은 느낌이다.

GROUP BY와 HAVING의 활용에는 특히나 더 익숙하지 않으니

익숙해지도록 하자.

300x250