해당 글은 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 |
댓글