단일행 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 |