DS가 되기 위한 여정 👩‍💻

Data Science/SQL

[Elice SQL] 다중행, 단일행 서브쿼리

Tashapark 2025. 3. 1. 21:51
728x90

- 서브쿼리 강의로 넘어왔는데.. 매번 그냥 냅다썼지 잘 몰라서 캡처본 올림

- *엘리스 sql 강의임*

 

- 기본 구조!!

- 서브쿼리 먼저 실행되고 여러 번 실행 가능임.

-- 사원 번호가 7인 사원보다 나이가 어린 사원의 모든 컬럼을 조회 하는 쿼리를 작성하세요.
select *
from emp
where birthdate > (select birthdate
                    from emp
                    where empnum = 7);

 

 

 

- 이거 좀 헷갈리는 듯..?

> any() : 1개만 커도 되니깐 크려면 최소값보다만 커도 되고, 작으려면 최대값보다 작아야 하고 -> 내부적으로 모두 or 연산

- > all() : 모든 값보다 커야 되니깐 최대값보다 커야 함. 반대는 최솟값보다 작아야 함.  -> 내부적으로 모두 and 연산

select *
from emp
where sal > all (select max(sal) -- 이걸 잘 안썼는데.. 괄호 다음에 써주면 됌!
                from emp
                where job = 'manager');

 

- '누구든 아니면 ~별로' -> any 쓸 것.. 

- 약간 .. 뭐랄까 .. in이랑의 차이를 내가 명확히 인식하지 못하는 것 같애..

=> 연산자 안 쓰고 걍 in으로 해도 됌!  

*any, all만 비교연산이 가능!

 

-- 각 부서별 나이가 제일 많은 사원을 조회하는 쿼리를 작성해주세요.
select *
from emp
where birthdate = any (select min(birthdate)
                        from emp 
                        group by deptno);
                        
                        
-- 그래 그냥 in 도 가능 굳이 연산자 안써도 됌                        
select *
from emp
where birthdate in (select min(birthdate)
                        from emp 
                        group by deptno);

 


-- salaries 테이블에서 직원 번호와 한 직원의 평균 급여를 중복없이 출력해보세요.

select distinct emp_no, 
    (select avg(salary)
        from salaries a
        where a.emp_no = b.emp_no) as avg_salary -- where이 아니라.. 그냥 그룹바이로 하려고 하니까 틀렸음
from salaries b;
728x90
반응형