Data Base

Oracle) 단일행 Sub Query

5_jinseok12 2018. 5. 4. 14:56
728x90

단일행 Sub Query 란?

Sub Query 의 수행 결과 값이 1개의 행만 출력되는 것을 의미한다

가장 일반적으로 많이 사용하며 수행한 결과가 1건만 나오고 이 결과를 Main Query로 전달해서 수행한다

 

Sub Query 는 WHERE 절에 연산자 오른쪽에 위치해야 하므로 반드시 괄호로 묶어서 사용한다.

특별한 경우를 제외하고는 Sub Query 절에 Order by 절이 올 수 없다.

 

 

문제 1)

Student 테이블과 Department 테이블을 사용하여 'Anthony Hopkins' 학생과 1전공(deptno1) 이

동일한 학생들의 이름과 1전공 이름을 출력하세요

 

 

select s.name, d.dname
from student s, department d
where s.deptno1 = d.deptno and s.deptno1 = (select deptno1 from student where name = 'Anthony Hopkins')

 

우선 student 테이블과 department 테이블을 연결시켜주는것이 중요하다.

student 테이블을 s 로 department 테이블을 d 라는 변수의 값으로 지정했을 때

s.deptno1 (student 테이블의 deptno1) ,  d.deptno( department 테이블의 deptno)


student 테이블의 deptno1 department 테이블의 deptno가 같다면 다음 조건이 실행.

위에 조건과 student테이블의 deptno1 컬럼중 name이 'Anthony Hopkins' 와 같다.

 

 

 

문제 2)

Professor 테이블과 department 테이블을 조회하여 'Meg Ryan' 교수보다 나중에 입사한 사람의

이름과 입사일, 학과명을 출력하세요

 

 

select p.name, p.hiredate, d.dname
from professor p, department d
where p.deptno = d.deptno and p.hiredate > (select hiredate from professor where name = 'Meg Ryan')

 

이번 문제도 마찬가지로 Professor 테이블과 department 테이블을 연결시켜 주는게 중요하다.

Professor 테이블을 p로, Department 테이블을 d로 나타낼 때

p.deptno와 d.deptno가 같다면 다음조건인

select hiredate from professor where name='Meg Ryan' 조건이 실행되어

Professor 테이블의 hiredate 컬럼에서 name이 Meg Ryan 인 사람보다 큰(늦게 입사) 사람이 출력되는 것이다.

 

 

문제 3)

Studnet 테이블에서 1전공(deptno1)이 201번인 학과의 평균 몸무게보다 몸무게가 많은 학생들의

이름과 몸무게를 출력하세요

 

select name, weight
from student
where weight > (select avg(weight) from student where deptno1=201)

 

위에 문제는 간단하다. 학생테이블에서 학생이름과 몸무게를 나타낸다.

하지만 where 절에서 조건은 특정 조건보다 큰 것을 출력한다.

특정 조건은 student 테이블에서 1전공의 평균 몸무게를 나타낸다. avg() 는 평균을 나타냄.

즉 1전공의 평균 몸무게보다 몸무게가 많이 나가는 학생들을 출력하는것이다

 

문제 4) 
10번 부서내의 사람들끼리 급여를 비교해서 A사원급여보다 B사원급여가 많은사람을 출력하시오

 

 

10번 부서의 사원급여 비교 : 쌍검색 -> self join

같은 emp 테이블을 사용하기 때문에 emp e1과 emp e2로 지정한다.

e1의 deptno와 e2의 deptno가 같을 때 e1의 sal 보다 e2의 sal이 큰 것을 출력한다. 단 deptno가 10일때.

 

 

문제 5)

Student 테이블과 hakjum 테이블, scroe 테이블을 이용하여 c+ 인 학생의 학번과 이름, 점수를 나타내시오.

 

Student 테이블을 s로 Score 테이블을 o로 hakjum 테이블을 h로 나타냈을 때

s테이블의 학번과 o테이블의 학번이 같아야 한다.

그리고 h테이블의 학점이 C+ 이면서 o테이블의 total 점수가 h 테이블의MIN_POINT 이상 MAX_POINT이하인 것을 출력한다. 

 

 

 

문제 6)

학생수가 3명 이상인 학과의 번호, 학과 이름, 학생 수를 나타내시오.

 

Student 테이블을 s로 department 테이블을 d로 나타냈을 때

s테이블의 deptno1와 d 테이블의 deptno가 같아야 한다

count(d.dname)으로 인해 group by를 사용하여 나머지 결과값을 나타내야 한다.

 

 

반응형

'Data Base' 카테고리의 다른 글

Oracle) PL/SQL 개념  (0) 2018.07.10
Oracle) 다중행 Sub Query  (0) 2018.05.04
Oracle) MAX/MIN 함수, RANK 함수  (0) 2018.05.04
Oracle) DECODE 함수 , TO_CHAR 함수 , CASE문  (0) 2018.04.09
Oracle) INSTR,SUBSTR,REPLACE 함수  (0) 2018.04.08