SQL 서브쿼리

POOHYA·2022년 3월 21일
0

SQL

목록 보기
4/7

서브쿼리

SELECT
FROM 
GROUP BY 
HAVING (서브쿼리)
ORDER BY
SELECT
	c.customer_id,
	c.last_name,
    p.rental_id,
    SUM(p.amount) AS total_amount
FROM customer AS c
LEFT OUTER JOIN payment AS p
ON c.customer_id = p.customer_id
GROUP BY c.customer_id
ORDER BY total_amount DESC;

SELECT절에 있는 서브쿼리

SELECT 
	rental_id, 
	amount,
	(SELECT MAX(amount) FROM payment)
FROM payment;

WHERE절에 있는 서브쿼리

SELECT 
	rental_id, 
    amount 
FROM payment
WHERE amount = (SELECT MAX(amount) FROM payment);

FROM절에 있는 서브쿼리

SELECT 
	customer_id, 
    AVG(sum_amount)
FROM
(SELECT customer_id, SUM(amount) AS sum_amount FROM payment
GROUP BY customer_id) AS sum_table;

FROM절의 서브쿼리의 결과는 derived table이라고 불린다

내부쿼리

외부쿼리

IN

괄호 내의 값 중 일치하는 것이 있으면 TRUE를 리턴

SELECT *
FROM payment
WHERE customer_id IN
(
SELECT customer_id 
FROM payment
GROUP BY customer_id 
HAVING count(*) >= 40
);

ANY

단 하나의(ANY) 값보다도 크다면 True를 리턴

ALL

모든 경우에 대해서 해당 조건이 성립해야 True를 리턴

1. 단일값을 리턴하는 서브쿼리

하나의 값, 즉, 단일값을 리턴하는 서브쿼리 aka 스칼라 서브쿼리
=, > 등의 조건 표현식과 비교하는 값으로 쓰임

2. 하나의 column에 여러 row들이 있는 형태의 결과를 리턴하는 서브쿼리

하나의 column에, 여러 row가 있는 형태의 결과를 리턴하는 서브쿼리
IN, ANY(SOME), ALL 등의 키워드와 함께 쓸 수 있음

3. 하나의 테이블 형태의 결과(여러 column, 여러 row)를 리턴하는 서브쿼리

테이블 형태의 값을 리턴하는 서브쿼리 쿼리 결과로 일시적으로 탄생한 테이블을 derived table이라고 하며 Oracle에서는 inline view라고도 함
derived table에는 alias를 꼭 붙여주어야 한다

서브쿼리의 분류

비상관 서브쿼리(Non-correlated Subquery)

outer query와 상관 관계가 없는 단독으로 실행 가능한 서브쿼리

상관 서브쿼리(Correlated Subquery)

서브쿼리가 outer query에 적힌 테이블 이름 등과 상관 관계를 갖고 있어서 그 단독으로는 실행되지 못하는 서브쿼리

VIEW

조인 등의 작업을 해서 만든 '결과 테이블'이 가상으로 저장된 형태

--생성
CREATE VIEW 뷰이름 AS
쿼리문
CREATE VIEW customer_amount AS
SELECT 
	customer_id, 
    amount 
FROM payment
WHERE amount = (SELECT MAX(amount) FROM payment)
ORDER BY customer_id ASC;
--조회
SELECT * FROM 뷰이름

VIEW의 장점

  1. 사용자에게 높은 편의성을 제공

  2. 각 직무별 데이터 수요에 알맞은, 다양한 구조의 데이터 분석 기반 구죽

  3. 데이터 보안을 제공

데이터베이스 현황 파악

존재하는 데이터베이스들 파악

SHOW DATABASES;

데이터베이스 내의 테이블들 파악

SHOW FULL TABLES IN 테이블명;

테이블의 컬럼 구조 파악

DESCRIBE 테이블명;
profile
김효주

0개의 댓글