SQL 마지막 문법 정리

전대진·2022년 9월 29일
0

SQL 초보

목록 보기
4/4

◆select
select (모두) 또는 열(column)의 이름 from 테이블이름
ex)
select
from tableName
select columnName from tableName
select 콤마로 보여줄 column이름과 계산함수를 여러개 사용 가능
select column, count(column), avg(p.column) from tableName

◆where (selcect 다음 줄에 들어감)
ex)
where column이름 = '문자'
where column이름 <= 숫자
where column이름 != '문자' 또는 숫자
where column이름 between '' and '' # 연속되는 것 가능
where column이름 in (숫자,숫자) # between과 비슷, 연속되지 않아도 가능
where column이름 in (값)
where column이름 like '%' # %를 붙여서 특정 문자열을 포함해서 모두 검색
▷and 위 where문법들을 합쳐서 사용할 때(필요한 조건일 때)
where column이름 = '문자' and column이름 = '문자' 또는 숫자
where column이름 like '%' and column이름 between '' and ''

◆limit
주로 마지막 줄에 사용하며, 화면에 보여주는 테이블의 목록 개수를 제한
ex)
select * from 테이블이름
limit 숫자

◆distinct
중복되는 값을 하나로 보여줌
ex)
select distinct(column이름) from 테이블이름

◆count
개수 세기
ex)
select count(* 또는 column이름) from 테이블이름
select count(distinct(column이름) from 테이블이름

◆group by
해당 column의 값으로 묶음
ex)
select column이름, count(*) from 테이블이름
group by column이름

◆min 최소값
ex)
select column이름, min(숫자가 있는 column이름) from 테이블이름

◆avg 평균
select column이름, avg(숫자가 있는 column이름) from 테이블이름

◆round 몇 째 자리까지만 출력, 반올림
select column이름, round(avg(숫자가 있는 column이름),숫자) from 테이블이름

◆sum 합계
select column이름, sum(숫자가 있는 column이름) from 테이블이름

◆order by 정렬
ascending, descending
값이 오른다는 오름차순, 큰 값부터 내려간다는 내림차순 정렬
ex)
select column이름, avg(숫자가 있는 column이름) from 테이블이름
order by column이름

select column이름, avg(숫자가 있는 column이름) from 테이블이름
order by column이름 desc

◆alias 별칭
이용해야 하는 테이블의 수가 많을 때 별칭을 주어 혼동을 줄인다
ex)
select * from 테이블이름 as 별칭
사용할 때는
별칭.column이름

select * from users as u
group by u.name

◆JOIN
테이블들을 합쳐서 가상의 한 테이블로 만들어서 사용한다
◇left join 왼쪽 테이블 기준 삼고, 그 기준에 붙여준다
ex)
select * from users u
left join point_users pu on u.user_id = pu.point_user_id

◆inner join 교집합
교집합이 없으면 테이블은 보여주지만 교집합에 해당하는 값이 없음.
select * from users u
inner join point_users pu on u.user_id = pu.point_user_id

◆union 테이블 붙이기
tip)유니온을 쓸 때 각각의 문단 속 오더 바이가 작동하지 않는다
합친 후에 오더바이를 해야 한다.
(
테이블
)
union all
(
테이블
)

◆SubQuery
①select문을
select문, where절, from절 안에 괄호 ()를 사용하여
집어 넣고 사용할 수 있다
ex)
select user_id , name, email from users u
where user_id in (
select user_id from orders o
where payment_method = 'kakaopay'
)

②서브쿼리 안에 반복적으로 서브쿼리를 넣어서 사용 가능하다

◆with
테이블인 것 처럼 사용할 수 있다
가상의 테이블이기 때문에 드래그 한 후에 실행
ex)
with table1 as (
select course_id, count(distinct(user_id)) as cnt_checkins from checkins
group by course_id
), table2 as(
select course_id, count(*) as cnt_total from orders
group by course_id
)

select c.title,
a.cnt_checkins,
b.cnt_total,
(a.cnt_checkins/b.cnt_total) as ratio
from table1 a
inner join table2 b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id

□substring_index
지정 문자열 기준으로 -1은 왼쪽 문자열 제외하고 출력
지정 문자열 기준으로 1은 오른쪽 문자열 제외하고 출력
지정 문자열 기준으로 0은 출력 하지 않음
ex)
select column이름, substring_index(column이름, '문자열', -1)

□substring
문자열에서 왼쪽이 시작인 1부터 시작에서 일정 범위 만큼만 보여주기
ex)
select o.order_no , SUBSTRING(created_at, 1, 10) as date from orders o

□case when then else end
경우에 따라 원하는 값을 새 필드에 출력
ex)
select column1 , column2,
(case when column1 > 10000 then '문자열'
else '문자열' END) as msg
from point_users pu

□숫자값 0은 NULL로 표현

profile
코딩 초보

0개의 댓글