#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의 활용에는 특히나 더 익숙하지 않으니
익숙해지도록 하자.
'개발일지 > SQL' 카테고리의 다른 글
SQL 기초 19 뷰(view) (0) | 2022.08.25 |
---|---|
SQL 기초 18 JOIN (0) | 2022.08.25 |
SQL 기초16 데이터 갱신 update (0) | 2022.08.25 |
SQL 기초15 데이터 입력 기본 insert 와 응용 insert (0) | 2022.08.25 |
SQL 기초 14 데이터지우기 (필드값 지우기) delete, truncate (0) | 2022.08.25 |