안녕하십니까 다제입니다.
오늘은 SUbquery와 view에 대해서 살펴보고자 합니다.
바로 시작해보겠습니다.
1. Subquery
1) Subquery
-. 전체 SQL문 안에서 데이터베이스에 별도로 요청을 보내는 또 다른 SQL구문을 의미하합니다.
SELECT i.id, i.name, AVG(star) AS avg_star
FROM item AS i LEFT OUTER JOIN review AS r
ON r.item_id = i.id
GROUP BY i.id, i.name
HAVING avg_star < (SELECT AVG(star) FROM review)
ORDER BY avg_star DESC;
-. 여기에서 Subquery는 HAVING으로 시작하는 구문에서 SELECT~~ 에 해당됩니다.
-. 단 Subquery를 사용할 때는 반드시 ()로 감싸주어야합니다.
2) SubQuery를 SELECT에 이용해 보기 (새로운 feature 생성)
SELECT
id,
name,
price,
(SELECT AVG(price) FROM item) AS AVG_PRICE
FROM item;
-. 위에 보았던 SubQuery를 이용하여 feature를 생성할 수 있음
3-1) SubQuery를 WHERE에 이용해 보기
SELECT
id,
name,
price,
(SELECT AVG(price) FROM item) AS AVG_PRICE,
price - (SELECT AVG(price) FROM item)
FROM item
WHERE
price - (SELECT AVG(price) FROM item) > 0;
-. SubQuery를 이용하여 WHERE에서 이렇게 조건별로 추출이 가능함
3-2) SubQuery를 WHERE에 이용해 보기(IN 이용하기)
SELECT * FROM item
WHERE id IN
(
SELECT item_id
FROM review
GROUP BY item_id having COUNT(*) >=3
);
3-3) SubQuery를 WHERE에 이용해 보기(ANY, SOME, ALL 이용하기)
SELECT * FROM item
WHERE view_count > ANY
(SELECT view_count
FROM review WHERE category = "ACTION")
AND category != "ACTION";
SELECT * FROM item
WHERE view_count > SOME
(SELECT view_count
FROM review WHERE category = "ACTION")
AND category != "ACTION";
-. ANY는 우리나라 말로 "~중 하나라도"라는 뜻을 가집니다. 이에, 해당되는 최소값을 기준으로 하여 필터링 됩니다.
-. SOME도 어떤 하나의~라는 뜻을 가지며, ANY와 비슷한 역할을 합니다.
-. ALL은 "모두"라는 뜻으로 모든 기준이 무합되는 것을 필터링합니다. 이에, 최대값을 기준으로 하여 필터링 됩니다.
3-4) SubQuery를 FROM에 이용해 보기
SELECT
AVG(review_count),
MAX(review_count),
MIN(review_count)
FROM
(SELECT
SUBSTRING(address, 1, 2) AS region,
COUNT(*) AS review_count
FROM review AS r LEFT OUTER JOIN member AS m
ON r.mem_id = m.id
GROUP BY SUBSTRING(address, 1, 2)
HAVING region IS NOT NULL
AND region != '안내') AS review_count_summary;
-. FROM절에 사용하면 SubQuery값이 table로 리턴이 됩니다. 이렇게 생성된 table을 derived table이라고 합니다.
-. derived table은 반드시 alias를 붙혀줘야한다고 합니다. query의 규칙이라고 하니 꼭 기억해두고 해매는 일이 없도록 해야겠습니다.
2. 뷰
-. 뷰는자주 사용하는 쿼리문을 특정 변수에 저장해두는 행위 및 그로 인해 생성된 가상 테이블을 지칭합니다.
-. 뷰를 사용하는 좋은 장점은
1) 가독성을 높여준다.
2) 반복적인 작업을 줄어준다.
3) 각 직무별 데이터 수요에 알맞은, 다양한 구조의 데이터 분석 기반을 구축해둘 수 있습니다.
4) 뷰는 데이터 보안을 제공합니다. -> 일종의 쿼리문이 암호화를 시켜버리는 거죠!
3. 우리가 출근하면 가장 먼저 해야할 일
-. 인사 잘하기
-. 게시판에 공지사항, 비상연락망, 조직도 확인하기
-. 회사의 서버의 데이터베이스 확인하기
1) 어떤 데이터베이스들이 있는지
2) 각 데이터베이스 안에 어떤 테이블들이 있는지
3) 각 테이블의 컬럼 구조는 어떻게 되는지
4) 테이블들 간의 Foreign Key 관계는 어떤지
5) 변수는 어떻게 저장하시는지
6) 코드 스타일은 어떠한지
-. 현재 진행되고 있는 흐름은 어떤 것인지
-. 내가 할 수 있는 것과 해서는 안되는 일을 빠르게 파악하기
-. 회사 내에서 강력하게 싫어하는 행동들을 빠르게 파악하기
이렇게 SQL문법과 DB를 보았을 때 우리가 해야하는 일까지 같이 살펴보았습니다.
첫 출근하는 날이 기대가 됩니다. 데이터사이언스로의 미래를 꿈꾸며 오늘도 화이팅입니다.!
'Code > SQL' 카테고리의 다른 글
MySQL 기초부터 훑어보기7(ALTER, TABLE) (2) | 2021.03.08 |
---|---|
MySQL 기초부터 훑어보기6(Table) (0) | 2021.03.08 |
MySQL 기초부터 훑어보기4(ForeignKey, Join) (0) | 2021.03.07 |
MySQL 기초부터 훑어보기3(GROUP BY, SQL Code 실행되는 순서) (0) | 2021.03.06 |
MySQL 기초부터 훑어보기2(NUMBER, NULL, FEATURE연산 외) (0) | 2021.03.06 |