가자미의 개발이야기

[데이터베이스] 부속질의 본문

Computer Science/데이터베이스

[데이터베이스] 부속질의

가자미 2021. 2. 23. 15:51

부속질의 : 하나의 SQL 문 안에 다른 SQL 문이 중첩된 질의

 

1. 스칼라 부속질의 - SELECT 부속질의

-SELECT 절에서 이뤄지고, 단일 값을 반환

 

SELECT custid, (SELECT name
				FROM Customer cs
                WHERE cs.custid=od.custid) 'name', SUM(saleprice) 'total'
FROM orders od
GROUP BY custid;

*name 속성은 부속질의로 구현

 

ALTER TABLE Orders ADD bname VARCHAR(40);
UPDATE Orders
SET bname=(SELECT bookname
		   FROM Book
           where Book.bookid=Orders.bookid);
           
SELECT *
FROM Orders;

*bname 속성 추가 후 스칼라 부속 질의로 값 입력

 

2. 인라인 뷰- FROM 부속 질의

-FROM 절에 가상 테이블 뷰 형태로 질의.

SELECT		cs.name, SUM(od.saleprice) 'total'
FROM		(SELECT	custid, name
				 FROM		Customer
                 WHERE		custid<=2) cs,
                 Orders		od
WHERE		cs.custid=od.custid
GROUP BY	cs.name;

*FROM 절에서 가상의 뷰와 Orders 테이블을 사용.

 

3. 중첩질의 - WHERE 부속질의

-중첩질의 연산자

술어 연산자 반환 행 반환 열 상관
비교 =,<,>... 단일 단일 가능
집합 IN, NOT IN 다중 다중 가능
한정 ALL, SOME(ANY) 다중 단일 가능
존재 EXISTS, NOT EXISTS 다중 다중 필수

-비교 연산자

SELECT orderid, saleprice
FROM Orders
WHERE saleprice <=(SELECT AVG(saleprice)
				   FROM Orders);

-집합 연산자

SELECT SUM(saleprice) 'total'
FROM Orders
WHERE custid IN(SELECT custid
						 FROM Customer
                         WHERE address LIKE '%대한민국%');

-한정 연산자

*한정 연산자(ALL, SOME(ANY))는 비교 연산자와 함께 사용된다.

*한정 연산자는 비교 연산자와 부속질의 사이에 등장한다. (비교 연산자) (한정 연산자) (부속 질의)

*SOME 과 ANY는 같은 역할을 한다.

SELECT		orderid, saleprice
FROM		Orders
WHERE		saleprice>ALL(SELECT		saleprice
									 FROM			Orders
									WHERE			custid='3');

-존재 연산자

*반드시 부속질의에 주질의의 열 이름이 제공되어야 함.

SELECT SUM(saleprice) 'total'
FROM    Orders od
WHERE  EXISTS (SELECT *
                         FROM Customer cs
                         WHERE address LIKE '%대한민국%' AND cs.custid=od.custid);