Computer Science/Database, SQL

[Codeit/MySQL] #6 서브쿼리와 뷰를 활용한 데이터 분석

성중 2021. 4. 16. 15:55

서브쿼리(SubQuery)

서브쿼리: SQL문 안에 ‘부품’처럼 들어가는 SELECT문

다른 쿼리창에서 작업해서 넣을 값을 한 번에 작업할 수 있다!

서브쿼리를 포함하는 전체 SQL문은 outer query(외부 쿼리), 서브쿼리는 inner query(내부 쿼리)

 

SELECT절의 서브쿼리는 보통 새로운 column 조회를 추가하는 경우다!

WHERE절의 서브쿼리도 활용해 조건을 붙이자

IN으로 컬럼의 여러 row값을 return하는 조건도 가능하다!

서브쿼리 내부는 그루핑을 할지 WHERE을 쓸지 잘 판단하자

ANY와 ALL을 활용해도 좋다!

ANY(=SOME): 서브쿼리 row값 중 단 하나의 값이라도 만족하면 TRUE

ALL: 서브쿼리 row값 모두 만족해야 TRUE

FROM절의 서브쿼리는 테이블 형태의 결과를 return한다 (활용성 높다!)

전체 SQL문을 서브쿼리로 만든 derived table은 전체에 alias를 붙여줘야 한다

결과 테이블로 또 결과 테이블을 만드는 구조다..

+++

지금까지의 서브쿼리들은 outer query와 별개로 단독 실행해도 되는 비상관 서브쿼리

그럼 상관 서브쿼리는 무엇일까? ~ outer query와 상관관계를 가지는 서브쿼리!

이런 식으로 상관관계를 가지면 단독실행이 불가능

EXISTS는 조건에 맞는 값이 존재하면 return한다 / NOT EXISTS는 그 반대

 

서브쿼리를 사용하면 컬럼 alias를 SQL문에 바로 사용하지 못하던 문제도 해결이 가능하다

서브쿼리를 중첩해보자

코드가 길고 비효율적이다

뷰(View)

뷰(View): 조인 등의 작업을 통해 만든 ‘결과 테이블’을 다른 쿼리창에 가상으로 저장한 형태

CREATE VIEW 뷰 이름 AS SELECT문 -> 가상테이블을 생성해 alias를 붙인다

실제로 테이블이 생기는 건 아니고 함수를 저장하는 것과 비슷한 원리다
마치 원래 있던 table인 것처럼 SCHEMAS에 저장된다
View를 활용하면 자주 사용하는 서브쿼리를 저장, 호출해 간편하게 쓸 수 있다!

View를 활용하면..

  1. 반복작업에 있어 높은 편의성이 생긴다!
  2. 직무별 데이터 수요에 맞춤형 기반을 구축해줄 수 있다!
  3. 분석가에게 테이블을 직접 제공하지 않고 View를 제공해 데이터 보안!
CREATE VIEW emp_view AS SELECT id, name, age, department FROM employee;

이런 식으로 필요한 컬럼만 제공하거나..

CREATE VIEW emp_view2 AS SELECTED id, name, age, department FROM employee WHERE department != 'secrect';

이런 식으로 특정 row는 숨겨서 제공한다

 

본 내용은 Codeit의 '개발자를 위한 SQL 데이터베이스'를 바탕으로 작성되었습니다.