쿼리 문법이 기억이 안날때 구글링하기 매번 번거로워서, 자주 사용하는 내용들을 한 곳에 정리하고자 한다.
(날위한 sql 통합노트)
집계함수
1.COUNT
SELECT COUNT(*) -> NULL 포함 레코드(행) 조회
SELECT COUNT(컬럼) -> NULL 제외 레코드(행) 조회
SELECT COUNT(DISTINCT 컬럼) -> NULL 제외, 중복 제외 레코드(행) 조회
2.SUM
SELECT SUM(컬럼) -> 컬럼의 합계 조회
3.AVG
예를 들어 아래와 같은 테이블이 있다고 가정할때
SELECT AVG(나이) -> 널값을 제외한 10+15/2(권일,권이)
SELECT SUM(나이) / COUNT(*) -> 널값을 포함한 10+15 / 3(권일,권이,권삼)
4.MAX
SELECT MAX(컬럼)
5.MIN
SELECT MIN(컬럼)
1. 성별과 거주지에 따른 평균 나이를 조회해라.(널값 제외)
SELECT 성별,거주지,AVG(나이)
FROM study.age a
GROUP BY 성별,거주지
2. 성별과 거주지에 따른 평균 나이를 조회해라.(널값 포함)
SELECT 성별,거주지,SUM(나이)/COUNT(*)
FROM study.age a
GROUP BY 성별,거주지
참고로 정렬과 함께 조회하는걸 추천한다.
<내림차순>
ORDER BY 컬럼 DESC
---------------------------------------------
<오름차순>
ORDER BY 컬럼 ASC
ORDER BY 컬럼 (생략)
3.성별과 거주지에 따른 평균 나이가 10이상인 것들을 조회해라.(널값 포함,많은 나이순)
SELECT 성별,거주지,SUM(나이)/COUNT(*) 나이
FROM study.age a
GROUP BY 성별,거주지
HAVING 나이 >= 10
ORDER BY 나이 DESC
조건문
CASE
CASE문을 사용할 때 순서가 굉장히 중요하다. 순서에 주의할것.
1.거주지가 수원이면 거리가 가깝다, 서울이면 거리가 멀다 그외는 확인 불가 (이름, 거주지, 거리 조회)
SELECT 이름, 거주지,
CASE
WHEN 거주지 = '수원' THEN '가깝다'
WHEN 거주지 = '서울' THEN '멀다'
ELSE '확인 불가' END AS 거리
FROM study.age a
2. 거리에 따른 평균 나이를 조회해라.(널값 포함)
SELECT CASE
WHEN 거주지 = '수원' THEN '가깝다'
WHEN 거주지 = '서울' THEN '멀다'
ELSE '확인 불가' END AS 거리
, SUM(나이)/COUNT(*) AS 나이
FROM study.age a
GROUP BY 거리
CASE 피봇
1. 거주지가 거리에 따른 평균 값을 조회해라.
SELECT
AVG(CASE WHEN 거주지 = '수원' THEN 나이 ELSE '확인불가' END) AS 거리1
,AVG(CASE WHEN 거주지 = '서울' THEN 나이 ELSE '확인불가' END) AS 거리2
FROM study.age a
INNER JOIN
SELECT *
FROM u
INNER JOIN favorite f ON u.순번 = f.순번
LEFT JOIN
SELECT *
FROM u
LEFT JOIN favorite f ON u.순번 = f.순번
SELECT *
FROM u
LEFT JOIN favorite f ON u.순번 = f.순번
WHERE 나이 IS NULL
SELECT *
FROM u
LEFT JOIN favorite f ON u.순번 = f.순번
WHERE 나이 IS NOT NULL
RIGHT JOIN
사실 left join 에서 테이블 위치만 변경 해준거라 , 실무에서 right join 잘 안씀.
SELECT *
FROM u
RIGHT JOIN favorite f ON u.순번 = f.순번
FULL OUTER JOIN
SQL에는 FULL OUTER JOIN 기능이 지원되지 않는다.
두개의 테이블을 하나로 합쳐야 할 경우
UNION
데이터 중복 제거 후 합쳐서 조회
SELECT *
FROM favorite f
UNION
SELECT *
FROM f2 f
UNION ALL
데이터 중복 제거 없이 합쳐서 조회
SELECT *
FROM favorite f
UNION ALL
SELECT *
FROM f2 f
끝.
'개인공부 > SQL' 카테고리의 다른 글
[SQL]리트코드 181. Employees Earning More Than Their Managers 문제 풀이 (0) | 2023.04.22 |
---|---|
[SQL]리트코드 183. Customers Who Never Order 문제 풀이 (0) | 2023.04.22 |
[SQL]해커랭크 Population Census 문제 풀이 (0) | 2023.04.22 |
[SQL]해커랭크 Average Population of Each Continent 문제 풀이 (0) | 2023.04.22 |
[SQL]해커랭크 African Cities 문제 풀이 (0) | 2023.04.22 |