실습문제 풀이 복습
기초
SELECT *
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;
SELECT *
FROM EMPLOYEE
WHERE BONUS IS NULL;
SELECT *
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL;
SELECT *
FROM EMPLOYEE
ORDER BY SALARY DESC;
SELECT *
FROM EMPLOYEE
ORDER BY SALARY DESC, BONUS DESC;
SELECT EMP_ID, EMP_NAME, JOB_CODE, HIRE_DATE
FROM EMPLOYEE
ORDER BY HIRE_DATE;
SELECT EMP_ID, EMP_NAME
FROM EMPLOYEE
ORDER BY EMP_ID DESC;
SELECT EMP_ID, HIRE_DATE, EMP_NAME, SALARY
FROM EMPLOYEE
ORDER BY DEPT_CODE ASC, HIRE_DATE DESC;
SELECT SYSDATE FROM DUAL;
SELECT EMP_ID, EMP_NAME, FLOOR(SALARY / 10000) || '만원' AS 급여
FROM EMPLOYEE
ORDER BY SALARY DESC;
SELECT *
FROM EMPLOYEE
WHERE MOD(EMP_ID,2) = 1;
SELECT EMP_NAME, HIRE_DATE , EXTRACT(YEAR FROM HIRE_DATE) 년, EXTRACT(MONTH FROM HIRE_dATE) 월
FROM EMPLOYEE;
SELECT *
FROM EMPLOYEE
WHERE 9 = EXTRACT(MONTH FROM HIRE_DATE);
SELECT *
FROM EMPLOYEE
WHERE 1990 = EXTRACT(YEAR FROM HIRE_DATE);
SELECT *
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%리';
SELECT *
FROM EMPLOYEE
WHERE SUBSTR(EMP_NAME,2,1) ='이';
SELECT EMP_ID, EMP_NAME, HIRE_DATE, ADD_MONTHS(HIRE_DATE, 12 * 40)
FROM EMPLOYEE;
SELECT *
FROM EMPLOYEE
WHERE (EXTRACT(YEAR FROM HIRE_DATE) + 18) <= 2024;
SELECT EXTRACT(YEAR FROM SYSDATE)
FROM DUAL;
kh실습문제 2 SELECT & FUNCTION
SELECT * FROM JOB;
SELECT JOB_NAME FROM JOB;
SELECT * FROM DEPARTMENT;
SELECT EMP_NAME, EMAIL, PHONE, HIRE_DATE FROM EMPLOYEE;
SELECT HIRE_DATE, EMP_NAME, SALARY FROM EMPLOYEE;
SELECT EMP_NAME,
SALARY * 12 AS 연봉,
(SALARY + SALARY * NVL(BONUS,0) ) * 12 AS 총수령액,
(SALARY + SALARY * NVL(BONUS,0) ) * 12 - ( SALARY * 12 * 0.03 ) AS 실수령액
FROM EMPLOYEE;
SELECT EMP_NAME, SALARY, HIRE_DATE, PHONE
FROM EMPLOYEE
WHERE SAL_LEVEL = 'S1';
SELECT EMP_NAME,
SALARY,
(SALARY + SALARY * NVL(BONUS,0) ) * 12 - ( SALARY * 12 * 0.03 ) AS 실수령액 ,
HIRE_DATE
FROM EMPLOYEE
WHERE (SALARY + SALARY * NVL(BONUS,0) ) * 12 - ( SALARY * 12 * 0.03 ) >= 50000000;
SELECT *
FROM EMPLOYEE
WHERE SALARY >= 4000000 AND JOB_CODE = 'J2';
SELECT EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE (DEPT_CODE = 'D9' OR DEPT_CODE ='D5') AND HIRE_DATE > '02/01/01';
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01' AND '01/01/01';
SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';
SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '____#_%' ESCAPE '#'
AND DEPT_CODE IN ('D9', 'D6')
AND HIRE_DATE BETWEEN '90/01/01' AND '00/12/01'
AND SALARY >= 2700000;
SELECT EMP_NAME, EMP_NO, SUBSTR(EMP_NO,1,2) 생년, SUBSTR(EMP_NO,3,2) 생월, SUBSTR(EMP_NO,5,2) 생일
FROM EMPLOYEE;
SELECT EMP_NAME, SUBSTR(EMP_NO,1,6) || '-*******' AS 주민번호
FROM EMPLOYEE;
SELECT EMP_NAME, ABS(FLOOR(HIRE_DATE - SYSDATE)) "근무일수1" , ABS(FLOOR(SYSDATE - HIRE_DATE)) "근무일수2"
FROM EMPLOYEE;
SELECT *
FROM EMPLOYEE
WHERE MOD(EMP_ID , 2 ) = 1;
SELECT *
FROM EMPLOYEE
WHERE ADD_MONTHS(HIRE_DATE , 12 * 20) <= SYSDATE;
SELECT EMP_NAME, TO_CHAR(SALARY,'L999,999,999')
FROM EMPLOYEE;
SELECT EMP_NAME,
DEPT_CODE,
SUBSTR(EMP_NO,1,2) || '년 ' || SUBSTR(EMP_NO,3,2) || '월 ' || SUBSTR(EMP_NO,5,2) || '일' 생년월일,
EXTRACT(YEAR FROM SYSDATE) 현재년도,
EMP_NO,
EXTRACT(YEAR FROM TO_DATE(SUBSTR(EMP_NO,1,6),'RRMMDD')) 출생년도,
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM TO_DATE(SUBSTR(EMP_NO,1,6),'RRMMDD'))
나이,
FLOOR((MONTHS_BETWEEN (SYSDATE, TO_DATE(SUBSTR(EMP_NO,1,6), 'RRMMDD' ) ) ) / 12) AS "나이(만)"
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DECODE(DEPT_CODE, 'D5','총무부','D6' , '기획부', '영업부') 부서명
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D5','D6','D9')
ORDER BY DEPT_CODE;
SELECT EMP_NAME,
SUBSTR(EMP_NO,1,6) "주민번호 앞자리",
SUBSTR(EMP_NO,8) "주민번호 뒷자리",
SUBSTR(EMP_NO,1,6) + SUBSTR(EMP_NO,8) "주민번호 합"
FROM EMPLOYEE
WHERE EMP_ID =201
;
SELECT SUM((SALARY + SALARY * NVL(BONUS,0))*12) 끝
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5';
SELECT
COUNT(*) "전체 직원 수",
COUNT( DECODE(EXTRACT(YEAR FROM HIRE_DATE), 2001, 1, NULL)) "2001년 입사자 수" ,
COUNT( DECODE(EXTRACT(YEAR FROM HIRE_DATE), 2002, 1, NULL)) "2002년 입사자 수" ,
COUNT( DECODE(EXTRACT(YEAR FROM HIRE_DATE), 2003, 1, NULL)) "2003년 입사자 수" ,
COUNT( DECODE(EXTRACT(YEAR FROM HIRE_DATE), 2004, 1, NULL)) "2004년 입사자 수"
FROM EMPLOYEE;
워크북 실습문제 1
SELECT DEPARTMENT_NAME "학과 명" , CATEGORY "계열"
FROM TB_DEPARTMENT;
SELECT DEPARTMENT_NAME || '의 정원은 ' || CAPACITY || '명 입니다.' "학과별 정원"
FROM TB_DEPARTMENT;
SELECT STUDENT_NAME
FROM TB_STUDENT
WHERE DEPARTMENT_NO = '001'
AND SUBSTR(STUDENT_SSN, 8, 1) IN (2,4)
AND ABSENCE_YN = 'Y';
SELECT STUDENT_NAME
FROM TB_STUDENT
WHERE STUDENT_NO IN ('A513079', 'A513090', 'A513091','A513110','A513119');
SELECT DEPARTMENT_NAME, CATEGORY
FROM TB_DEPARTMENT
WHERE CAPACITY BETWEEN 20 AND 30;
SELECT PROFESSOR_NAME
FROM TB_PROFESSOR
WHERE DEPARTMENT_NO IS NULL;
SELECT *
FROM TB_STUDENT
WHERE DEPARTMENT_NO IS NULL;
SELECT CLASS_NO
FROM TB_CLASS
WHERE PREATTENDING_CLASS_NO IS NOT NULL;
SELECT DISTINCT CATEGORY
FROM TB_DEPARTMENT;
SELECT STUDENT_NO, STUDENT_NAME, STUDENT_SSN
FROM TB_STUDENT
WHERE EXTRACT(YEAR FROM ENTRANCE_DATE) = 2002
AND STUDENT_ADDRESS LIKE '%전주%'
AND ABSENCE_YN = 'N';
workbook 실습문제 2
ELECT STUDENT_NO 학번,
STUDENT_NAME 이름,
ENTRANCE_DATE 입학년도
FROM TB_STUDENT
WHERE DEPARTMENT_NO = '002'
ORDER BY 3 ASC;
SELECT PROFESSOR_NAME, PROFESSOR_SSN
FROM TB_PROFESSOR
WHERE LENGTH(PROFESSOR_NAME) != 3;
SELECT PROFESSOR_NAME 교수이름
, EXTRACT(YEAR FROM SYSDATE)
, EXTRACT(YEAR FROM TO_DATE(19 || SUBSTR(PROFESSOR_SSN,1,2),'YYYY' )) 교수출생년도
, EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM TO_DATE( 19 || SUBSTR(PROFESSOR_SSN,1,2),'YYYY' )) 나이
, FLOOR(MONTHS_BETWEEN(SYSDATE , TO_DATE( 19 || SUBSTR(PROFESSOR_SSN,1,6),'YYYYMMDD' )) / 12 ) 만나이
FROM TB_PROFESSOR
WHERE SUBSTR(PROFESSOR_SSN,8,1) = 1
ORDER BY 5;
SELECT SUBSTR(PROFESSOR_NAME, 2) 이름
FROM TB_PROFESSOR;
SELECT
STUDENT_NO,
STUDENT_NAME,
EXTRACT(YEAR FROM ENTRANCE_DATE) - EXTRACT(YEAR FROM TO_DATE(SUBSTR(STUDENT_SSN,1,2),'RR')) ,
CEIL(MONTHS_BETWEEN(ENTRANCE_DATE, TO_DATE( SUBSTR(STUDENT_SSN,1,6),'RRMMDD')) / 12) +1
FROM TB_STUDENT
WHERE EXTRACT(YEAR FROM ENTRANCE_DATE) - EXTRACT(YEAR FROM TO_DATE(SUBSTR(STUDENT_SSN,1,2),'RR')) > 19;
SELECT TO_CHAR(TO_DATE('20201225','YYYYMMDD'),'DAY') FROM DUAL;
SELECT STUDENT_NO,
STUDENT_NAME
FROM TB_STUDENT
WHERE SUBSTR(STUDENT_NO, 1,1 ) != 'A';
SELECT
ROUND(AVG(POINT), 1) 평점
FROM TB_GRADE
WHERE STUDENT_NO ='A517178';
SELECT
DEPARTMENT_NO 학과번호,
COUNT(*) AS "학생수(명)"
FROM TB_STUDENT
GROUP BY DEPARTMENT_NO
ORDER BY 1;
SELECT COUNT(*)
FROM TB_STUDENT
WHERE COACH_PROFESSOR_NO IS NULL;
SELECT SUBSTR(TERM_NO,1,4) 년도 , ROUND(AVG(POINT),1) "년도 별 평점"
FROM TB_GRADE
WHERE STUDENT_NO = 'A112113'
GROUP BY SUBSTR(TERM_NO,1,4);
SELECT
DEPARTMENT_NO 학과코드명,
COUNT(*),
COUNT( DECODE(ABSENCE_YN , 'Y', 1 , 'N', NULL) ) "휴학생 수"
FROM TB_STUDENT
GROUP BY DEPARTMENT_NO
ORDER BY 1;
SELECT
STUDENT_NAME 동일이름,
COUNT(*) "동명인 수"
FROM TB_STUDENT
GROUP BY STUDENT_NAME
HAVING COUNT(*) > 1
ORDER BY 1
;
SELECT
SUBSTR(TERM_NO,1,4) 년도,
NULL AS 학기,
ROUND(AVG(POINT),1) 평점
FROM TB_GRADE
WHERE STUDENT_NO = 'A112113'
GROUP BY SUBSTR(TERM_NO,1,4)
UNION ALL
SELECT
SUBSTR(TERM_NO,1,4) 년도,
SUBSTR(TERM_NO,5,2) 학기,
ROUND(AVG(POINT),1) 평점
FROM TB_GRADE
WHERE STUDENT_NO = 'A112113'
GROUP BY SUBSTR(TERM_NO,1,4) , SUBSTR(TERM_NO,5,2)
UNION ALL
SELECT
NULL,
NULL,
ROUND(AVG(POINT),1) 평점
FROM TB_GRADE
WHERE STUDENT_NO = 'A112113'
ORDER BY 1, 2
;
SELECT SUBSTR(TERM_NO,1,4) 년도
,SUBSTR(TERM_NO,5,2) 학기
,ROUND(AVG(POINT),1) 평점
FROM TB_GRADE
WHERE STUDENT_NO ='A112113'
GROUP BY ROLLUP(SUBSTR(TERM_NO,1,4) , SUBSTR(TERM_NO,5,2))
ORDER BY 1, 2;
WORKBOOK 실습문제 3
SELECT STUDENT_NAME, STUDENT_ADDRESS
FROM TB_STUDENT
ORDER BY 1;
SELECT STUDENT_NAME, STUDENT_SSN
FROM TB_STUDENT
WHERE ABSENCE_YN = 'Y'
ORDER BY 2 DESC;
SELECT STUDENT_NAME 학생이름,
STUDENT_NO 학번,
STUDENT_ADDRESS "거지주 주소"
FROM TB_STUDENT
WHERE (STUDENT_ADDRESS LIKE '%강원도%'
OR STUDENT_ADDRESS LIKE '%경기도%')
AND STUDENT_NO LIKE '9%'
ORDER BY 1;
SELECT
PROFESSOR_NAME,
PROFESSOR_SSN
FROM TB_PROFESSOR
WHERE DEPARTMENT_NO = (
SELECT DEPARTMENT_NO FROM tb_department
WHERE DEPARTMENT_NAME = '법학과'
)
ORDER BY 2;
SELECT STUDENT_NO ,
POINT
FROM TB_GRADE
WHERE CLASS_NO = 'C3118100'
AND TERM_NO ='200402'
ORDER BY 2 DESC , 1
;
SELECT
STUDENT_NO,
STUDENT_NAME,
DEPARTMENT_NAME
FROM TB_STUDENT
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO);
SELECT CLASS_NAME, DEPARTMENT_NAME
FROM TB_CLASS
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO);
SELECT CLASS_NAME, PROFESSOR_NAME
FROM TB_CLASS
JOIN TB_CLASS_PROFESSOR USING(CLASS_NO)
JOIN TB_PROFESSOR USING(PROFESSOR_NO);
SELECT CLASS_NAME, PROFESSOR_NAME
FROM TB_CLASS C
JOIN TB_CLASS_PROFESSOR USING(CLASS_NO)
JOIN TB_PROFESSOR USING(PROFESSOR_NO)
JOIN TB_DEPARTMENT D ON C.DEPARTMENT_NO = D.DEPARTMENT_NO
WHERE CATEGORY = '인문사회';
SELECT STUDENT_NO, STUDENT_NAME , ROUND(AVG(POINT),1) 전체평점
FROM TB_STUDENT
JOIN TB_GRADE USING(STUDENT_NO)
WHERE DEPARTMENT_NO = (SELECT DEPARTMENT_NO FROM TB_DEPARTMENT WHERE DEPARTMENT_NAME ='음악학과')
GROUP BY STUDENT_NO, STUDENT_NAME;
SELECT DEPARTMENT_NAME , STUDENT_NAME, PROFESSOR_NAME
FROM TB_STUDENT
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
JOIN TB_PROFESSOR ON PROFESSOR_NO = COACH_PROFESSOR_NO
WHERE STUDENT_NO = 'A313047';
SELECT STUDENT_NAME , TERM_NO
FROM TB_STUDENT
JOIN TB_GRADE USING(STUDENT_NO)
JOIN TB_CLASS USING(CLASS_NO)
WHERE CLASS_NAME ='인간관계론'
AND SUBSTR(TERM_NO,1,4) = '2007';
SELECT CLASS_NAME , DEPARTMENT_NAME
FROM TB_CLASS
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
LEFT JOIN TB_CLASS_PROFESSOR USING(CLASS_NO)
LEFT JOIN TB_PROFESSOR USING(PROFESSOR_NO)
WHERE CATEGORY = '예체능'
AND PROFESSOR_NO IS NULL;
SELECT STUDENT_NAME, NVL(PROFESSOR_NAME, '지도교수 미지정')
FROM TB_STUDENT S
LEFT JOIN TB_PROFESSOR P ON (COACH_PROFESSOR_NO = PROFESSOR_NO)
JOIN TB_DEPARTMENT D ON D.DEPARTMENT_NO = S.DEPARTMENT_NO
WHERE DEPARTMENT_NAME ='서반아어학과';
SELECT STUDENT_NO, STUDENT_NAME, DEPARTMENT_NAME, AVG(POINT)
FROM TB_STUDENT
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
JOIN TB_GRADE USING(STUDENT_NO)
WHERE ABSENCE_YN ='N'
GROUP BY STUDENT_NO, STUDENT_NAME, DEPARTMENT_NAME
HAVING AVG(POINT) >= 4.0;
SELECT CLASS_NO,
CLASS_NAME,
AVG(POINT)
FROM TB_CLASS
JOIN TB_DEPARTMENT USING(DEPARTMENT_NO)
JOIN TB_GRADE USING(CLASS_NO)
WHERE DEPARTMENT_NAME ='환경조경학과'
AND CLASS_TYPE LIKE '전공%'
GROUP BY CLASS_NO, CLASS_NAME;
SELECT STUDENT_NAME , STUDENT_ADDRESS
FROM TB_STUDENT
WHERE DEPARTMENT_NO = (SELECT DEPARTMENT_NO FROM TB_STUDENT WHERE STUDENT_NAME='최경희');
SELECT STUDENT_NO, STUDENT_NAME
FROM (
SELECT STUDENT_NO , STUDENT_NAME , AVG(POINT)
FROM TB_STUDENT
JOIN TB_GRADE USING(STUDENT_NO)
WHERE DEPARTMENT_NO = (SELECT DEPARTMENT_NO FROM TB_DEPARTMENT WHERE DEPARTMENT_NAME = '국어국문학과')
GROUP BY STUDENT_NO ,STUDENT_NAME
ORDER BY 3 DESC
) E
WHERE ROWNUM = 1;
SELECT DEPARTMENT_NAME , ROUND(AVG(POINT),1) 총평점
FROM tb_department
JOIN TB_CLASS USING (DEPARTMENT_NO)
JOIN TB_GRADE USING (CLASS_NO)
WHERE CATEGORY = (SELECT CATEGORY FROM TB_DEPARTMENT WHERE DEPARTMENT_NAME ='환경조경학과')
AND CLASS_TYPE LIKE '전공%'
GROUP BY DEPARTMENT_NAME;