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
rental_id,
amount,
(SELECT MAX(amount) FROM payment)
FROM payment;
SELECT
rental_id,
amount
FROM payment
WHERE amount = (SELECT MAX(amount) FROM payment);
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이라고 불린다
괄호 내의 값 중 일치하는 것이 있으면 TRUE를 리턴
SELECT *
FROM payment
WHERE customer_id IN
(
SELECT customer_id
FROM payment
GROUP BY customer_id
HAVING count(*) >= 40
);
단 하나의(ANY) 값보다도 크다면 True를 리턴
모든 경우에 대해서 해당 조건이 성립해야 True를 리턴
하나의 값, 즉, 단일값을 리턴하는 서브쿼리 aka 스칼라 서브쿼리
=, > 등의 조건 표현식과 비교하는 값으로 쓰임
하나의 column에, 여러 row가 있는 형태의 결과를 리턴하는 서브쿼리
IN, ANY(SOME), ALL 등의 키워드와 함께 쓸 수 있음
테이블 형태의 값을 리턴하는 서브쿼리 쿼리 결과로 일시적으로 탄생한 테이블을 derived table이라고 하며 Oracle에서는 inline view라고도 함
derived table에는 alias를 꼭 붙여주어야 한다
outer query와 상관 관계가 없는 단독으로 실행 가능한 서브쿼리
서브쿼리가 outer query에 적힌 테이블 이름 등과 상관 관계를 갖고 있어서 그 단독으로는 실행되지 못하는 서브쿼리
조인 등의 작업을 해서 만든 '결과 테이블'이 가상으로 저장된 형태
--생성 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 뷰이름
사용자에게 높은 편의성을 제공
각 직무별 데이터 수요에 알맞은, 다양한 구조의 데이터 분석 기반 구죽
데이터 보안을 제공
SHOW DATABASES;
SHOW FULL TABLES IN 테이블명;
DESCRIBE 테이블명;