가자미의 개발이야기
[데이터베이스] 부속질의 본문
부속질의 : 하나의 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);
'Computer Science > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 인덱스 (0) | 2021.02.23 |
---|---|
[데이터베이스] 뷰 (0) | 2021.02.23 |
[데이터베이스] MySQL의 my.ini 수정 권한이 없다고 나올 때 해결방법. (0) | 2021.02.23 |
[데이터베이스] SQL 내장함수 (0) | 2021.02.23 |
[데이터베이스] sql 기초 총정리! (0) | 2021.02.17 |