[TIL] SQL 문법 정리

이진호·2023년 10월 11일
0

TIL

목록 보기
8/66

기본 문법

select 쿼리문 (select, from)

select : 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미이다.
from : 데이터베이스에서 테이블을 정한다

* 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올까?

where

where은 select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미한다.

select * 
	from table
    where name = '이'

where에 들어갈 수 있는 조건들은 다음과 같다

  • = : 값이 같은가
  • != : 값이 같지 않은가
  • >,<,>=,<= : 부등호
  • between a and b : 범위 지정
  • in :
    ex) where week in (1,3)
    week에 1과 3이 포함된 값만 가져온다
  • like :
    ex) email like '%naver.com'
    %를 이용해서 문자열 패턴을 지정할 수 있다
  • NULL : 테이블에 NULL값이 들어가 있을 수 있는데 이때, is NULL 혹은 is not NULL을 통해서 조건을 정할 수 있다.

구분, 정리

group by

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내줄 수 있다.
예를 들어, 유저 테이블에 이름 별로 몇명이 존재하는지를 찾고 싶을 때

select name, count(*)
 from users
 group by name

order by

order by 필드 [옵션,default: asc]
와 같이 사용하고 정한 필드의 값을 기준으로 오름차순 및 내림차순으로 정렬 할 수 있다.

심화

join

2개 이상의 테이블을 이어주는데 사용하는 문법으로, 각 테이블들은 엮을 수 있도록 같은 필드 값이 있어야 한다.!

사용하는 방식은 다음과 같다

selct * from table_a 
left(inner) join b on a.id = b.id

left join

a,b라는 테이블을 있는데 특정 키 값으로 묶은 다음에 b에 데이터가 없을 때 NULL 값으로 채워준다. * 순서가 중요하다

inner join

a,b라는 테이블을 특정 키 값으로 묶고 a와 b에 모두 있는 값만 보여준다.

union

2개의 테이블을 합치는 문법으로 아래와 같이 사용한다
* 유니온은 내부 정렬이 먹지 않는다

select * from table_a
union all
select * from table_b

subquery

쿼리 안 쿼리라는 의미로
하위 쿼리의 결과를 상위 쿼리에서 사용한다
subquery는 () 안에 쿼리문을 넣어서 사용한다

select 예시

select문은 매 데이터 한줄마다 실행된다.

select c.checkin_id,
	   c.user_id,
       c.likes,
       (
       	select avg(likes)) from checkins c2
		where c2.user_id = c.user_id
       ) as avg_like_user
  from checkins c
	

from 예시

기존의 select와 이미 있는 테이블을 join하고 싶을 때 주로 사용한다.

select pu.user_uid, a.avg_like, pu.point 
  from point_users pu
  inner join (
    select user_id, round(avg(likes),1) as avg_like from checkins
    group by user_id
  ) a on pu.user_id = a.user_id

where 예시

select * from userse u
where u.users_id in (
	select o.user_id from orders o
    where o.payment_method = 'kakaopay'
)

with 문법을 사용해서 서브쿼리의 별칭을 정할 수 있다.

with 별칭 as (
	서브쿼리
)
select 별칭 from 테이블

case

경우에 따라서 원하는 값을 새 필드에 출력할 수 있다.

select case when 조건 then 출력값 
			when 조건2 then 출력값
            else 출력필드 end [as 출력필드이름]
...

그 외 문법

  • limit : 데이터베이스에서 목록을 읽어올 때 갯수를 제한할 수 있다.
  • distinct : 값의 중복을 제거해서 볼 수 있다.
  • count : 가져온 데이터의 수를 센다
  • sum : 가져온 데이터의 값을 모두 더한다
  • as : 별칭
  • substring_index : 특정 필드의 특정 값을 기준으로 어떻게 가져올 것인지 정할 수 있다.
    email@naver.com
    ex) substring_index(email,'@'1) : naver.com
    substring_index(email,'@',-1) : emai
  • substirng : 문자열을 일부분만 출력할 수 있다.
    substring(문자열, 출력을 하고 싶은 첫 글자의 위치, 몇 개의 글자를 출력하고 싶은지)
    ex) substring(created_at, 1, 10)
profile
dygmm4288

0개의 댓글