MySQL

MySQL Subquery (1) : Select 문에 Subquery를 적용하자

우아개발자 2023. 11. 5.

MySQL 서브쿼리를 이용해서 가독성을 줄여보도록 하겠습니다. 우리가 왜 서브쿼리를 사용하는지 먼저 짚고 넘어가겠습니다. 우리가 서브쿼리를 주로 이용하는 이유는 코드의 간편함을 위해서라고도 하는데요. join on, join on 반복적으로 작성하는 것보다는, 쿼리를 이용해서 가져오게 되는 값을 정리하게 되면,  코드 구조화에 적합하다고 합니다.

subquery

서론 : 서브쿼리를 대체할 수 있는 명령어

"나는 join 을 잘 모르겠어"라고 하시는 분들은 아래의 글을 참고해 주세요.

MySQL 테이블 Table JOIN

 

MySQL 테이블 Table JOIN

MySQL 테이블 Left join을 해봅니다. 사실 데이터베이스를 작성하다 보면, 테이블끼리 연결 지어야 할 때, 혹은 어떠한 기준을 조건으로 두 테이블을 연결해, 결과를 출력할 필요가 생기죠. 이럴 때

154mvi.1lia.com

테이블 조인에 대한 내용은 위의 링크에 담겨있으니 참고하시길 바랍니다.

 

(1) 실습을 위한 테이블 표

 

실습예제를 위해 아래와 같이 테이블을 만들어줍니다. 여러분들도 한 번 함께 해보시죠. 롯데시네마를 모티브로 저는 라테시네마를 작성해 보겠습니다. 데이터베이스의 이름은 '라테시네마'입니다.

create database lattecinema;
use lattecinema;

create table ordes(
id int,
status varchar
);

create table menu(
id int,
name varchar,
price int
);

create table order detail(
id int,
menu_id int,
count int,
order_id

);

 

 

본론 :  서브쿼리를 사용하는 순서와 간단한 예제 Select문에 넣기

어떤 것이 서브쿼리이고 어떤 것이 메인쿼리인지 헷갈리시는 분들, 그리고 실행 순서는 어떻게 되는지 헷갈리시는 분들이 많을 텐데요. 서브쿼리의 경우에는 쉽게 판단하자고 하면, 괄 호로로 둘러싸인 것이 서브쿼리라고도 할 수 있는데요. 이러한 괄호를 감싸고 있는 것을 외부쿼리라고 할 수 있습니다. 그럼 위의 테이블들의 정보로 코드를 작성하겠습니다.

(1) 순서 1.  서브쿼리의 단일 값을 먼저 생성해 줍니다.

✨메뉴의 이름 및 가격과 함께 가장 비싼 메뉴의 가격 차이를 구하기라는 문제가 있다고 가정했을 때, 서브쿼리의 단일 값을 먼저 생성해 줍니다. 위의 밑줄 친 문제를 읽어본다면, 결국 '가장 비싼 메뉴의 가격 차이를' 구해야 하는데요. 그렇다면, 가장 가격이 나가는 메뉴를 MAX 함수를 이용해서 작성합니다.

select
	Max(price)
   
from
menu;

(2) 순서 2. 서브쿼리를 참고하여, 외부쿼리를 작성합니다.

가장 비싼 메뉴를 추출하는 것은 완료하였으니, 외부쿼리를 작성해 주는 데, 이때, 각각의 메뉴들의 이름과, 가격의 값을 추출해야 하니, 메뉴명과 가격을 불러오고, 그리고, 그 가격에서의 차액을 구해야 하니, (-)를 이용해서 코드를 작성해 줍니다.

Select
	name as 메뉴명,
    price as 가격,
    price (
    
    ) as '메뉴의 최대 가격과의 차이'
    
    from
    menu;

(3) 순서 3. 그리고 내부쿼리를 외부쿼리의 중괄호 안에 넣어줍니다.

Select
	name as 메뉴명,
    price as 가격,
    price (
    Select
    	select(price
    from
    	menu
    
    ) as '메뉴의 최대 가격과의 차이'
    
    from
    menu;

 

이와 반대로 from 문에서도 서브쿼리를 작성하는 방법이 있는데요. 서브쿼리를 작성하는 방법은 Select가 아닌, from 문으로 작성해 주면 됩니다.

결론 : Select문에 적용할 때의 내부쿼리

Select문에 적용할 때 내부쿼리는, 대부분 간단한 입력 값을 넣고 마무리가 되지만, 보통 조금은 복잡한 계산을 하고자 할 때는 from문을 자주 사용하기도 합니다. 또는, 특정 값의 평균을 구할 때 혹은 조건을 줄 때는 group by를 사용한다던지, 혹은 where문을 사용하는 경우도 있는데요. 이 부분은 다음 시간에 포스팅하도록 하겠습니다.

'MySQL' 카테고리의 다른 글

MySQL 테이블 Table JOIN  (0) 2023.11.05
MySQL의 제약조건 Primary key "야 중복 값 입력하지 마라고"  (0) 2023.11.03
MySQL 테이블 생성하기  (0) 2023.10.30

댓글