코딩일기

MySQL 기초부터 훑어보기5( Subquery, view) 본문

Code/SQL

MySQL 기초부터 훑어보기5( Subquery, view)

daje 2021. 3. 7. 15:24
728x90
반응형

https://dev.mysql.com/

 

 

안녕하십니까 다제입니다. 

 

오늘은 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를 보았을 때 우리가 해야하는 일까지 같이 살펴보았습니다. 

 

첫 출근하는 날이 기대가 됩니다. 데이터사이언스로의 미래를 꿈꾸며 오늘도 화이팅입니다.!

728x90
반응형
Comments