SQL:Select
IN연산자 문법
특정 집합(컬럼 혹은 리스트)에서 특정 집합 혹은 리스트가 존재하는지 판단하는 연산자입니다.
column_name이 가지고 있는 집합에서 value1,2 등의 값이 존재하는지 확인:
column_name이 가지고 있는 집합에서 table_name2 테이블의 column_name2의 집합이 존재하는지 확인:
중복 제거
중복을 없애는 쿼리는 #DISTINCT 또는 #GROUP BY 둘 중 하나를 사용하면 된다.
- DISTINCT : 중복을 없애주지만 정렬을 해주지 않는다.
- GROUP BY : 중복을 없애주고 정렬도 해준다.
이 때 GROUP BY는 그루핑 뿐만 아니라 정렬까지 수행하기 때문에 속도면에서 DISTINCT가 빠를 수 있다. 상황에 맞게 적절히 사용하자.
DISTINCT
- [추천] How we made DISTINCT queries up to 8000x faster on PostgreSQL - DISTINCT 쿼리가 느린 이유와 TimescaleDB 에서 빠르게 검색하는 방법
RECURSIVE CTEs
WITH RECURSIVE cte AS (
(SELECT tags_id FROM cpu ORDER BY tags_id, time DESC LIMIT 1)
UNION ALL
SELECT (
SELECT tags_id FROM cpu
WHERE tags_id > t.tags_id
ORDER BY tags_id, time DESC LIMIT 1
)
FROM cte t
WHERE t.tags_id IS NOT NULL
)
SELECT * FROM cte LIMIT 50;