728x90
반응형
1. PROFESSOR 테이블에서 교수들의 이메일을 아래와 같이 출력 하시오.
- 조건 1. 전체 길이는 해당 컬럼 값의 길이
- 조건 2. 마지막 4글자를 제외한 나머지 부분을 문자 '*'로 채워서 출력
- 조건 3. 출력 컬럼은 교수 이름, 아래와 같이 편집된 EMAIL 컬럼
SELECT NAME
, LPAD(SUBSTR(EMAIL,LENGTH(EMAIL)-3,4),LENGTH(EMAIL),'*') AS EMAIL
FROM PROFESSOR;
2. 학부별 키(HEIGHT)가 가장 작은 학생들의 목록을 출력하시오.
- 출력 컬럼 : 학부명, 학번, 학생 이름, 키
- 참고 테이블 : STUDENT2, DEPARTMENT
▶ 학부를 받아온다.
SELECT *
FROM STUDENT2 S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
INNER JOIN DEPARTMENT D2 ON D.PART = D2.DEPTNO;
▶ 출력 결과
▶ 학부별로 가장 작은 키를 구한다.
SELECT D.PART AS PART, MIN(S.HEIGHT) AS MHEIGHT
FROM STUDENT2 S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
INNER JOIN DEPARTMENT D2 ON D.PART = D2.DEPTNO
GROUP BY D.PART;
▶ 출력 결과
▶ 같은 키와 학부를 매칭한다.
SELECT D2.DNAME AS 학부명, S.STUDNO AS 학번, S.NAME AS 학생이름, S.HEIGHT AS 키
FROM STUDENT2 S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
INNER JOIN DEPARTMENT D2 ON D.PART = D2.DEPTNO
INNER JOIN(
SELECT D.PART AS PART, MIN(S.HEIGHT) AS MHEIGHT
FROM STUDENT2 S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
GROUP BY D.PART
)D3 ON D3.PART = D.PART
AND S.HEIGHT = D3.MHEIGHT
;
▶ 출력 결과
3. 직급이 정교수인 레코드의 급여 총 합과 전임강사 급여 총 합의 차이를 구하시오.
- 참고 테이블 : PROFESSOR
▶ 직급별
SELECT POSITION, SUM(PAY) AS PAY
FROM PROFESSOR
WHERE POSITION IN ('정교수','전임강사')
GROUP BY POSITION;
▶ 코드
SELECT MAX(P.PAY)-MIN(P.PAY) AS 급여합차이
FROM (
SELECT POSITION, SUM(PAY) AS PAY
FROM PROFESSOR
WHERE POSITION IN ('정교수','전임강사')
GROUP BY POSITION
) P;
▶ 출력 결과
4. 공과대학에 속한 94, 95 학번 학생들의 남녀 수를 구하는 쿼리를 작성하시오.
- 참고테이블 : STUDENT2, DEPARTMENT
▶ 코드
SELECT
COUNT(DECODE(SUBSTR(JUMIN,7,1),1,'남자',3,'남자')) AS 남자수
, COUNT(DECODE(SUBSTR(JUMIN,7,1),2,'여자',4,'여자')) AS 여자수
FROM STUDENT2 S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
INNER JOIN DEPARTMENT D2 ON D.PART = D2.DEPTNO
INNER JOIN DEPARTMENT D3 ON D2.PART = D3.DEPTNO
AND D3.DEPTNO = 10
WHERE SUBSTR(STUDNO,1,2) IN (94,95);
▶ 출력 결과
5. 공과대학에서 속한 교수들 중 가장 큰 급여를 가지는 사람과 가장 적은 급여를 가지는 사람의 교수 이름, 소속 학과, 직급, 급여를 출력하시오
- 참고 테이블 : PROFESSOR, DEPARTMENT
▶ 가장 큰 급여와 가장 적은 급여를 구한다.
SELECT MAX(PAY), MIN(PAY)
FROM PROFESSOR P
INNER JOIN DEPARTMENT D ON P.DEPTNO = D.DEPTNO
INNER JOIN DEPARTMENT D2 ON D.PART = D2.DEPTNO
INNER JOIN DEPARTMENT D3 ON D2.PART = D3.DEPTNO
AND D3.DEPTNO = 10;
▶ 코드
SELECT P.NAME AS 교수이름, D.DNAME AS 소속학과, P.POSITION AS 직급, P.PAY AS 급여
FROM PROFESSOR P
INNER JOIN DEPARTMENT D ON P.DEPTNO = D.DEPTNO
INNER JOIN(
SELECT MAX(PAY) AS MAXP, MIN(PAY) AS MINP
FROM PROFESSOR P
INNER JOIN DEPARTMENT D ON P.DEPTNO = D.DEPTNO
INNER JOIN DEPARTMENT D2 ON D.PART = D2.DEPTNO
INNER JOIN DEPARTMENT D3 ON D2.PART = D3.DEPTNO
AND D3.DEPTNO = 10
) P2 ON P.PAY = P2.MAXP
OR P.PAY = P2.MINP
;
▶ 출력 결과
728x90
반응형
'HRD_훈련 > ORACLE SQL' 카테고리의 다른 글
[SQL] ORACLE JOIN, UNION, CASE~WHEN, SEQUENCE, VIEW, MERGE (23일차) (0) | 2023.06.16 |
---|---|
[SQL] JOIN 실습 (22일차) (0) | 2023.06.15 |
[SQL] 시간 함수 (21일차) (0) | 2023.06.14 |
[SQL] SELF, OUTER JOIN (21일차) (0) | 2023.06.14 |
[SQL] INNER JOIN (20일차) (0) | 2023.06.13 |