*아래 연습문제는 연습문제를 위한 견본데이터베이스가 있어야 실행 가능
★연습문제1
1. 주문처리(EC_Order) 테이블과 상품관리(EC_Product) 테이블을 이용하여, 'jupark' 회원이 결제한 [주문자 ID, 상품코드, 상품명, 주문 수량, 주문 금액]을 주문자 ID순으로 출력하시오. (등가조인과 내부조인 방법)
①등가조인
SELECT ORDER_ID,P.PRODUCT_CODE, PRODUCT_NAME,ORDER_QTY,CMONEY "주문금액" FROM EC_Order P, EC_Product S WHERE P.PRODUCT_CODE=S.PRODUCT_CODE AND ORDER_ID='jupark' ORDER BY 1;
②내부조인(INNER JOIN~USING 또는 INNER JOIN~ON 키워드)
SELECT ORDER_ID,PRODUCT_CODE, PRODUCT_NAME,ORDER_QTY,CMONEY "주문금액" FROM EC_Order INNER JOIN EC_Product USING(PRODUCT_CODE) WHERE ORDER_ID='jupark' ORDER BY 1;
2. 주문처리(EC_Order) 테이블과 회원관리(EC_Member) 테이블, 상품관리(EC_Product) 테이블을 이용하여 결제한 [회원명, 전화번호, 주소, 배달상품, 배달수량]을 회원명순으로 출력하시오. (등가조인과 내부조인 방법)
①등가조인
COLUMN 배달상품 FORMAT A14 SELECT NAME, TELEPHONE, ADDRESS, PRODUCT_NAME "배달상품", ORDER_QTY "수량" FROM EC_Order P, EC_Member S, EC_Product Y WHERE P.ORDER_ID=S.USERID AND P.PRODUCT_CODE=Y.PRODUCT_CODE AND GUBUN ='결제' ORDER BY 1;
②내부조인(INNER JOIN~USING 또는 INNER JOIN~ON 키워드)
SELECT NAME, TELEPHONE, ADDRESS, PRODUCT_NAME "배달상품", ORDER_QTY "수량" FROM EC_Order P INNER JOIN EC_Member S ON(P.ORDER_ID=S.USERID) INNER JOIN EC_Product Y ON(P.PRODUCT_CODE=Y.PRODUCT_CODE) WHERE GUBUN ='결제' ORDER BY 1;
3. 상품관리(EC_Product) 테이블과 주문처리(EC_Order) 테이블을 이용하여, 모든 상품을 출력하되 주문 상품의 주문금액(주문 수량 x 단가)을 계산하여 [상품명, 주문 수량, 단가, 주문자 ID, 주문금액]을 주문자ID순으로 2가지 방법에 의하여 출력하시오.
① WHERE절을 이용한 좌 외부조인
SELECT PRODUCT_NAME "주문상품",ORDER_QTY "수량", TO_CHAR(UNIT_PRICE,'L99,999,999') "단가", ORDER_ID, TO_CHAR(ORDER_QTY*UNIT_PRICE,'L99,999,999') "주문금액" FROM EC_PRODUCT P, EC_ORDER C WHERE P.Product_CODE=C.PRODUCT_CODE(+) ORDER BY 4;
② LEFT OUTER JOIN 키워드를 이용한 방법
SELECT PRODUCT_NAME "주문상품",ORDER_QTY "수량", TO_CHAR(UNIT_PRICE,'L99,999,999') "단가", ORDER_ID, TO_CHAR(ORDER_QTY*UNIT_PRICE,'L99,999,999') "주문금액" FROM EC_Product LEFT OUTER JOIN EC_Order USING(Product_CODE) ORDER BY 4;
4. 상품관리(EC_Product) 테이블과 주문처리(EC_Order) 테이블을 이용하여 한 번도 판매되지 않은 상품의 목록 [상품코드, 상품명, 단가, 재고수량]을 상품코드순으로 출력하시오. (외부조인 응용)
SELECT PRODUCT_CODE,PRODUCT_NAME,UNIT_PRICE,LEFT_QTY FROM EC_Product WHERE PRODUCT_CODE NOT IN (SELECT PRODUCT_CODE FROM EC_Order) ORDER BY 1;
5. 회원관리(EC_Member) 테이블과 주문처리(EC_Order) 테이블을 참고하여 한 번 도 거래하지 않은 회원의 [회원ID, 회원명, 가입일자]을 출력하시오.
SELECT USERID, NAME, TIMESTAMP FROM EC_Member WHERE USERID NOT IN (SELECT ORDER_ID FROM EC_Order) ORDER BY 1;
★연습문제2
1. 회원(EC_Member) 테이블과 주문처리(EC_Order) 테이블을 이용하여 한번 이상 거래한 회원의 [회원명, 주민등록번호, 상품명, 주문수량, 주문금액]을 회원명순으로 출력하시오. (내부조인)
SELECT Name, Regist_No, O.Product_Code, Order_Qty, Cmoney FROM EC_Member M INNER JOIN EC_Order O ON (M.UserID = O.Order_ID) ORDER BY 1;
2. 회원관리(EC_Member) 테이블과 주문처리(EC_Order) 테이블을 이용하여 한번도 주문하지 않은 회원의 [회원명, 주민등록번호, 전화번호]를 출력하시오.
SELECT Name, Regist_No, Telephone FROM EC_Member M LEFT OUTER JOIN EC_Order O ON (M.UserID = O.Order_ID) WHERE O.Order_ID is NULL ORDER BY 1;
3. 주문처리(EC_Order) 테이블, 회원관리(EC_Member) 테이블, 상품관리(EC_Product) 테이블을 이용하여 거주지가 '서울'인 회원 중에서 한번 이상 주문한 회원의 [회원명, 주민번호, 상품명, 주문수량, 단가, 거주지]를 회원명순으로 출력하시오. (내부 조인)
SELECT Name, Regist_No, Product_Name, Order_Qty, Unit_Price, SUBSTR(Address, 1,2) "거주지" FROM EC_Member M INNER JOIN EC_Order O ON (M.UserID=O.Order_ID) INNER JOIN EC_Product P ON (O.Product_Code = P.Product_Code) WHERE Address LIKE '서울%' ORDER BY 1;
4. 수강임시(T_SG_Scores) 테이블, 과목임시(T_Course) 테이블, 학생(Student) 테이블을 이용하여 'C1801' 학번의 수강신청 과목을 출력하시오. (등가조인)
SELECT Dept_ID, Year, TS.Student_ID, Name, TS. Course_ID, Title, C_Number FROM T_SG_Scores TS, Student S, T_Course TC WHERE TS.Student_ID = S.Student_ID AND TS.Course_ID = TC. Course_ID AND TS. Student_ID = 'C1801' ORDER BY 5;
5. 수강임시(T_SG_Scores) 테이블, 과목임시(T_Course) 테이블, 학생(Student) 테이블을 이용하여 'C1801' 학번의 성적을 내부조인(inner join) 방식으로 출력하시오.
SELECT Dept_ID, Year, Student_ID, Name, Course_ID, Title, C_Number, Grade FROM T_SG_Scores INNER JOIN Student USING (Student_ID) INNER JOIN T_Course USING (Course_ID) WHERE Student_ID = 'C1801' ORDER BY 5;
6. 수강임시(T_SG_Scores) 테이블과 과목임시(T_Course) 테이블을 이용하여 'C1801' 학번의 등급에 대한 평점, 과목별 평점을 출력하시오. 단, 평점은 등급이 'A+'이면 4.5, 'A '이면 4.0, 'B+'이면 3.5, 'B '이면 3.0, 'C+'이면 2.5, 'C '이면 2.0, 'D+'이면 1.5, 'D '이면 1.0, 'F '이면 0.0이며, 과목별 평점은 "등급에 대한 평점 x 학점수"로 계산한다.
SELECT Student_ID, Course_ID, Title, C_Number "학점", Grade, CASE Grade WHEN 'A+' THEN 4.5 WHEN 'A' THEN 4.0 WHEN 'B+' THEN 3.5 WHEN 'B' THEN 3.0 WHEN 'C+' THEN 2.5 WHEN 'C' THEN 2.0 WHEN 'D+' THEN 1.5 WHEN 'D' THEN 1.0 ELSE 0.0 END "등급평점", CASE Grade WHEN 'A+' THEN 4.5 WHEN 'A' THEN 4.0 WHEN 'B+' THEN 3.5 WHEN 'B' THEN 3.0 WHEN 'C+' THEN 2.5 WHEN 'C' THEN 2.0 WHEN 'D+' THEN 1.5 WHEN 'D' THEN 1.0 ELSE 0.0 END * C_Number "과목평점" FROM T_SG_Scores INNER JOIN Student USING (Student_ID) INNER JOIN T_Course USING (Course_ID) WHERE Student_ID = 'C1802' ORDER BY Course_ID;
7. 수강임시(T_SG_Scores) 테이블에서 학번별 취득 과목수, 취득 점수의 합계와 평균을 계산하여, [학과코드, 학년, 학번, 성명, 과목수, 총점, 평균]을 총점 내림차순으로 출력하시오. 단, 평균은 소숫점 반올림하여 둘째자리까지 출력한다.
SELECT Dept_ID, Year, Student_ID, Name, Count (1) "과목수", SUM(Score) "총점", TO_CHAR(ROUND (AVG(Score), 2), '999.99') "평균" FROM T_SG_Scores SG INNER JOIN Student S USING (Student_ID) WHERE Score IS NOT NULL GROUP BY Dept_ID, Year, Student_ID, Name Order BY 3 DESC;
8. 학과(Department) 테이블과 교수(Professor) 테이블을 이용하여 직책명(Duty)에 대한 계층적 구조("총장->학과장->교수"순)의 학과별 직위 명단을 출력하시오.
SELECT Dept_Name "소속", decode (Duty,'총장','' ,'학과장',' L______' , NULL, ' L______') || Duty || ' '|| Name || ' ' || Position "직책 및 성명" FROM Professor P INNER JOIN Department D ON (P.Dept_ID = D.Dept_ID) START WITH mgr is NULL CONNECT BY prior Professor_id = Mgr ;
9. 수강(SG_Scores) 테이블과 과목(Course) 테이블을 이용하여 한 명이상 수강한 과목의 [과목코드, 과목명, 학점수]를 과목코드순으로 출력하시오. (INTERSECT)
SELECT Course_ID, Title, C_Number FROM Course INTERSECT SELECT Course_ID, Title, C_Number FROM SG_Scores INNER JOIN Course USING (Course_ID) ORDER BY 1;
10. 수강(SG_Scores) 테이블에서 2018학년도 수강 신청한 학생(학번이 'C18'로 시작)의 과목과 2017학년도 수강 신청한 학생(학번이 'C17'로 시작)의 과목중에서 2016학년도 학생(학번이 'C16'이 시작)이 수강하지 않은 과목을 출력하시오.
SELECT Course_ID, Title, C_Number FROM SG_Scores INNER JOIN Course USING (Course_ID) WHERE Student_ID LIKE 'C18%' UNION SELECT Course_ID, Title, C_Number FROM SG_Scores INNER JOIN Course USING (Course_ID) WHERE Student_ID LIKE 'C17%' MINUS SELECT Course_ID, Title, C_Number FROM SG_Scores INNER JOIN Course USING (Course_ID) WHERE Student_ID LIKE 'C16%' ORDER BY 1;
'오라클 SQL' 카테고리의 다른 글
오라클 11g와 함께하는 SQL과 PL/SQL 11장 연습문제 정답 정리 (0) | 2023.06.22 |
---|---|
오라클 11g와 함께하는 SQL과 PL/SQL 9장 연습문제 정답 정리 (0) | 2023.06.06 |
오라클 11g와 함께하는 SQL과 PL/SQL 8장 연습문제 정답 정리 (0) | 2023.05.30 |
오라클 11g와 함께하는 SQL과 PL/SQL 7장 연습문제 정답 정리 (0) | 2023.05.25 |
오라클 11g와 함께하는 SQL과 PL/SQL 6장 연습문제 정답 정리 (0) | 2023.05.24 |