데이터베이스

조인, 서브쿼리, 집합 연산 SQL 질의 문제(오라클)

스윙스윙 2021. 9. 9. 22:32

▣ 조인, 서브쿼리, 집합 연산 SQL 질의 문제(오라클)

1. 오라클 집합 연산자의 종류

집합 연산자는 4가지 종류가 있다.

- UNION: 두 집합을 더해서 결과를 출력. 중복 값 제거하고 정렬함

- UNION ALL: 두 집합을 더해서 결과를 출력. 중복 값 제거 안하고 정렬 안함

- INTERSECT: 두 집합의 교집합 결과를 출력. 정렬함.

- MINUS: 두 집합의 차집합 결과를 출력. 쿼리의 순서 중요함

 

2. 오라클 연산자 사용 조건

- 두 집합의 SELECT 절에 오는 칼럼의 개수가 동일해야 한다.

- 두 집합의 SELECT 절에 오는 칼럼의 데이터형이 동일해야 한다.

- 두 집합의 칼럼명은 달라도 상관없다.


 

2017년 57번

정답 : 4번

100, 101 동시에 만족하는 튜플이 없음

 

------------------------------------------------------------------
-- 2017년 정보시스템감리사 DB 57번

DROP TABLE ENROLL_57;
CREATE TABLE ENROLL_57
(
  COURSEID NUMBER  
, STUDENTID NUMBER
, TIME1 DATE
)
;

INSERT INTO ENROLL_57 VALUES (100, 1, '2021-09-09');
INSERT INTO ENROLL_57 VALUES (101, 1, '2021-09-09');
INSERT INTO ENROLL_57 VALUES (102, 1, '2021-09-09');
INSERT INTO ENROLL_57 VALUES (100, 2, '2021-09-09');
INSERT INTO ENROLL_57 VALUES (101, 2, '2021-09-09');
INSERT INTO ENROLL_57 VALUES (100, 3, '2021-09-09');

SELECT * FROM ENROLL_57;

 



-- 보기 1번
SELECT E1.STUDENTID
FROM ENROLL_57 E1, ENROLL_57 E2
WHERE E1.STUDENTID = E2.STUDENTID AND
E1.COURSEID = 100 AND E2.COURSEID = 101;

 


-- 보기 2번
SELECT E.STUDENTID
FROM ENROLL_57 E
WHERE E.COURSEID = 100
INTERSECT
SELECT E.STUDENTID
FROM ENROLL_57 E
WHERE E.COURSEID = 101;

 


-- 보기 3번
SELECT E.STUDENTID
FROM ENROLL_57 E
WHERE E.COURSEID = 100 AND 
STUDENTID IN (SELECT STUDENTID
FROM ENROLL_57 WHERE COURSEID = 101);

 


-- 보기 4번
SELECT E.STUDENTID
FROM ENROLL_57 E
WHERE E.COURSEID = 100 AND E.COURSEID = 101;

 

릴레이션의 구조 상 한번의 탐색으로 단일 튜플에서 강좌번호가 '100'이면서 동시에 '101'인 학번은 가져올 수 없음