SQL - 23.02.22

박무연·2023년 2월 22일
0

🔵SQL

목록 보기
8/15
post-thumbnail

SQL

Subquery

  • 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL문을 의미
  • 서브쿼리는 메인쿼리의 칼럼사용 가능

- Subqeury 종류

  • Scalar subquery - Select 절에 사용
  • inline View - From 절에 사용
  • Nested Subquery - Where 절에 사용

- Scalar subquery

  • 하나의 컬럼을 쿼리로 만든다
select column, (select column from table where condition)
from tablename
where condition
  • 서울은평경찰서의 강도 검거 건수와 서울시 전체의 평균 강도 검거 건수
  • 조건이 두개
    - 서울은평경찰서 강도 검거
    - 서울시 전체의 평균 강도 검거 건수
  • 보여야하는 컬럼의 결과가 두개인데 하나의 쿼리문에서 보여질 수 없다

- Inline view

  • 메인쿼리에서는 인라인 뷰에서 조회한 Column 만 사용가능하다.
select column
from table a ,(select column1 from table) b
where condition
  • 하나의 테이블을 더 지정 해주는 것
    e.g)
select c.police_station, c.rime_type, c.case_number
from crime_status c,
	(select police_station, max(case_number) count
    from crime_status
    where status_type like '발생'
    group by police_station) m
where c.police_station = m.police_station
	and c.case_number = m.count;
  • 가장 많이 발생한 범죄를 가져오기 위해 테이블을 하나더 지정
  • 메인쿼리 테이블과 연결 시켜주어야 하기 때문에 policat_Station도 함께 가져왔따

- 중첩 서브쿼리

  • Single Row - 하나의 행을 검색
  • Multiple Row - 하나 이상의 행을 검색
  • Multiple Column - 하나 이상의 열을 검색

- Single Row

  • 비교하고 싶은 값을 Select 형식으로 작성
  • Why? 변할 수 있으니깐!

e.g)
킹의 연봉보다 많이 보다는 사람을 출력하고싶다!
하지만 킹의 연봉이 변하기 때문에 단지 숫자를 넣는 것보다 조건을 주는 것이 좋다!

select *
from emp
where sal>(select sal from emp where ename='KING');

- Multiple Row

  • In
    - 서브쿼리 결과 중에 포함될때

  • EXISTS
    - 서브쿼리 결과 값이 있으면 반환
    그냥 where 문으로 엮어도 될거 같은데...

  • Any
    - 반환된 다중 행을 조건에 대입하여 하나라도 일치하면 출력하는 연산자
    - where sal >950 or sal >1100 or sal >1300

select *
from emp
where 
sal > ANY (SELECT MIN(sal)
FROM emp
GROUP BY deptno);
  • All
    - 반환된 다중 행을 조건에 대입했을때 모두 일치한 경우에만 출력하는 연산자
    - where sal >950 and sal>1100 and sal>1300
select *
from emp
where 
sal > ALL (SELECT MIN(sal)
FROM emp
GROUP BY deptno);

reference : Subquery

profile
Easy day!

0개의 댓글