본문 바로가기

DataBase/SQL

다중 컬럼 다중 로우

<다중 컬럼 다중 로우>


- 직무(JOB_ID)별 최대 급여자의 사원 내역을 출력하라.

SELECT MAX(SALARY) FROM EMPLOYEES GROUP BY JOB_ID;

SELECT EMPLOYEE_ID, LAST_NAME, SALARY, JOB_ID FROM EMPLOYEES
WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES GROUP BY JOB_ID);   >>>> 오류..


SELECT EMPLOYEE_ID, LAST_NAME, SALARY, JOB_ID FROM EMPLOYEES
WHERE (SALARY,JOB_ID) IN(SELECT MAX(SALARY) , JOB_ID FROM EMPLOYEES GROUP BY JOB_ID); IN 추가..

서브 쿼리 주의할 점
  1. ROW 가 1개인지 2개 이상인지 확인 하야여한다.


/* 01번 부서원들과 보너스가 같은 사원을 검색하라. */

SELECT * FROM EMP
WHERE COMM IN(SELECT COMM FROM EMP WHERE DNO = 01) AND DNO != 01;

WHERE 컬럼 = > 단일로우
WHERE 컬럼 IN =>  다중로우

IN : 검색된 값 중에 하나만 일치하면 참이다.
ANY : 검색된 값 중에 조건에 맞는 것이 하나 이상 있으면 참
ALL : 모든 검색된 값과 조건에 맞아야 함.

--> 컬럼 > ALL(서브쿼리) => 컬럼 > MAX :가장 큰 값 보다 크다.
--> 컬럼 < ALL(서브쿼리) => 컬럼 < MIN :가장 큰 값 보다 크다.

--> 컬럼 > ANY(서브쿼리) => 컬럼 > MIN:가장 큰 값 보다 크다.
--> 컬럼 < ANY(서브쿼리) => 컬럼 < MAX:가장 큰 값 보다 작다.

/* 부서 번호 30번 최대급여자 보다 급여가 높은 사원을 출력하라. */
SELECT MAX(SAL) FROM EMP WHERE DNO = 30;

SELECT * FROM EMPLOYEES
WHERE SALARY > ALL(SELECT SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = 30);

SELECT * FROM EMPLOYEES
WHERE SALARY < ANY(SELECT SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = 30);



/* 학생중 기말고사 성적이 가장 낮은 학생의 정보를 검색하라. */
SELECT SNAME FROM STUDENT S INNER JOIN SCORE S1 ON S.SNO = S1.SNO
INNER JOIN COURSE C ON S1.CNO = C.CNO
GROUP BY SNAME
HAVING AVG(RESULT) =(SELECT MIN(AVG(RESULT)) FROM STUDENT S INNER JOIN SCORE S1 ON S.SNO = S1.SNO
                      INNER JOIN COURSE C
                        ON S1.CNO = C.CNO
                          GROUP BY SNAME);

/* 화학과 1학년 학생중에 평점이 평균 이하인 학생을 검색하라. */
SELECT DISTINCT SNAME, AVR FROM STUDENT
WHERE AVR <= (SELECT AVG(AVR) FROM STUDENT                 
                WHERE SYEAR = 1 AND MAJOR ='화학')
ORDER BY AVR DESC;

/* 일반화학을 수강하는 학생중에 성적이 가장 낮은 학생의 이름을 검색하라. (조인 금지) */
SELECT SNAME FROM STUDENT S INNER JOIN SCORE S1 ON S.SNO = S1.SNO INNER JOIN COURSE C ON
S1.CNO = C.CNO WHERE RESULT = (SELECT MIN(RESULT) FROM STUDENT S INNER JOIN SCORE S1 ON S.SNO = S1.SNO INNER JOIN COURSE C ON

S1.CNO = C.CNO WHERE C.CNAME = '일반화학') AND C.CNAME = '일반화학';


'DataBase > SQL' 카테고리의 다른 글

게시판 페이징 처리  (0) 2017.03.16
FROM 절 서브 쿼리  (0) 2017.03.16
HAVING 절  (0) 2017.03.16
GROUP BY 절  (0) 2017.03.16
그룹 함수  (0) 2017.03.16