본문 바로가기
개발/기타

스파르타코딩클럽 엑셀보다 쉬운 SQL

by mabyoungg 2023. 6. 2.

1주차

데이터베이스: 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통

모든 데이터베이스는 CRUD 기능 지원

 

show tables

select *(필드명) from 테이블명 where 조건

!= 같지 않음, between 범위, in 포함, like  % 패턴

limit 일부 데이터만, distinct 중복 제외, count  몇 개인지


2주차

group by: 동일한 범주의 데이터를 묶어서 통계

count 개수, min 최솟값, max 최댓값, avg 평균, round(,소수점자리) 반올림,sum 합계

 

order by: 출력하는 데이터를 필드의 값으로 정렬하여 출력

기본 오름차순(asc), desc 내림차순

 

별칭 Alias

select * from test t

where t.title = 'test'

 

select count(*) as cnt


3주차

inner join: 교집합

left join: 합집합, 왼쪽의 모든 행을 조회

*같은 필드를 가지고 있다 해도 서로 다른 의미를 가지고 있을 수도 있다. 의미 차이를 고려하여 적절한 필드를 사용해야 한다. 조건에 맞는 필드를 정하는 게 중요할 듯

is NULL, is not NULL

 

union all  안에서 한 ordey by 적용 X, 밖에서 적용


4주차

subquery: 쿼리문 안에 들어가는 쿼리문

-- inner join
SELECT * from
(
	SELECT from 
) a
inner join
(
	SELECT from 
) b on a.test = b.test
inner join test2 t2 on a.test = t2.test

-- with as
with table1 as (
	SELECT  from
), table2 as (
	SELECT from
)
SELECT * from
table1 a
inner join
table2 b on a.test = b.test
inner join test2 t2 on a.test = t2.test

SUBSTRING(필드명,1,10)  첫 번째부터 10자리 자르기

SUBSTRING_INDEX(필드명,'@',1) @를 기준으로 자르기, 1 하면 앞, -1 하면 뒤

 

case-when-then-else-end

(case when pu.point > 10000 then '1만 이상'
	when pu.point > 5000 then '5천 이상' 
	else '5천 미만' end) as lv

 

* SQL에서 AVG등과 같은 집계 함수는 하나의 집단에 대해 전체의 집계값을 하나로 표현하고 종료하는 특징

-- (select avg(point) from point_users)에 avg(point)만 넣으면 값 한개만 출력, subquery 사용
select pu.point_user_id, pu.point, 
	(case when pu.point >= (select avg(point) from point_users) then '잘하고 있어요.'
	     else '열심히 합시다' end) as msg
FROM point_users pu

*with절 사용할 때 table 못 찾는 오류가 발생하는데 전체 구문을 드래그하고 실행 아니면 with절과 밑의 select절 사이에 빈 줄 없애고 실행