코딩 개발/ORACLE

Oracle - SubQuery

호소세 2023. 5. 7. 11:38
728x90
반응형

서브쿼리를 배우기 전에 기본적인 명령어를 배우고 싶으시다면 하단 링크를 클릭해 주세요.

https://pabeba.tistory.com/138#DML%20%EB%AA%85%EB%A0%B9%EC%96%B4%20(Data%20Manipulation%20Language%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%A1%B0%EC%9E%91%EC%96%B4)-1 

 

ORACLE - 테이블 명령어(CREATE, DROP, SELECET ~ FROM, WHERE, ORDER BY)

DDL 명령어 (Data Definition Language 데이터 정의어) 데이터 정의어에는 CREATE, DROP, ALTER 가 있습니다. 1. CREATE Table 생성하는 명령어입니다. CREATE TABLE product( id NUMBER PRIMARY KEY, name VARCHAR2(100) NOT NULL, maker VA

pabeba.tistory.com

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

 

 

반응형