본문 바로가기

Backend Study/Server

쿼리문(Join, Group by, Union, Having, 변수)

Join

1) Inner join

양쪽 테이블에서 모두 일치하는 레코드를 반환한다. (table1과 table2의 공통 부분<교집합>을 반환)

SELECT column FROM table1 INNER JOIN table2 ON table1.column=table2.column

 

2) Left join

왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환한다. 

 

3) Right join

오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환한다.

 

4) Outer join

왼쪽 테이블과 오른쪽 테이블의 레코드 모두를 반환한다.

 

Group by 

그룹별 정보를 조회하는 용도로 사용된다.

ex. 학년 별 성적 점수의 평균을 구하세요. 성별 별 최대 임금을 구하세요.

 

Group by 함수와 함께 쓰이는 몇 가지 집계 함수

max(컬럼 이름), min(컬럼 이름), median(컬럼 이름), sum(컬럼 이름), avg(컬럼 이름), variance(컬럼 이름), stddev(컬럼 이름)<표준 편차>, count(컬럼 이름)

 

SELECT avg(성적) FROM table GROUP BY 반
SELECT join_id AS 직책, count(*) AS 직원 수, max(salary) AS 최대급여 FROM employee group by job_id

 

Union

쿼리의 결과를 합치는 용도로 사용된다.
UNION을 사용하면 합쳐진 결과에서 중복을 제거한 결과를 반환하고, UNION ALL을 사용하면 중복을 제거하지 않고 합쳐진 결과를 그대로 반환한다.

 

UNION 사용법

 

SELECT ANIMAL_TYPE, COUNT(*)
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Cat'

UNION

SELECT ANIMAL_TYPE, COUNT(*)
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog'

 

위 상황에서는 무관하지만, 만약 모든 칼럼의 값이 같아 중복이 있다면  UNION을 사용할 시 중복이 제거된다. UNION ALL은 중복이 제거되지 않는다.

* 모든 쿼리는 컬럼의 개수와 데이터 타입이 일치해야한다.

 

 

Having

Having절은 집계 함수를 가지고 조건 비교를 할 때 사용한다.

(wherer절에서는 집계 함수를 사용할 수 없다.)

 

Having 사용법

 

SELECT NAME, COUNT(*) as COUNT From ANIMAL_INS 
where NAME is NOT NULL
group by NAME
Having COUNT(*)>1
order by NAME

 

변수

쿼리문에서도 변수를 사용할 수 있다. (정수, 10진수, 부동 소수점 등의 제한된 형식으로만 사용 가능)

 

SET @변수 이름 = 대입값; 혹은 SET @변수 이름 := 대입값;

 

변수 사용법

SET @start=1, @finish=10
SELECT * FROM tb_code WHERE code_cd BETWEEN @start AND @finish

 

set @hour :=-1;

select (@hour:=@hour+1) as HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME)=@hour) as COUNT
From ANIMAL_OUTS
WHERE @hour<23

'Backend Study > Server' 카테고리의 다른 글

쿠키, 세션, JWT  (0) 2022.08.23
From 절 서브 쿼리 (=인라인뷰 서브 쿼리)  (0) 2022.08.01
카카오 로그인 스프링부트 구현하기 (소셜 로그인)  (0) 2022.07.31
OAuth 2.0  (0) 2022.07.30
리눅스 사용시 root?  (0) 2021.08.03