▣ 조인, 서브쿼리, 집합 연산 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'인 학번은 가져올 수 없음
'데이터베이스' 카테고리의 다른 글
오라클 SQL_ ANY, SOME, ALL, NOT EXISTS, NOT IN 연산, 부양가족, 사원, 평균 봉급, (0) | 2021.09.10 |
---|---|
오라클 COUNT, 널(NULL), 공백 SQL 질의 (0) | 2021.09.09 |
SQL 인젝션(Injection) 보안 상의 허점 (0) | 2021.09.09 |
관계 데이터 모델의 키(Key) 후보키, 수퍼키, 기본키, 대체키, 외래키 (0) | 2021.09.09 |
뷰(VIEW) 갱신 제약사항_함수가 사용된 산술식, 집계함수, 집합연산, DISTINCT, GROUP BY, HAVING, 조인 등 / 뷰 장점, 단점, WITH CHECK OPTION (0) | 2021.09.03 |