본문 바로가기
SQL

[SQL] SQL 조건 분기, 집합 연산, 윈도우 함수, 갱신

by UnoCode 2020. 8. 30.

해당 글은 SQL을 어느 정도 다룬 사람이 보면 지루한 내용이니 스킵 하셔도 됩니다.

 

SELECT CASE

 

CASE WHEN [평가식] THEN [식]
	 WHEN [평가식] THEN [식]
     WHEN [평가식] THEN [식]
     ELSE [식] FROM TABLE
select name,
	CASE WHEN flat = '조식 포함' THEN '조식' 
    	 WHEN flat = '오늘의 특가' THEN '특가' 
         WHEN flat = '인기 호텔' THEN 'GOOD' 
         ELSE NULL END AS sp 
         from hotels;

 

UNION(합집합)

select name,flat from hotels where flat = '조식 포함'
    -> UNION
    -> select name,flat from hotels where flat = '인기 호텔';

 

INTERSECT(교집합)

참고로 Mysql에는 INTERSECT 구문을 지원하지 않습니다 .

 

그래서 INNER JOIN으로 사용합니다.

 

select products.name 
FROM products  
INNER JOIN non_products ON products.name=non_products.name;

 

EXCEPT(차집합)

 

참고로 Mysql에는 EXCEPT 구문을 지원하지 않습니다.

 

그래서 LEFT JOIN  또는 RIGHT JOIN으로 해결 하면 됩니다.

 

select products.name 
FROM products  
LEFT JOIN non_products ON products.name=non_products.name;
select products.name 
FROM products  
RIGHT JOIN non_products ON products.name=non_products.name;

 

윈도우 함수(PARTITION BY)

 

윈도우 함수 특징을 한미디로 정리하면 '집약 기능이 없는' GROUP BY 구' 입니다.

 

GROUP BY : 케이크 자르는것과 같이 집약 되서 데이터가 나온다.

PATITION BY : GROUP BY와 비슷하지만 집약 되어 있지 않음.

참고로 Mysql은 내장함수가 없기에 직접 구현 해야한다.

 

SELECT flat, rnum
FROM (
   SELECT a.*, 
           (CASE @vflat WHEN a.flat THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,
           (@vflat:=a.flat) vjob
   FROM hotels a, (SELECT @vflat:='', @rownum:=0 FROM DUAL) b
   WHERE a.flat <> ''
   ORDER BY a.flat                 
) c;

 

해당 쿼리는 flat이 안들어가 있는 부분은 제외를 시켯다.(보기싫어)

 

 

 

'SQL' 카테고리의 다른 글

[SQL] 집약  (0) 2020.09.02
[SQL] 어쩔 수 없는 UNION  (1) 2020.09.01
[SQL] 조건 분기 CASE,UNION 차이  (0) 2020.08.31
[SQL] DBMS 아키텍처 Part 2  (0) 2020.08.29
[SQL] DBMS 아키텍처 Part 1  (0) 2020.08.28

댓글