개인공부/SQL

[SQL]자주쓰는 SQL 정리

k솔이 2023. 4. 19. 19:55

쿼리 문법이 기억이 안날때 구글링하기 매번 번거로워서,  자주 사용하는 내용들을 한 곳에 정리하고자 한다.

(날위한  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(컬럼) 


age 테이블

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.순번

 

u 테이블
favorite 테이블
inner join

 

LEFT JOIN

SELECT *
FROM u
           LEFT JOIN favorite f ON u.순번 = f.순번

left join

SELECT *
FROM u
           LEFT JOIN favorite f ON u.순번 = f.순번
WHERE 나이 IS NULL

left join 나이 is null

SELECT *
FROM u
           LEFT JOIN favorite f ON u.순번 = f.순번
WHERE 나이 IS NOT NULL

left join 나이 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 기능이 지원되지 않는다. 

두개의 테이블을 하나로 합쳐야 할 경우 

 

 

f2 테이블
favorite 테이블

UNION

데이터 중복 제거 후 합쳐서 조회

SELECT *
FROM favorite f 

UNION 

SELECT *
FROM f2 f

UNION ALL

데이터 중복 제거 없이 합쳐서 조회

SELECT *
FROM favorite f 

UNION ALL

SELECT *
FROM f2 f

 

끝.