서브쿼리를 배우기 전에 기본적인 명령어를 배우고 싶으시다면 하단 링크를 클릭해 주세요.
SubQuery 란
서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미합니다.
서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고도 부릅니다.
서브쿼리는 반드시 괄호(())로 감싸져 있어야만 합니다.
MySQL에서 서브쿼리를 포함할 수 있는 외부쿼리는 SELECT, INSERT, UPDATE, DELETE, SET, DO 문이 있습니다.
이러한 서브쿼리는 또다시 다른 서브쿼리 안에 포함될 수 있습니다.
SubQuery 장점
1. 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 해 줍니다.
-> 따로따로 생각하여 만들고 하나로 붙여서 만들면 좋습니다.
2. 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공합니다.
-> 새로운 표를 만들 수 있기 때문에 좋습니다.
3. 서브쿼리는 복잡한 JOIN이나 UNION 보다 좀 더 읽기 편합니다.
예시를 보면서 서브쿼리문을 알아보아요.
예시
일단 테이블을 제작하고 진행해 볼게요.
CREATE TABLE item(
id NUMBER PRIMARY KEY,
name VARCHAR2(100) NOT NULL,
maker VARCHAR2(100) NOT NULL,
price NUMBER NOT NULL
)
CREATE SEQUENCE item_seq;
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'불닭볶음면','삼양',1500);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'진라면','오뚜기',1100);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'테라','하이트진로',1800);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'참이슬후레쉬','하이트진로',1300);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'열라면','오뚜기',1300);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'3분카레','오뚜기',1800);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'신라면','농심',1100);
COMMIT
예제 1
item 테이블 중에서 최고가의 item name과 price를 조회할 때 어떤 쿼리문을 사용해야 하는지 알아봅시다.
1. item 최고가를 확인하는 쿼리문
SELECT MAX(price) FROM item;
price의 최댓값을 찾는 명령어 MAX를 이용합니다. 1800 이 조회됩니다.
2. 1800 price의 item name 조회
SELECT name FROM item WHERE price=1800;
3. 두 문장 합치기
SELECT name FROM item WHERE price=(SELECT MAX(price) FROM item);
price = (1800)인 아이템을 조회해 올 것입니다. 이런 식으로 값이 하나인 테이블을 가져오게 되면 그것이 값이 되더라고요.
예제 2
이번에는 조금 난이도를 높여서 진행해 보겠습니다.
하이트 진로 maker item 중 가장 높은 price를 가진 item 조회
1. 하이트진로 item 중 가장 높은 price를 조회
SELECT MAX(price) FROM item WHERE maker='하이트진로';
2. 1800 price를 가진 하이트진로 maker의 아이템 조회
SELECT id,name,maker,price FROM item WHERE maker='하이트진로' AND price=1800;
3. 두 문장 합치기
1800 price에 1번 문장을 넣으면 됩니다.
SELECT id,name,maker,price FROM item
WHERE maker='하이트진로' AND price=(
SELECT MAX(price) FROM item WHERE maker='하이트진로'
)
소감
새로운 표를 만들면서 조건문에 해당하는 값을 넣을 수도 있고 아직 배우지는 않았지만 JOIN 문을 사용하여 새로운 표와 합체시켜 또 새로운 표를 만들어서 값을 조회할 수 있다고 알고 있습니다. 다음 시간에는 JOIN문을 배우지는 않을 거지만 언젠간 할 겁니다. 다음 시간에는 GROUP BY ~ HAVING에 대하여 알아보겠습니다.
출처
http://www.tcpschool.com/mysql/mysql_multipleTable_subquery
'코딩 개발 > ORACLE' 카테고리의 다른 글
ORACLE - IN, NOT IN 연산자 (feat. SEQUENCE) (3) | 2023.05.08 |
---|---|
ORACLE - GROUP BY HAVING (0) | 2023.05.08 |
ORACLE - 테이블 명령어(CREATE, DROP, SELECET ~ FROM, WHERE, ORDER BY) (0) | 2023.05.06 |
MACBOOK용 - ORACLE 연결(feat. AWS EC2) (0) | 2023.05.02 |
Java - Eclipse DB 연동 (ORACLE) Window 용 (0) | 2023.05.02 |