아래 두 테이블과 SQL에 대한 설명으로 가장 적절한 것은? (단, ORDERS 테이블의 컬럼에는 어떠한 제약조건도 정의되어 있지 않다)
보기
[PRODUCT]
| PROD_CD |
|---|
| P10 |
| P20 |
| P30 |
[ORDERS]
| CUST_ID | PROD_CD |
|---|---|
| C01 | P10 |
| C02 | P20 |
| C02 | P30 |
SELECT PROD_CD
FROM PRODUCT
WHERE PROD_CD = (SELECT PROD_CD
FROM ORDERS
WHERE CUST_ID = 'C02');
- 1= 연산자는 서브쿼리 결과 중 첫 번째 행과 비교되므로 PROD_CD 'P20' 1건이 조회된다.
- 2ORDERS.CUST_ID에 NOT NULL 제약조건을 추가하면 'C02'의 중복 입력이 차단되므로 이후 동일한 오류를 방지할 수 있다.
- 3서브쿼리가 2건(P20, P30)을 반환하여 실행 오류가 발생하며, 이를 원천적으로 방지하려면 ORDERS.CUST_ID 컬럼에 UNIQUE 제약조건이 필요하다.
- 4ORDERS.CUST_ID가 고객 테이블의 기본키를 참조하는 FOREIGN KEY로 선언되어 있다면 참조 무결성에 의해 서브쿼리는 항상 1건 이하만 반환한다.
꿈라CBT